一些网站会提供m3u8视频地址,以供下载观看。或者一些网站经过分析后发现是使用m3u8格式进行播放的,这时使用m3u8的地址链接就可以下载到相应的视频。

一、关于m3u8:(https://blog.csdn.net/baidu_34418350/article/details/64922512)

m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。

http://t.elecfans.com/live/749.html?room=1

直接F12查看视频播放列表链接

## 一、实际地址获取

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:22

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-KEY:METHOD=AES-128,URI="video.key"

#EXTINF:16.666667,

index0.ts

#EXTINF:16.666667,

index1.ts

#EXTINF:16.666667,

index2.ts

#EXTINF:16.666667,

index3.ts

#EXTINF:8.333333,

index4.ts

看到ts结尾的文件,这才是视频真正的存放路径:

下载到本地,视频软件无法播放:

## 二、视频下载

可以用python脚本自动下载这些ts文件,但实际上有些网站的ts文件是用AES-128加密过的,所以需要解密才能播放。

加密过的视频在第二层m3u8中会有一个key文件链接:

#EXTM3U

#EXT-X-VERSION:3

#EXT-X-TARGETDURATION:22

#EXT-X-MEDIA-SEQUENCE:0

#EXT-X-KEY:METHOD=AES-128,URI="video.key"

#key密钥文件

需要去读取这个key文件,才能拿到解密密钥。

然后开始【Python抄写】

# -*- coding:utf-8 -*-
import os
import sys
import requests
import datetime
from Crypto.Cipher import AES
from binascii import b2a_hex, a2b_hex#reload(sys)
#sys.setdefaultencoding('utf-8')def download(url):download_path = os.getcwd() + "\download"if not os.path.exists(download_path):os.mkdir(download_path)#新建日期文件夹download_path = os.path.join(download_path, datetime.datetime.now().strftime('%Y%m%d_%H%M%S'))#print download_pathos.mkdir(download_path)all_content = requests.get(url).text  # 获取第一层M3U8文件内容if "#EXTM3U" not in all_content:raise BaseException("非M3U8的链接")if "EXT-X-STREAM-INF" in all_content:  # 第一层file_line = all_content.split("\n")for line in file_line:if '.m3u8' in line:url = url.rsplit("/", 1)[0] + "/" + line # 拼出第二层m3u8的URLall_content = requests.get(url).textfile_line = all_content.split("\n")unknow = Truekey = ""for index, line in enumerate(file_line): # 第二层if "#EXT-X-KEY" in line:  # 找解密Keymethod_pos = line.find("METHOD")comma_pos = line.find(",")method = line[method_pos:comma_pos].split('=')[1]print ("Decode Method:", method)uri_pos = line.find("URI")quotation_mark_pos = line.rfind('"')key_path = line[uri_pos:quotation_mark_pos].split('"')[1]key_url = url.rsplit("/", 1)[0] + "/" + key_path # 拼出key解密密钥URLres = requests.get(key_url)key = res.contentprint ("key:" , key)if "EXTINF" in line: # 找ts地址并下载unknow = Falsepd_url = url.rsplit("/", 1)[0] + "/" + file_line[index + 1] # 拼出ts片段的URL#print pd_urlres = requests.get(pd_url)c_fule_name = file_line[index + 1].rsplit("/", 1)[-1]if len(key): # AES 解密cryptor = AES.new(key, AES.MODE_CBC, key)  with open(os.path.join(download_path, c_fule_name + ".mp4"), 'ab') as f:f.write(cryptor.decrypt(res.content))else:with open(os.path.join(download_path, c_fule_name), 'ab') as f:f.write(res.content)f.flush()if unknow:raise BaseException("未找到对应的下载链接")else:print ("下载完成")merge_file(download_path)def merge_file(path):os.chdir(path)cmd = "copy /b * new.tmp"os.system(cmd)os.system('del /Q *.ts')os.system('del /Q *.mp4')os.rename("new.tmp", "new.mp4")if __name__ == '__main__': url = "http://media.elecfans.com/topic/gongkaike/2019/03/d220246a27f399509fc2022731b8ae3b/30/hls/index.m3u8" download(url)

代码照搬--------------------- 
作者:a33445621 
来源:CSDN 
原文:https://blog.csdn.net/a33445621/article/details/80377424

Python下载加密m3u8视频相关推荐

  1. 使用python下载加密的流媒体m3u8视频文件,获取电影资源

    使用python下载加密的流媒体m3u8视频文件,获取电影资源 m3u8简介 代码示例 获取文件名与m3u8地址 媒体序列解密 视频序列片段下载 完整代码 后记 m3u8简介 M3U8是Unicode ...

  2. python需要花钱下载吗_用Python下载知乎视频,非常实用

    原标题:用Python下载知乎视频,非常实用 Python下载知乎视频. # -*- coding: utf-8 -*- """ 下载知乎视频: 依赖: pip inst ...

  3. 参考 | Python 下载网页端视频

    Python | 下载网页端视频

  4. python下载B站视频(简单)

    python下载B站视频资料 众所周知,网页版的B站无法下载视频,然本人喜欢经常在B站学习,奈何没有网时,无法观看视频资源,手机下载后屏幕太小又不想看,遂写此程序以解决此问题 话不多说,进入正题 1. ...

  5. python下载加密视频_Python下载未加密的m3u8文件(流媒体文件)

    很多时候我们用手机浏览器缓存视频时发现缓存下来的文件后缀是.m3u8格式的,按文件目录找过去发现是一个几十K大小的系统不可读的文件,那我们缓存下来的文件去哪儿了呢? 其实.m3u8文件就相当于一个协议 ...

  6. python 实现多线程下载加密m3u8格式视频,使用FFmpeg合并

    如果你要下载的m3u8文件未加密: 请移步:https://blog.csdn.net/s_kangkang_A/article/details/103071822 上次做完了没加密的,再次记一下加密 ...

  7. python下载合并m3u8文件

    使用浏览器开发者工具获取index.m3u8文件,直接复制访问路径进行请求即可下载相应的m3u8文件,文件里是ts视频的路径,一般长这样: 每一个.ts路径都是一段流视频访问地址,拼接主域名可以直接下 ...

  8. python下载b站视频_【python】抖音无水印视频下载和b站视频下载

    本帖最后由 370125229 于 2020-3-27 17:38 编辑 萌新一枚,拿这个练练手 用python写的,部分视频可能还是会有水印 抖音 蓝奏: https://www.lanzous.c ...

  9. python编程实例视屏-python 下载抖音视频示例源码

    [实例简介] 下载抖音视频 [实例截图] [核心代码] #code:utf-8 import requests from bs4 import BeautifulSoup import json se ...

最新文章

  1. 关于STM32系统构架的一点见解
  2. tcpdump -i eth0 -n -vvv src or dst port 443
  3. 重拾python Day 1
  4. 全栈工程师薪水_2019Java 全栈工程师 进阶路线图!一定要收藏!
  5. WPS长文档编辑技巧之二:对样式的设置与修改
  6. matlab连接mysql数据库_matlab连接数据库的问题
  7. 联合国应考虑建设第二总部
  8. 雨林木风GhostXPSP3装机版YN9.9_09.11更新
  9. 03-Spark MLib
  10. ncre计算机职业英语,NCRE计算机职业英语一级考试样卷.doc
  11. jquery的eval的使用
  12. [AS日记]MacOS的Android Studio卡在Building Gradle Project info走不动 的处理方法
  13. android游戏后台运行点击桌面游戏图标游戏重启的解决方法
  14. R语言3.6版本安装ggplot2报错解决方法
  15. NEX让人们对vivo刮目相看,这个互联网巨头出了一份力
  16. python将图片拼接为视频
  17. maven 中央仓库网址
  18. Linux系统设置命令大全
  19. react根据浏览器的尺寸动态调整布局
  20. Markdown使用小笔记

热门文章

  1. UE4提醒asset保存失败,弹出cancle、retry、continue对话框
  2. 猫眼爬虫-验证码解决问题
  3. 测试用例设计白皮书--因果图方法
  4. 分布式光纤传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  5. 基于PyQt5完成的PDF拆分
  6. 串口线的针脚连接方式
  7. c语言课程设计作业红白球,c语言课程设计报告.doc
  8. Windows平台下使用HFS搭建基于HTTP的文件服务器
  9. C++学习32:侯捷C++11,14新特性(标准库部分)
  10. 阴阳师动态角色展示卡