如何用FFmpeg将两个MP4视频以对角线分割方式并排合并?
用FFmpeg实现对角线分割的视频对比效果
完全可以实现,FFmpeg的滤镜系统能轻松搞定这种自定义分割的视频合成需求,核心思路是通过blend滤镜结合表达式生成对角线遮罩,让两个视频分别显示在对角线两侧。
基础命令(适用于同分辨率视频)
ffmpeg -i video1.mp4 -i video2.mp4 \ -filter_complex " [0:v]format=rgba,scale=iw:ih[v0]; [1:v]format=rgba,scale=iw:ih[v1]; [v0][v1]blend=all_expr='if(X>=Y*(W/H),A,B)' " -c:a copy output.mp4
命令拆解
format=rgba:将视频转换为带Alpha通道的格式,为后续像素级混合做准备scale=iw:ih:确保两个视频尺寸一致(如果原始视频分辨率不同,可替换为固定尺寸,比如scale=1920:1080)blend滤镜的表达式是核心:if(X>=Y*(W/H),A,B)- X代表当前像素的横坐标,Y代表纵坐标
Y*(W/H)是左下到右上对角线的像素坐标计算式,用来判断当前像素是否在对角线右侧- 满足条件时显示第一个输入视频(A),否则显示第二个视频(B)
适配不同分辨率的视频
如果两个视频尺寸不一样,先统一分辨率并保持原比例,可修改滤镜链:
ffmpeg -i video1.mp4 -i video2.mp4 \ -filter_complex " [0:v]format=rgba,scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v0]; [1:v]format=rgba,scale=1920:1080:force_original_aspect_ratio=decrease,pad=1920:1080:(ow-iw)/2:(oh-ih)/2[v1]; [v0][v1]blend=all_expr='if(X>=Y*(W/H),A,B)' " -c:a copy output.mp4
这里用scale按比例缩小视频,再用pad填充黑边到目标尺寸,保证两个视频显示区域一致。
内容的提问来源于stack exchange,提问作者nickponline
相关产品推荐
相关产品推荐

