使用 ffmpeg 可以将多个 MP4 文件按顺序合并成一个视频文件。以下是具体步骤:

常规合并

1. 创建一个文本文件列出所有要合并的文件

首先,创建一个文本文件(例如 input.txt),并在其中列出所有要合并的 MP4 文件路径,每个文件占一行。例如:

echo "file 'video1.mp4'" > input.txt
echo "file 'video2.mp4'" >> input.txt
echo "file 'video3.mp4'" >> input.txt

2. 使用 ffmpeg 进行合并

然后,使用以下命令将这些文件合并成一个视频文件:

ffmpeg -f concat -safe 0 -i input.txt -c copy output.mp4

参数说明:

  • -f concat:指定输入格式为 concat,用于合并文件。
  • -safe 0:允许使用相对路径或绝对路径的文件列表。
  • -i input.txt:指定输入文件列表。
  • -c copy:直接复制视频和音频流,不进行重新编码,速度较快。
  • output.mp4:输出的合并后的视频文件名。


注意事项:
如果视频文件的编码格式不一致,可能需要先进行转码,确保它们具有相同的编码格式、分辨率和帧率。
如果视频文件的编码格式一致,-c copy 可以直接合并,速度较快。

不使用 input.txt 列表文件的命令行合并

ffmpeg 的 -i 参数主要用于指定输入文件,但它本身并不支持直接传入多个文件名来合并视频。不过,你可以通过其他方式手动指定多个输入文件,而无需使用 input.txt 文件。

方法 1:使用 concat 过滤器

ffmpeg 的 concat 过滤器可以直接在命令行中指定多个输入文件,并将它们合并成一个视频文件。

命令格式:

ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -filter_complex \
"[0:v][0:a][1:v][1:a][2:v][2:a]concat=n=3:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4

参数说明:

  • -i video1.mp4 -i video2.mp4 -i video3.mp4:指定多个输入文件。
  • -filter_complex:启用复杂过滤器。
  • [0:v][0:a][1:v][1:a][2:v][2:a]:分别引用每个输入文件的视频流 (v) 和音频流 (a)。
  • concat=n=3:v=1:a=1:指定合并 3 个文件,每个文件包含 1 个视频流和 1 个音频流。
  • [v][a]:合并后的视频流和音频流。
  • -map "[v]" -map "[a]":将合并后的视频和音频流映射到输出文件。
  • output.mp4:输出的合并文件。

方法 2:使用 -i 多次指定输入文件

如果你不想使用过滤器,也可以通过多次使用 -i 参数指定输入文件,然后使用 -c copy 直接复制流。

命令格式:

ffmpeg -i video1.mp4 -i video2.mp4 -i video3.mp4 -c copy output.mp4


注意事项:
这种方法要求所有输入文件的编码格式、分辨率、帧率等完全一致,否则可能会导致合并失败或输出文件异常。
如果输入文件的编码格式不一致,建议使用方法 1 的 concat 过滤器。

总结

  • 如果需要更灵活的处理(如编码格式不一致),推荐使用 方法 1(concat 过滤器)。
  • 如果输入文件的编码格式完全一致,可以使用 方法 2(多次 -i 参数)。
  • 如果需要更简单的文件列表管理,仍然可以使用 input.txt 文件的方式。

使用 ffmpeg 分隔视频的介绍可参考如下文章:

Last modification:January 7, 2025
如果觉得我的文章对你有用,请随意赞赏