我想替换具有两个音频流的视频文件中的第二个音频流 (0:2),并尽可能为其添加标签。我该怎么做?我找到的所有 ffmpeg 命令都不允许我保留第二个音频流。
答案1
使用-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:v
–0
指的是第一个输入video.mkv
。v
表示“选择视频流类型”。0:a:0
–0
表示第一个输入为video.mkv
。a
表示“选择音频流类型”。 最后一个0
表示来自此输入的第一个音频流。 如果仅0:a
使用 ,则将映射所有视频流。1:a
–1
指的是第二个输入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
筛选这里使用了,因此本例中音频不能进行流复制。