为啥ffmpeg在转换https m3u8流时忽略protocol_whitelist标志?

Posted

技术标签:

【中文标题】为啥ffmpeg在转换https m3u8流时忽略protocol_whitelist标志?【英文标题】:Why does ffmpeg ignore protocol_whitelist flag when converting https m3u8 stream?为什么ffmpeg在转换https m3u8流时忽略protocol_whitelist标志? 【发布时间】:2018-10-31 12:20:52 【问题描述】:

我正在尝试使用 ffmpeg 下载 m3u8 流并将其转换为 mp4。我第一次尝试的命令是

ffmpeg -i MIE.m3u8 -c copy -bsf:a aac_adtstoasc -safe 0 -protocol_whitelist file,http,https,tcp,tls,crypto MIE.mp4

MIE.m3u8的内容见下文)

这立即失败并出现错误

[https @ 0x7fb419607d40] Protocol 'https' not on whitelist 'file,crypto'!
MIE.m3u8: Invalid argument

(注意内存地址每次都会改变。)

我发现了-protocol_whitelist 标志并将-protocol_whitelist file,http,https,tcp,tls,crypto 附加到我的命令中

ffmpeg -i MIE.m3u8 -c copy -bsf:a aac_adtstoasc -safe 0 -protocol_whitelist file,http,https,tcp,tls,crypto MIE.mp4

但这仍然导致同样的错误。

为什么ffmpeg 似乎忽略了protocol_whitelist 标志和参数?


MIE.m3u8(我设法从 website 获取我试图从中抓取视频)看起来像这样:

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=508000,RESOLUTION=640x360,CODECS="avc1.77.30, mp4a.40.2"
https://nhk-vh.akamaihd.net/i/das/D0005140/D0005140255_00000_V_000.f4v/index_0_av.m3u8?null=0&id=AgBdrl8GX2UAVyUXA1tF7MYlFTbSF88WtA7oAMDksTsiVdAKPuuREVfi8iXMsOWFp6eQU2sk6dnE9g%3d%3d
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=47000,CODECS="mp4a.40.2"
https://nhk-vh.akamaihd.net/i/das/D0005140/D0005140255_00000_V_000.f4v/index_0_a.m3u8?null=0&id=AgBdrl8GX2UAVyUXA1tF7MYlFTbSF88WtA7oAMDksTsiVdAKPuuREVfi8iXMsOWFp6eQU2sk6dnE9g%3d%3d

【问题讨论】:

【参考方案1】:

protocol_whitelist 是仅在input 文件(在您的情况下为MIE.m3u8)上的参数,因此必须在您的命令输入之前指定

-i 之前指定-protocol_whitelist file,http,https,tcp,tls,它将按您的预期工作:

ffmpeg -protocol_whitelist file,http,https,tcp,tls,crypto -i MIE.m3u8 -c copy -bsf:a aac_adtstoasc MIE.mp4

您可以在 Debian Bugs discussion board 上查看类似案例,并阅读更多关于 ffmpeg 命令的 syntax 的信息。

【讨论】:

以上是关于为啥ffmpeg在转换https m3u8流时忽略protocol_whitelist标志?的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg 求把m3u8如优酷的转为 mp4的命令行

如何使用ffmpeg批量下载m3u8?

sh 使用FFMPEG将m3u8转换为MP4

ffmpeg进行视频切片,生成m3u8

使用ffmpeg把mp4与m3u8相互转换的操作

Windows平台下使用ffmpeg和segmenter实现m3u8直播点播