我有 15 个视频文件,想用 ffmpeg 合并。我想通过在一个命令行中合并所有视频文件来节省时间,而不是逐个剪切并合并。谢谢。
答案1
使用连接解复用器。
首先,创建一个包含文件名的文本文件。
file '1.mp4'
file '2.mp4'
file '3.mp4'
...
file '13.mp4'
file '14.mp4'
file '15.mp4'
然后,运行 concat 命令。
ffmpeg -f concat -i textfile -c copy -fflags +genpts merged.mp4
为了实现这一点,所有视频都应具有相同的属性,例如编解码器、分辨率、帧速率、采样率等。
如果不是,您可以对连接进行编码。
ffmpeg -f concat -i textfile -fflags +genpts merged.mp4
另请参阅FFmpeg Wiki:连接。
答案2
Gyan 的建议对我来说不起作用。建议的命令输出的视频与第一个输入的时长相同,因此视频 2 和 3 的内容丢失,我的媒体播放器在尝试播放输出时崩溃了。
然而,我确实在他提供的参考资料中找到了答案:http://trac.ffmpeg.org/wiki/Concatenate#filter
ffmpeg -i v1.mp4 -i v2.mp4 -i v3.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0][2:v:0][2:a:0]concat=n=3:v=1:a=1[outv][outa]" -map "[outv]" -map "[outa]" v_out.mp4
此命令适用于所有同时具有视频和音频流的视频。对于没有音频的视频,我稍微修改了命令,如下所示:
ffmpeg -i v1_NoAudio.mp4 -i v2.mp4 -i v3.mp4 -filter_complex "[0:v:0][1:v:0][2:v:0]concat=n=3:v=1[outv]" -map "[outv]" v_out_NoAudio.mp4
实际上,我只是删除了命令中有关音频的任何部分。这会丢弃第二和第三个视频的音频,因为使用此过滤器的规则是所有视频中的频道保持不变。