ffmpeg - 向视频添加 3 个音频流

ffmpeg - add 3 audio streams to video

我有以下问题。
文件夹中有 video.mp4 文件(包含 1 个音频流)。还有 3 个不同的文件 audio1.wav、audio2.wav、audio3.wav。我需要将这些文件 'attach' 作为视频文件的多流 - 因此用户可以在 VLC 播放器或类似播放器中选择音频语言。结果必须是一个音频 - 不要将它们混合在一起。

现在,我已经通过 Premiere Pro 使用多轨(quicktime 导出到 mov)完成了它,然后我 运行 一个脚本来更改音频流名称以与音频语言 (iso 639-2) 相对应) 并输出 mp4 文件。一切正常,但我想知道是否有简单的方法可以通过 ffmpeg(.bat 脚本)完成所有操作。我有一个用于替换视频中音频的工作脚本,但我需要向视频文件添加一些额外的 .wav 作为单独的音轨。 任何帮助将不胜感激!

将新音轨添加到现有的带音频视频中,请使用

指定所有输入文件(原始视频和附加音频)的-i参数

手动 select 每个输入的轨道的 -map 选项 (https://trac.ffmpeg.org/wiki/Map)

在你的情况下,
-map 0 从输入#0(视频)复制所有流
-map 1:a 包括来自输入#1 文件 (audio1) 的所有音频流
-map 2:a 包括来自输入#2 文件 (audio2) 的所有音频流
等等

-shortest 将输出裁剪为最短的输入

另外你可能想使用
-c:v copy 复制视频流而不重新编码。

所以,试试这个(为了便于阅读而拆分行)

 ffmpeg -i video.mp4 -i input1.mp3 -i input2.mp3 
        -map 0 -map 1:a -map 2:a 
        -c:v copy -shortest 
        output.mp4

并(添加到您的评论中)为音轨添加元数据

ffmpeg -i video.mp4 -i input1.mp3 -i input2.mp3 
       map 0 -map 1:a -map 2:a 
       -metadata:s:a:0 language=eng
       -metadata:s:a:1 language=ger
       -metadata:s:a:2 language=fra 
       -disposition:a:0 default
       -c:v copy -shortest 
       output.mp4