FFMPEG并排合并

Ala*_*lan 3 shell ffmpeg

我正在尝试创建一个shell/ffmpeg脚本,它可以在使用并排/平铺方式的不同过滤器处理后显示多个文件.所需输出的示例如下:https://www.youtube.com/watch?v = DoPuhMRYem4.

为了创建所需的输出,我需要裁掉video1的右半部分和video2的左半部分,然后将它们与[video1 + video2]并排连接.我玩了很多种不同的加入方式,这样做没问题:

ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "
nullsrc=size=800x400 [background];
[0:v] setpts=PTS-STARTPTS, scale=400x400 [left];
[1:v] setpts=PTS-STARTPTS, scale=400x400 [right];
[background][left]       overlay=shortest=1       [background+left];
[background+left][right] overlay=shortest=1:x=400 [left+right]
" -map '[left+right]' joined.mp4
Run Code Online (Sandbox Code Playgroud)

如何修改它以检测视频宽度(它们的宽度并不总是相同),将宽度分成两半并关闭左侧或右侧?

llo*_*gan 10

分屏

左和右

在此输入图像描述

 ffmpeg -i input0 -i input1 -filter_complex \
"[0:v]crop=iw/2:ih:0:0[left]; \
 [1:v]crop=iw/2:ih:ow:0[right]; \
 [left][right]hstack" output
Run Code Online (Sandbox Code Playgroud)

顶部和底部

在此输入图像描述

 ffmpeg -i input0 -i input1 -filter_complex \
"[0:v]crop=iw:ih/2:0:0[top]; \
 [1:v]crop=iw:ih/2:0:oh[bottom]; \
 [top][bottom]vstack" output
Run Code Online (Sandbox Code Playgroud)

对角线

在此输入图像描述

ffmpeg -i input0 -i input1 -filter_complex \
"[1:v][0:v]blend=all_expr=if(gt(X\,Y*(W/H))\,A\,B)" output
Run Code Online (Sandbox Code Playgroud)

另见