使用 FFmpeg 合并多个视频有多种方法,具体取决于视频格式和合并需求。以下是几种常见的合并方式及对应的命令:

方法一:使用 concat 协议(最简单,适合相同编码的视频)

如果你的视频具有相同的编码格式(如都是 H.264 + AAC),可以直接使用 concat 协议:

ffmpeg -i "concat:video1.mp4|video2.mp4|video3.mp4" -c copy output.mp4

注意

  • 视频需使用相同编码、分辨率和帧率。
  • 不同平台的分隔符可能不同:

    • Windows 使用 concat:video1.mp4|video2.mp4
    • Linux/macOS 使用 concat:video1.mp4\video2.mp4

方法二:使用 concat 文件列表(推荐,兼容性更好)

步骤 1:创建文本文件 filelist.txt

file 'video1.mp4'
file 'video2.mp4'
file 'video3.mp4'

步骤 2:执行合并命令

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

优点

  • 支持不同编码的视频(会重新编码)。
  • 支持文件名包含特殊字符。

方法三:重新编码合并(适合不同编码的视频)

如果视频编码不同,可以通过重新编码统一格式:

ffmpeg -f concat -safe 0 -i filelist.txt -c:v libx264 -c:a aac output.mp4

参数说明

  • -c:v libx264:视频使用 H.264 编码。
  • -c:a aac:音频使用 AAC 编码。

方法四:垂直/水平拼接视频

如果需要将多个视频并排或上下排列,可以使用 hstackvstack 滤镜:

# 水平拼接(并排)
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex hstack output.mp4

# 垂直拼接(上下)
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex vstack output.mp4

注意:视频分辨率需一致,否则会自动裁剪。

常见问题及解决方法

  1. 合并后无声:添加 -map 0:a -map 1:a 指定音频流。
  2. 时间戳错误:添加 -fflags +genpts 强制生成时间戳。
  3. 编码不兼容:使用方法三重新编码所有视频。

根据你的具体需求选择合适的方法即可。如果视频格式复杂,建议使用方法二或方法三以确保兼容性。

标签: none

添加新评论