使用 ffmpeg,如何在对第二个副本应用过滤器时加倍流?

With ffmpeg, how to double a stream while applying a filter to the second copy?

我正在使用 Plex,它始终考虑第一个音频流,但也无法解码我的立体声系统(我的笔记本电脑)上的环绕声媒体文件。

出于这个原因,我打算缩混(遵循 this answer 中建议的公式,这是对 -ac 2 的改进)一堆文件,所以我有:

Stream 0:0 > Video
Stream 0:1 > 2.0 Filtered audio
Stream 0:2 > 5.1 Original audio

问题是,虽然我的缩混需要过滤,但流的加倍需要复制,我发现这两个似乎并没有在一起,尽管在我看来这是可以完成的,因为过滤时和复制适用于相同的 input 流,它们不适用于相同的 output 流。

这是我当前失败的命令:

ffmpeg -i "INPUT.mkv" -map 0:v -c:v copy -map 0:a:0 -c:a:0 ac3 -vol 425 -filter_complex "[0:a:0]pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE" -map 0:a:0 -c:a:0 copy  "OUTPUT.mkv"

有办法吗?

因此,您想要将 5.1 音频映射到 2 个输出音频流:过滤后的 2.0 和原始 5.1。您走在正确的轨道上,但在流说明符中混淆了。试试这个:

ffmpeg -i "INPUT.mkv" \
  -filter_complex "[0:a:0]pan=stereo|FL=0.5*FC+0.707*FL+0.707*BL+0.5*LFE|FR=0.5*FC+0.707*FR+0.707*BR+0.5*LFE,volume=1.66[filtered]" \
  -map 0:v -c:v copy \
  -map [filtered] -c:a:0 ac3 \
  -map 0:a:0 -c:a:1 copy \
  "OUTPUT.mkv"

更改:(1) 将过滤器输出命名为 [filtered],(2) 第二个输出音频流应为 a:1,(3) 将音量设置移至 complex_filter

编辑注释:反映 Fabio 和 Lex 对答案的评论