关于m3u8格式的视频文件ts转mp4下载和key加密问题
一,利用网站浏览器F12键,利用谷歌浏览器插件找到视频的.m3u8文件,并打开。



二,打开m3u8文件后,里面有很多.ts的链接,和key的链接。

三,保存为html文件,下载ts文件,代码如下:可加多线程,可能需要用代理。
# 爬虫 123.html就是打开m3u8文件右键保存为html格式。
htmlf=open('./123.html','r',encoding="utf-8")
htmlcont=htmlf.read()
# print(htmlcont)
import requests
from lxml import etree
tree = etree.HTML(htmlcont)
href = tree.xpath("//a//@href")
# print(href)
ts = href[2273:]
print(len(ts))
# print(ts)
for i in ts:
a = i.split("/")[-1]
# print(a)
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.87 Safari/537.36"}
try:
rest = requests.get(i,headers=headers)
if rest.status_code == 200:
with open(a,"wb") as fp:
fp.write(rest.content)
fp.close()
except Exception as e:
print(e)
四,方法参考1:
参考链接:https://gist.github.com/larvata/95df619df7109d8b74d2b965a3266354#ffmpeg-cheatsheet
首先 先下载 key 和 m3u8
然后修改 m3u8 中 key 的路径
最后 用 ffmpeg 下载
ffmpeg -i <source.m3u8> -c copy <target.ts>
四,方法参考2:
关于m3u8文件, ts文件解密, hls 解密. 一些记录
openssl aes-128-cbc -d -in 原.ts -out 解密后.ts -nosalt -iv 偏移量 -K key16进制
其中 iv 偏移量和 key 一般都会在 m3u8 中。 key要按地址下载下来, iv偏移量是可选的,如果m3u8里没有iv,iv可以随便设置为0。还可以直接使用 ffmpeg 直接合并文件。
五,对于加密的m3u8文件:
m3u8视频另一种下载方式
如上图中用ts链接直接下载下来的ts视频文件是加密的(为什么要下加密的?虽然加密但是下载速度快啊)。
#EXT-X-KEY 字段已经写明了加密方式是AES-128,key通过URI获取,IV也有。

那怎么解密呢?
1.复制URI地址到网页,你将秒速自动下载得到一个16字节文件
2.打开终端,打开该文件查看16进制:

六,获取key值:
下载m3u8里的key文件,下载winhex.exe应用程序,安装之后,把key文件拖入winhex里,自动生成16进制。

七,合成下载好的.ts文件:
左下角点击运行:cmd
copy /b 文件所在盘:\子文件\*.ts 储存的文件夹:\子文件\new.ts
把上边的汉字换成盘符和文件所在的文件夹。
注意:合并ts文件时,如果ts文件超过1000,排序就会有问题,会出现,121,1210,1211.。。。。。122,1220,1221,1222.。。。。。
这里分为几个部分,按批次合并。


八,合成一个ts文件之后还不能打开,因为ts是加密的。

这里,没有iv值,用0代替。这样解密之后的ts文件即可播放。
九,注:ts文件的顺序必须是有序的,不可缺少的。
参考网址:简书:https://www.jianshu.com/p/1b0adcc7b426
所有的ts转MP4,新建文本文档,ren *.mp4 *.ts,修改后缀.bat,运行即可。
key值文件下载如下图:(需转16进制数)

十,关于报错
hex string is too short, padding with zero bytes to length
bad decrypt
25916:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:crypto\evp\evp_enc.c:559:

解决方法:
# 遍历文件夹进行解密(执行cmd命令,一定查看当前路径问题)
import os
for root, dirs, files in os.walk("E://BaiduNetdiskDownload//123//1",topdown=False):
print(len(files))
os.system("cd 1")
os.system("cd")
for f in files:
print(f)
# os.system("openssl aes-128-cbc -d -in 7udG3475000.ts -out ./11/7udG3475000.ts -iv 00000000000000000000000000000000 -K 65323739393530323866636362626661"%(f,f))
os.system("openssl aes-128-cbc -d -in ./1/%s -out ./1/11/%s -iv 00000000000000000000000000000000 -K 65323739393530323866636362626661"%(f,f))
先解密,再合并为一个文件。先把一个个小的ts文件解密,之后再进行合并为大的ts,最后再改格式为MP4,这种比较好,视频播放不会出现卡顿,如果是先合并再解密,断点播放会出现卡顿现象。
文件夹如图:
1234文件夹里每个ts都经过解密,然后合并为111222333444四个文件。在进行合并改格式即可。
报错问题函待解决:
用 openssl 进行解密,知道是 AES-128-CBC 解密,有 key 文件( 16 字节),用 hexdump 查看密钥发现是 32 字节的,用命令 openssl aes-128-cbc -d -in in_file.ts -out out_file.ts -nosalt -iv 00000000000000000000000000000001 -K XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 进行解密,解密到最后提示 error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:evp_enc.c:528: 查阅过资料出现 EVP_DecryptFinal_ex 函数错误这提示有可能是还有没解密完的数据块,一般情况是密文不正确、不是块大小的整数倍才会出现没解密完的数据块,但是我尝试下载解密其他码率的 m3u8 文件(如 500K,1000K,2000K )用的都是同个密钥,都能成功解密,唯独这个 3000K 的解密出现问题,之后以为是文件下载不完全,后来又下载下载了一直想不通哪里出问题,是因为视频容量太大导致吗?还是我解密的方法有问题。
关于m3u8格式的视频文件ts转mp4下载和key加密问题的更多相关文章
- vue中通过hls.js播放m3u8格式的视频
近期做了一个功能,是接入一个海康的摄像头的监控视频,怎么获取m3u8的视频这里就不在叙述了,只说一下怎么将m3u8格式的视频成功播放 一.m3u8和HLS介绍 1.M3U8文件是指UTF-8编码格式的 ...
- 怎么下载腾讯课堂M3U8格式的视频
好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 前言 用过腾讯课堂的小伙伴们可能 ...
- CentOS 6.4 播放avi格式的视频文件
1. 需要先进行相关的yum源的导入: rpm -Uhv http://apt.sw.be/redhat/el6/en/x86_64/rpmforge/RPMS/rpmforge-release-0. ...
- 网站上flv,MP4等格式的视频文件播放不出来的解决办法
在做一个网站时,发现视频文件,比如flv,MP4格式在本地可以正常的播放,但是传到了开发机器上,就不行了.播放器的文件地址是对的,就是一直没有反应. 经过长时间的实验,发现问题在与iis的设置问题.i ...
- .ts 视频文件 .m3u8视频文件合并 转换为mp4
1. 先把 .m3u8.zip 格式文件解压到文件夹D:\a. 2. 将文件夹内的 .ts文件名处理好. 一般均为按顺序排列. (殊情况需要根据.m3u8文件记录处理.) 举例,根据实际情况处理. ( ...
- JAVA通过URL链接获取视频文件信息(无需下载文件)
最近项目碰到一个大坑:APP上需要在获取视频列表时就获取视频的时长,但早期上传的时候数据库都没有保存这个数据,所以前段时间添加一个时长字段,在上传时手动输入视频时长,但是之前库中有上万条数据没这个信息 ...
- Python 爬虫实例(13) 下载 m3u8 格式视频
Python requests 下载 m3u8 格式 视频 最近爬取一个视频网站,遇到 m3u8 格式的视频需要下载. 抓包分析,视频文件是多个 ts 文件,什么是 ts文件,请去百度 ...
- Vue中如何插入m3u8格式视频,3分钟学会!
大家都知道video只支持ogg.webm.MP4格式,但是要是m3u8格式的视频怎么办?最近遇到这个问题在网上找了好多办法都不行,最后找到video.js后才完美解决,所以决定写一 ...
- 在vue项目中播放m3u8格式视频
前言:最近公司在做一个线上会议的项目,要求后台网站播放m3u8格式的视频,查找部分资料,总结一下,方便后边查阅 1.在vue工程中安装以下依赖: cnpm install video.js --sa ...
随机推荐
- java跳出循环break;return;continue使用
for(int i=0;i<5;i++){ if(i==2){ System.out.println("i==2时忽略了"); continue;//忽略i==2时的循环 } ...
- 简要介绍Active Learning(主动学习)思想框架,以及从IF(isolation forest)衍生出来的算法:FBIF(Feedback-Guided Anomaly Discovery)
1. 引言 本文所讨论的内容为笔者对外文文献的翻译,并加入了笔者自己的理解和总结,文中涉及到的原始外文论文和相关学习链接我会放在reference里,另外,推荐读者朋友购买 Stephen Boyd的 ...
- 基于 Ubuntu 系统安装 CUDA 和 cuDNN
************************************************ 显卡:GTX 1050Ti 系统:Ubuntu 18.0.4 安装的CUDA:10.0 版本 **** ...
- 单片机成长之路(51基础篇) - 023 N76e003 系统时钟切换到外部时钟
N76e003切换到外部时钟的资料很少(因为N76e003的片子是不支持无源晶振的,有源晶振的成本又很高,所以网上很少有对N76e003的介绍).有图有真相: 代码如下: main.c #includ ...
- STMP发送邮件(C#)
记录一下使用SMTP协议发送邮件 public void Mail() { try { System.Net.Mail.SmtpClient client = new System.Net.Mail. ...
- Android Studio出现Wait for build to finish解决办法
公司用钉钉打卡,我作弊哈哈,买了个大牛助手. 刚续费包年,开发商竟然跑路了.服务器连不上,不能用了,心血来潮想说能否自己破解了.好家伙需要学的还真不少,首先还要从安卓开发学起... 刚装了Androi ...
- vertx 异步编程指南 step8-使用RxJava进行反应式编程
vertx 异步编程指南 step8-使用RxJava进行反应式编程 2018-04-23 13:15:32 zyydecsdn 阅读数 1212 收藏 更多 分类专栏: vertx 到目前为止 ...
- Mybatis连接MySQL时,可以使用的JDBC连接字符串参数
一.举例 spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test_db?useAffectedRows=true&allowMultiQu ...
- Python中的函数(高级使用)
一.将函数作为变量去使用 在Python中函数也是一种对象,是一种名为function的对象,所以可以将函数赋值给变量,类似整数.浮点数.列表.元组.字典赋值给变量. 我们编写如下程序: #codin ...
- Linux系统SSH免密登录
第一章 生成密钥 1.1 生成用户默认文件名的密钥 [root@localhost ~] ssh-keygen -t rsa # root用户下生成root用户的默认密钥 1.2 生成用户指定文件名的 ...