为什么在转换https m3u8流时ffmpeg会忽略protocol_whitelist标志?

Jac*_*ord 6 ffmpeg

我正在尝试使用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
Run Code Online (Sandbox Code Playgroud)

(有关的内容,请参见下文MIE.m3u8

这立即失败并出现错误

[https @ 0x7fb419607d40] Protocol 'https' not on whitelist 'file,crypto'!
MIE.m3u8: Invalid argument
Run Code Online (Sandbox Code Playgroud)

(请注意,内存地址每次都会更改。)

我发现了-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
Run Code Online (Sandbox Code Playgroud)

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

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


MIE.m3u8(我设法从要抓取视频的网站上获取)看起来像这样:

#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
Run Code Online (Sandbox Code Playgroud)

Jac*_*ord 10

-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
Run Code Online (Sandbox Code Playgroud)

我找不到任何官方文档¹,但是protocol_whitelist在输入之前指定时,它可以工作。

¹但是我在Debian Bugs讨论板上从Alexander Strasse那里得到了这个主意。

  • 这是一个输入选项。用户可能只希望一个输入只允许使用http,而另一个https也可以。.etc-https://ffmpeg.org/ffmpeg-protocols.html#Protocol-Options (2认同)