FFmpeg-用于马赛克视频输出的Xstack多输入-额外输出黑屏始终为绿色

问题描述

我有一个网站,我们将多个视频与ffmpeg xstack结合在一起。它是一个自动化的过程。如果视频数量不偶数,则马赛克中的空白图块为绿色。我试图弄清楚如何使备用毛坯变黑。

我尝试过xstack=inputs=2:fill='black':layout=0_0(这导致找不到错误对象)也尝试过-filter_complex "color=s=1920x1080:c=black"

有什么建议吗?这是完整的命令:

ffmpeg -i video1 -i video1 -i video1 -i video1 -i video1 -i video1 -i video1 \ 
    -i video1 -i video1 -filter_complex \
    "color=s=1920x1080:c=black;[0:v] setpts=PTS-STARTPTS,scale=qvga [a0];[1:v] setpts=PTS-STARTPTS,scale=qvga [a1];[2:v] setpts=PTS-STARTPTS,scale=qvga [a2];[3:v] setpts=PTS-STARTPTS,scale=qvga [a3];[4:v] setpts=PTS-STARTPTS,scale=qvga [a4];[5:v] setpts=PTS-STARTPTS,scale=qvga [a5];[6:v] setpts=PTS-STARTPTS,scale=qvga [a6];[7:v] setpts=PTS-STARTPTS,scale=qvga [a7];[8:v] setpts=PTS-STARTPTS,scale=qvga [a8];[a0][a1][a2][a3][a4][a5][a6][a7][a8]xstack=inputs=9:layout=0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1|w0_h0+h1|w0+w1_h0+h1[out] " \
    -map "[out]" output

解决方法

不需要彩色滤光片,因为仅xstack就足够了。具有8个输入的3x3示例;右下角填充黑色:

ffmpeg -i input -i input -i input -i input -i input -i input -i input -i input -filter_complex "[0:v] setpts=PTS-STARTPTS,scale=qvga [a0];[1:v] setpts=PTS-STARTPTS,scale=qvga [a1];[2:v] setpts=PTS-STARTPTS,scale=qvga [a2];[3:v] setpts=PTS-STARTPTS,scale=qvga [a3];[4:v] setpts=PTS-STARTPTS,scale=qvga [a4];[5:v] setpts=PTS-STARTPTS,scale=qvga [a5];[6:v] setpts=PTS-STARTPTS,scale=qvga [a6];[7:v] setpts=PTS-STARTPTS,scale=qvga [a7];[a0][a1][a2][a3][a4][a5][a6][a7]xstack=inputs=8:layout=0_0|w0_0|w0+w1_0|0_h0|w0_h0|w0+w1_h0|0_h0+h1|w0_h0+h1:fill=black[out] " -map "[out]" output.mp4

确保您使用的是4.3+版本或当前git master分支中的版本。

,

您还可以使用overlay过滤器。并将视频覆盖在黑色背景上。

[background][a0]overlay=x={x}:y={y}[overlay0];
[overlay0][a1]overlay=x={x}:y={y}[overlay1];
...
,

升级到ffmpeg 4.3或最新的git build并向xstack添加fill=black选项。