我需要将来自 srt 输入的一个视频和 2 个立体声音频流组合起来,以将一个视频和 4.0 音频流发送到 decklink 输出。
从:
Stream #0:0[0x100]: Video: h264 , 90k tbn ...
Stream #0:1[0x101]: Audio: aac (LC) ...
Stream #0:2[0x102]: Audio: aac (LC) ...
到
Stream #0:0: Video: wrapped_avframe, uyvy422(tv, top coded first (swapped)) ...
Stream #0:1: Audio: pcm_s16le, 48000 Hz, 7.1, s16,...
来自流 #0:1 的音频 1 和 2 以及来自流 #0:2 的音频 3 和 4
它与连接过滤器配合良好:
ffmpeg -i srt://:25000?mode=listener -map 0:v \-filter_complex "[0:a:0][0:a:1]join=inputs=2:channel_layout=3.1:map=0.0-FL |0.1-FR|1.0-FC|1.1-LFE[a]" -map "[a]" -f decklink -pix_fmt uyvy422 -s 1920x1080 -r 25000/1000 -c:a pcm_s16le -ac 8 -ar 48000 -format_code Hi50 "DeckLink Duo (1)"
同样使用合并过滤器:
ffmpeg -i srt://:25000?mode=listener -filter_complex "[0:a:0][0:a:1][0:a:1]amerge=inputs=3" -f decklink -pix_fmt uyvy422 - s 1920x1080 -r 25000/1000 -c:a pcm_s16le -ac 8 -ar 48000 -format_code Hi50 "DeckLink Duo (1)"
问题是,有时我在输入端只收到一个音频流。在这种情况下,两个选项都会失败,因为第二个流 0:a:1 不存在。
有没有办法执行一个兼容 2x 立体声到 4.0 转换和 1x 立体声到 2.0(或更多)转换的 FFmpeg 命令?它适用于无人值守工作的应用程序。