ffmpeg 合并多个视频 拼接视频
使用 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
- Windows 使用
方法二:使用 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 编码。
方法四:垂直/水平拼接视频
如果需要将多个视频并排或上下排列,可以使用 hstack 或 vstack 滤镜:
# 水平拼接(并排)
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex hstack output.mp4
# 垂直拼接(上下)
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex vstack output.mp4注意:视频分辨率需一致,否则会自动裁剪。
常见问题及解决方法
- 合并后无声:添加
-map 0:a -map 1:a指定音频流。 - 时间戳错误:添加
-fflags +genpts强制生成时间戳。 - 编码不兼容:使用方法三重新编码所有视频。
根据你的具体需求选择合适的方法即可。如果视频格式复杂,建议使用方法二或方法三以确保兼容性。
版权属于:Joyber
本文链接:https://blog.qqvbc.com/default/1331.html
转载时须注明出处及本声明