使用ffmpeg合并多个视频和音频文件

5

我有一个音频和视频片段的数组,其中每个音频片段与其视频片段具有1:1的对应关系。每个视频和音频片段的编码方式相同。如何将所有音频片段和所有视频片段连接起来,然后将它们合并在一起输出为一个视频。目前我只知道如何将一个音频片段与一个视频片段合并:

$ ffmpeg -i video_1.webm -i audio_1.wav -acodec copy -vcodec copy output.mkv

更新 我刚刚发现mkvmerge,这可能是一个更好的选择吗?

2个回答

9
如果所有文件都是用相同的编解码器进行编码的,那么处理起来就很容易了。首先像你已经做的那样合并音频和视频文件,这样每对文件都包含在一个mkv文件中。然后你可以使用concat分离器将它们连接起来,像这样:
ffmpeg -f concat -i <(printf "file '%s'\n" ./file1.mkv ./file2.mkv ./file3.mkv) -c copy merged.mkv

或者:

ffmpeg -f concat -i <(printf "file '%s'\n" ./*.mkv) -c copy merged.mkv

你也可以在名为mergelist.txt(或其他你想要的名称)的文本文件中每行列出一个文件,例如:
file './file1.mkv'
file './file2.mkv'
file './file3.mkv'

然后将其作为输入使用,如下所示:
ffmpeg -f concat -i mergelist.txt -c copy merged.mkv

这是目前最简单、最快速的方法,因为它不会重新编码文件,只是将它们一个接一个地排列起来。


4

您可以在这个旧问题中找到答案:

使用ffmpeg连接两个mp4文件

这个答案不仅限于MP4格式。但它将取决于您想要连接的文件格式!

一旦您有了新的VIDEO文件和AUDIO文件,将它们合并在一起:

ffmpeg -i AUDIO -i VIDEO -acodec copy -vcodec copy OUTPUT


我会尝试使用concat来连接视频文件,但是接下来我该如何将连接后的视频文件与连接后的音频文件合并/添加在一起呢? - Dan Ramos
非常好,运行得很棒!最后一个问题,音频和视频文件是否会在连接期间被压缩两次,一次在连接时,一次在合并时?还是说FFmpeg只是简单地组合这些文件而没有进行任何压缩? - Dan Ramos
根据连接它们的方式,它们将需要重新编码...我给你的最后一步不需要重新编码。参数“-acodec copy”和“-vcodec copy”仅保证转封装,而不会失去任何质量。 - Wagner Patriota
很抱歉,但是重复问题中的命令行怎么能成为问题的答案呢?他想要连接多个文件,这意味着一个接一个地连接,而不是并排连接。这样做肯定会将音频A和视频B合并成MKV C,但是对于连接MKV A、MKV B和MKV C并没有帮助。 - Justin Buser
先阅读以下内容。刚开始,他的音频和视频是分开的。我解释说,他已经拥有的命令只是为了将音频+视频连接起来。如何连接视频和如何连接音频是他实际上的问题。我给了他一个链接......一旦连接,他就可以使用他已经知道的命令来将音频+视频连接起来。 - Wagner Patriota

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接