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

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

如果文件没加密,可以直接用 ffmpeg -i xxx.m3u8 -vcodec copy -acodec copy xxx.mp4

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

寻找资源

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

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

资源合并为 mp4

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

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

然后打开 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

运行后可能会发现报错:
ffmpeg合并M3U8加密的视频 ts 合并为 mp4_第3张图片
看到这个错误其实只需要在 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 下载快多了!

你可能感兴趣的:(开发工具,ffmpeg,m3u8)