如何合并两个视频实现各占输出视频50%的上下分屏布局?
实现上下分屏视频合并(基于FFmpeg)
核心场景:两个视频分辨率一致
如果你的两个视频宽度、高度完全相同,直接用vstack滤镜垂直堆叠即可,执行以下命令:
ffmpeg -i top_video.mp4 -i bottom_video.mp4 -filter_complex "[0:v][1:v]vstack=inputs=2[v]" -map "[v]" -map 0:a? -map 1:a? -c:v libx264 -crf 23 output.mp4
参数说明:
[0:v][1:v]vstack=inputs=2[v]:将第一个输入视频的视频流(0:v)和第二个输入视频的视频流(1:v)垂直堆叠,输出标记为[v]-map "[v]":指定输出视频采用堆叠后的流-map 0:a? -map 1:a?:可选,自动保留两个视频的音频流(?表示仅当音频存在时才映射)-c:v libx264 -crf 23:使用H.264编码,CRF23是兼顾画质和体积的默认参数
适配场景:两个视频分辨率不同
如果两个视频尺寸不一样,需要先统一每个视频的尺寸为输出分屏的单块大小(比如输出总分辨率1920x1080,单块就是1920x540),再堆叠:
ffmpeg -i top_video.mp4 -i bottom_video.mp4 -filter_complex "[0:v]scale=1920:540:force_original_aspect_ratio=decrease,pad=1920:540:(ow-iw)/2:(oh-ih)/2[v0];[1:v]scale=1920:540:force_original_aspect_ratio=decrease,pad=1920:540:(ow-iw)/2:(oh-ih)/2[v1];[v0][v1]vstack=inputs=2[v]" -map "[v]" -map 0:a? -map 1:a? -c:v libx264 -crf 23 output.mp4
参数说明:
scale=1920:540:force_original_aspect_ratio=decrease:按比例缩小视频,确保不超过1920x540的尺寸pad=1920:540:(ow-iw)/2:(oh-ih)/2:给缩放后的视频补黑边,使其刚好填满1920x540的区域,画面居中- 后续的
vstack操作和核心场景一致
额外提示
- 如果其中一个视频时长更长,FFmpeg默认会以较短视频的时长截断输出。想要保留长视频的完整时长,可添加
-shortest 0参数 - 若只需要保留其中一个视频的音频,比如仅保留上半部分视频的音频,把
-map 0:a? -map 1:a?替换为-map 0:a即可
内容的提问来源于stack exchange,提问作者Gadzhimurad Radzhabov
相关产品推荐
相关产品推荐

