Audio ffmpeg将MXF视频的多(N)个单声道音频通道合并为MP4视频的多(M)个立体声通道

Audio ffmpeg将MXF视频的多(N)个单声道音频通道合并为MP4视频的多(M)个立体声通道,audio,video,ffmpeg,channels,Audio,Video,Ffmpeg,Channels,我有一个带有16个音频单声道流的MXF文件,我需要用2将其重新编码到mp4文件中。代码是用换行符组织的。\在Unix shell中打断一行 ffmpeg -i "in.mxf" \ -filter_complex "\ [a:0][a:1]amerge=inputs=2[ch1ch2];\ [a:8][a:9]amerge=inputs=2[ch9ch10]" \ -map 'v:0' \ -map '[ch1ch2]' \ -map '[ch9ch10]' \ -c:v copy \ -c:a

我有一个带有16个音频单声道流的MXF文件,我需要用2将其重新编码到mp4文件中。代码是用换行符组织的。
\
在Unix shell中打断一行

ffmpeg -i "in.mxf" \
-filter_complex "\
[a:0][a:1]amerge=inputs=2[ch1ch2];\
[a:8][a:9]amerge=inputs=2[ch9ch10]" \
-map 'v:0' \
-map '[ch1ch2]' \
-map '[ch9ch10]' \
-c:v copy \
-c:a aac -b:a 128k -ar 48000 -ac 2 \
"out.mp4"
  • 输入
  • 筛选器\u complex(使用
    而不是
    。如果我使用shell换行符
    \
    ,我会得到一个单引号的错误
    '
  • 使用
    amerge
    过滤器并选择
    • 第一个音频流
      a:0
    • 第二个音频流
      a:1
    • 合并它们并
    • 将其存储在输出板
      ch1ch2
      (您可以给它任何名称)
  • 使用另一个
    amerge
    过滤器并选择
    • 第9个音频流
      a:8
    • 第10个音频流
      a:9
    • 合并它们并
    • 将其存储在输出板
      ch9ch10
  • 映射视频流(如果忽略此项,则输出没有视频)
  • 将键盘
    ch1ch2
    映射到第一个音频流
  • 将键盘
    ch9ch10
    映射到第二个音频流
  • 复制视频流(如果忽略此项,将重新编码视频)
  • 使用aac对所有音频流进行编码
  • 输出
  • 这里的输出只有2个映射的音频通道

    如果你想保留一些剩余的频道,你必须映射它们。 您甚至可以在第7行之后添加
    -map 0
    ,以将所有流堆叠在合并的流之下。(当然,最终会得到2+16个音频流。)

    您可以添加更多的
    amerge
    过滤器。使用
    您还可以将3个音频流与
    [a:0][a:1][a:2]amerge=inputs=3[ch1ch2ch3]
    合并。 将音频频道命名为

    -元数据:s:a:0 title=“频道1和频道2”


    这对于测试很有用,因为你可以在VLC中看到名称。

    OP想要合并流,所以必须使用过滤器,比如amerge。映射和流复制将不起作用。谢谢你的回答drake7,但是,正如Gyan所说,我需要合并流。哦,我的糟糕;)你能提供一个5秒钟的测试文件:
    ffmpeg-I”video.mxf吗“-map 0-c copy-t 5”video_5s.mxf
    Hi drake7,感谢您的回答和帮助。您可以在此处下载视频片段:不客气;)感谢测试文件。我已成功测试并编辑了我的答案。