欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ffmpeg合并M3U8加密的视频 ts 合并为 mp4

程序员文章站 2022-07-14 18:18:16
...

文章引用于 ffmpeg 合并 m3u8 ts key 文件 解决 Invalid data found when 错误

之前也写过一篇文章,使用ffmpeg下载 M3U8 资源的视频。今天接着来拓展一下这个下载视频

寻找资源

要想下载 M3U8 的资源,最起码得找到下载的链接,可能这个非常好找了,找到控制台的 NetWork 查看请求就行了。
可是这有一点非常不好的就是,使用 ffmpeg 去下载,只能一个个资源去请求,并且非常慢,经常还有可能请求失败(资源是可以访问到的,可是 ffmpeg 就卡住了)

解决方案:chrome 插件 猫抓
当他嗅探到资源后,就会都列出来
ffmpeg合并M3U8加密的视频 ts 合并为 mp4
而我通常用 IDM 把列出的资源一下子都下载下来

资源合并为 mp4

留意上面的图,这段 m3u8 是一个 key 的文件,就是加密的文件。还好 ffmpeg 可以自动识别 key 文件并且解密文件,可是这一步有点曲折

我们先把 m3u8 的源文件下载下来,把 ts 文件都下载好,放在同一个文件夹
ffmpeg合并M3U8加密的视频 ts 合并为 mp4

然后打开 m3u8 文件,找到 key.key 的配置,改为线上的 key,而不是读取本地的 key 。虽然我到现在也没搞懂这是为什么~

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://xxxx/key.key" # 注意URI这里,改成线上的key的域名链接
#EXTINF:3.336667,
#EXTINF:1.668333,
clvHz13123499.ts
#EXTINF:2.035367,
clvHz13123500.ts
#EXT-X-ENDLIST

解密文件,合并 ts 为 mp4

使用命令

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i index.m3u8 -c copy out.mp4

运行后可能会发现报错:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bDBHgbsD-1582468013614)(https://raw.githubusercontent.com/Jioho/img/master/ffmpeg/20200223222320.png)]

看到这个错误其实只需要在 protocol_whitelist 后面补上https。后面报错提示什么就补上什么,因为对应的 m3u8 需要这几种下载方式

于是命令改成如下:

ffmpeg -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp,https" -i index.m3u8 -c copy out.mp4

如果还发现报错是:Invalid data found when 这样的,就是因为你的 key 没有改成线上域名的 key,改了重新试下就行了

然后发现 ffmpeg 合并的飞快,比起直接用 ffmpeg 下载快多了!