为啥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标志?的主要内容,如果未能解决你的问题,请参考以下文章