如何修改FFmpeg xstack滤镜拼接视频时的默认背景颜色
解决方案
你可以通过以下两种方式修改空缺区域的颜色,两种方案均兼容FFmpeg 4.4版本:
方案1:使用xstack自带fill参数(最简便)
xstack滤镜原生支持fill参数用于指定无视频覆盖区域的背景色,直接在原有命令的xstack参数后追加该配置即可:
ffmpeg -i TEST.mkv -i TEST.mkv -i TEST.mkv -filter_complex " [0:v] scale=960x540 [a0]; [1:v] scale=960x540 [a1]; [2:v] scale=960x540 [a2]; [a0][a1][a2] xstack=inputs=3:layout=0_0|0_h0|w0_0:fill=black[out]" -map "[out]" -f matroska - | ffplay -
fill参数支持的颜色格式:
- 内置颜色名:比如
black(黑色)、white(白色)、red(红色)、gray(灰色) - 十六进制格式:比如
#000000(黑色)、#FF00FF(紫色),支持带透明度的RGBA格式如#0000007F(半透明黑色),注意在shell环境中使用#开头的色值时需要给参数加额外引号或转义#字符。
方案2:叠加纯色背景层(适合复杂自定义需求)
如果你后续需要给背景加图片、动效等自定义内容,可以先生成对应分辨率的纯色背景,再把拼接后的视频叠在背景上:
ffmpeg -i TEST.mkv -i TEST.mkv -i TEST.mkv -filter_complex " color=c=black:s=1920x1080[bg]; [0:v] scale=960x540 [a0]; [1:v] scale=960x540 [a1]; [2:v] scale=960x540 [a2]; [a0][a1][a2] xstack=inputs=3:layout=0_0|0_h0|w0_0[stacked]; [bg][stacked] overlay=shortest=1[out]" -map "[out]" -f matroska - | ffplay -
其中color滤镜的c参数对应背景色,s参数对应最终输出的视频分辨率,overlay的shortest=1参数用于保证背景时长和拼接视频的时长一致。
内容的提问来源于stack exchange,提问作者Abdelsalam ElTamawy
相关产品推荐
相关产品推荐

