如何用多个音频流替换视频文件中的音频流?


19

我想替换具有两个音频流的视频文件中的第二个音频流(0:2),并在可能的情况下为其添加标签。我将如何处理?我发现的所有ffmpeg命令都不允许我保留第二个音频流。

Answers:


22

使用该-map选项选择您的流。默认流选择只会选择每种流类型之一,因此这就是为什么-map必须使用它的原因。

替换第二个音频流

在此处输入图片说明

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v0表示第一个输入为video.mkv。的v意思是“选择视频流类型”。

  • 0:a:00表示第一个输入为video.mkv。的a意思是“选择的音频流类型”。最后一个0引用此输入的第一个音频流。如果仅0:a使用,则将映射所有视频流。

  • 1:a1指的是第二个输入,即audio.mp3。的a意思是“选择的音频流类型”。

  • -codec copy流式复制(重新混合)而不是编码。如果需要特定的音频编解码器,则应指定-c:v copy(保留视频),然后例如-c:a libmp3lame将音频流重新编码为MP3。

  • -shortest 最短输入结束时将结束输出。

将两个音频流合并为一个

在此处输入图片说明

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • 过滤需要重新编码,并且在此处使用了amerge过滤器,因此在此示例中无法将音频流复制。

根本不适合我
Rudolf Olah 2014年

@omouse“没有工作”很难提供帮助。您应该使用pastebin链接显示命令和完整的控制台输出。
llogan 2014年

我的问题是-codec copy,但是我解决了该问题(不同版本的ffmpeg),我遇到的另一个问题是-map,它抱怨流数量错误。
Rudolf Olah 2014年

1
我刚用过-map 0:v -map 1:a。我认为这意味着从第一个文件(video.mkv)中获取视频,然后从第二个文件(audio.mp4)中获取音频,以创建output.mkv ... ...不确定-map 0:a:0用于什么目的。我排除了它,得到了想要的结果。
太阳

2
@ aaronk6原始问题要求一种将多个音频流映射到输出的方法。该示例从第一输入获取第一音频流,并从第二输入获取音频流,并将它们映射到输出。似乎有些人假设该示例使用单个音频流进行输出,然后造成混淆。
llogan 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.