FFmpeg 是一个强大的多媒体处理工具,能够执行各种音频和视频的编码、解码、转码、流媒体以及滤镜应用等任务。在本教程中,我们将介绍如何使用 FFmpeg 来将两个视频文件并排合成(即一左一右),这对于制作对比视频、教学材料或任何需要同时展示两个画面的应用非常有用。
确保您的计算机上已经安装了最新版本的 FFmpeg。如果您还没有安装,请访问 FFmpeg官方网站 下载适合您操作系统的安装包,并按照说明进行安装。
确保您想要合成的两个视频文件格式兼容且具有相同的分辨率和帧率。如果它们不一致,可能需要先对其中一个或两个视频进行预处理以匹配这些属性。
要将两个视频并排合成,可以使用 FFmpeg 的 hstack 滤镜,该滤镜可以水平堆叠多个输入视频。以下是具体命令示例:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex "[0:v][1:v]hstack=inputs=2" output.mp4
在这个命令中:
-i video1.mp4 和 -i video2.mp4 分别指定了第一个和第二个输入视频文件。
-filter_complex "[0:v][1:v]hstack=inputs=2" 定义了一个复杂的过滤器链,其中 [0:v] 表示第一个输入的视频流,[1:v] 表示第二个输入的视频流,而 hstack=inputs=2 则指示 FFmpeg 水平排列这两个视频流。
output.mp4 是输出文件名,您可以根据需要更改。
如果两个视频有不同的分辨率或帧率,直接使用上述命令可能会导致问题。在这种情况下,我们需要先调整视频的属性使其一致。以下是一个例子,它首先缩放视频到相同的分辨率,并设置相同的帧率为 30 fps:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex \
"[0:v]scale=640:480,fps=fps=30[left]; \
[1:v]scale=640:480,fps=fps=30[right]; \
[left][right]hstack=inputs=2" \
output.mp4
在此命令中:
scale=640:480 设置每个视频的分辨率为 640x480 像素。
fps=fps=30 确保每个视频的帧率为 30 fps。
其余部分与之前的命令相同,用于将两个视频水平堆叠。
默认情况下,上面的命令会复制第一个输入视频中的音频。如果您希望包含两个视频的音频或者只选择特定的一个作为最终输出的一部分,可以通过添加额外的选项来实现。例如,仅保留第一个视频的音频:
ffmpeg -i video1.mp4 -i video2.mp4 -filter_complex \
"[0:v][1:v]hstack=inputs=2" \
-map 0:a? -c:a copy \
output.mp4
这里使用了 -map 0:a? 参数来指定从第一个输入视频中提取音频(如果有),并且通过 -c:a copy 直接复制而不重新编码音频流。
通过以上步骤,您应该能够成功地使用 FFmpeg 将两个视频文件并排合成。FFmpeg 提供了极其灵活的功能集,允许用户根据自己的需求定制命令行参数。对于更复杂的需求,如添加边框、水印或其他特效,也可以利用 FFmpeg 的丰富滤镜库进一步扩展功能。