如何通过FFmpeg命令行实现视频缩放与多素材合成?
用FFmpeg实现多素材合成的解决方案
当然没问题!FFmpeg就是干这个的好手——多层媒体合成、缩放、叠加一条龙都能搞定。我给你写好具体命令,再拆解每个部分的作用,你照着来就能得到想要的600x400输出视频。
完整FFmpeg命令
ffmpeg -i red_background.jpg -i overlay.png -i input_video.mp4 -filter_complex \ "[2:v]scale=422:282[v_scaled]; \ [0:v]scale=600:400[bg]; \ [bg][1:v]overlay=x=(W-w)/2:y=(H-h)/2[bg_with_png]; \ [bg_with_png][v_scaled]overlay=x=(W-w)/2:y=(H-h)/2[final]" \ -map "[final]" -c:v libx264 -crf 23 -preset medium output_final.mp4
命令拆解(帮你理解每一步)
- 输入素材:
-i red_background.jpg -i overlay.png -i input_video.mp4按顺序指定三个素材:红色背景图、PNG图、原MP4视频 - 缩放视频:
[2:v]scale=422:282[v_scaled]把第三个输入(原视频)缩放成你要的422x282尺寸,给这个处理后的视频流起名叫v_scaled - 统一背景尺寸:
[0:v]scale=600:400[bg]强制把红色背景图调整为600x400(如果你的背景图本身就是这个尺寸,可以删掉这一行,直接用[0:v]作为背景层) - 叠加PNG到背景:
[bg][1:v]overlay=x=(W-w)/2:y=(H-h)/2[bg_with_png]将PNG图居中叠加在背景层上(W是背景宽度,w是PNG宽度,这个公式自动计算居中位置),得到带PNG的背景组合层 - 叠加缩放后的视频:
[bg_with_png][v_scaled]overlay=x=(W-w)/2:y=(H-h)/2[final]再把缩放后的视频居中叠加到组合层上,得到最终的画面流final - 输出设置:
-map "[final]"指定用最终合成的画面流输出;-c:v libx264 -crf 23 -preset medium用H.264编码输出MP4,crf23是平衡质量和体积的默认值,preset medium兼顾编码速度和压缩率
额外小贴士
- 如果需要保留原视频的音频,在命令里加上
-map 2:a即可(把原视频的音频流映射到输出) - 要是想调整PNG或视频的位置,直接修改
overlay的x和y值就行,比如x=50:y=50就是距离左上角各50像素 - 如果你的PNG图本身就是600x400,那居中叠加后会完全覆盖背景,你可以根据实际需求调整位置或透明度(比如加
alpha=0.5让PNG半透明)
内容的提问来源于stack exchange,提问作者Sudesh




