如何用FFmpeg设置上下不同背景色的画面边距?
嘿,这个需求很常见,单一的pad滤镜确实没法设置不同边距的颜色,不过我们可以用FFmpeg的滤镜链组合来实现精准控制。我给你两种靠谱的方案,任选其一就行:
方案1:自定义背景层+视频叠加(更灵活)
这种方法先创建一个带有指定颜色边距的背景画布,再把视频居中叠加上去,逻辑清晰,后续调整颜色或区域也更方便。
完整命令:
ffmpeg -i input.mp4 -filter_complex " [0:v] setpts=PTS-STARTPTS [main]; # 创建和目标画布大小一致的黑色背景(画布为视频宽高最大值的正方形) color=c=black:size='max(main_w,main_h)xmax(main_w,main_h)' [bg]; # 在背景顶部绘制绿色边距区域,高度等于需要补充的顶部空白 [bg] drawbox=x=0:y=0:w=iw:h='(ih - main_h)/2':color=green:t=fill [bg_top]; # 在背景底部绘制蓝色边距区域,高度和顶部一致 [bg_top] drawbox=x=0:y='ih - (ih - main_h)/2':w=iw:h='(ih - main_h)/2':color=blue:t=fill [bg_final]; # 将原始视频居中叠加到背景上 [main][bg_final] overlay=x='(W-w)/2':y='(H-h)/2' [out] " -map "[out]" output.mp4
关键部分解释:
color滤镜:生成和你原命令一致的正方形画布(大小为视频宽高的最大值),底色黑色。drawbox滤镜:t=fill表示完全填充矩形,(ih - main_h)/2就是原pad命令中上下边距的高度,刚好对应需要染色的区域。overlay滤镜:保证视频和原命令一样居中放置,边距颜色则由背景层的色块控制。
方案2:两次pad滤镜分步添加(更简洁)
如果你习惯用pad的思路,也可以分两次添加边距,第一次加顶部绿色,第二次加底部蓝色:
ffmpeg -i input.mp4 -filter_complex " [0:v] pad='max(iw,ih)':ih + (max(iw,ih)-ih)/2:(max(iw,ih)-iw)/2:0:green [top_pad]; [top_pad] pad='max(iw,ih)':max(iw,ih):(max(iw,ih)-iw)/2:(max(iw,ih)-ih)/2:blue [out] " -map "[out]" output.mp4
逻辑说明:
第一次pad给视频添加顶部绿色边距,第二次pad在底部补充蓝色边距,左右边距始终保持黑色,完全匹配你原命令的居中逻辑。
两种方案都能实现需求,个人更推荐第一种,扩展性更强~
内容的提问来源于stack exchange,提问作者Rehan
相关产品推荐
相关产品推荐

