在特定时间内使用 ffmpeg 单命令行合并多个视频,无需逐个剪切并合并

在特定时间内使用 ffmpeg 单命令行合并多个视频,无需逐个剪切并合并

我有 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

实际上,我只是删除了命令中有关音频的任何部分。这会丢弃第二和第三个视频的音频,因为使用此过滤器的规则是所有视频中的频道保持不变。

相关内容