如何在FFmpeg命令中实现方形图片圆角并叠加至视频
合并FFmpeg命令:为视频水印添加圆角效果
我有一个视频(videoPath)和一张方形图片(squarePath),现有FFmpeg命令可将方形图片放置在视频指定位置,输出为outputVideo:
final String[] cmd = new String[]{"-i", videoPath, "-i", squarePath, "-filter_complex", "[1:v][0:v]scale2ref=(300/300)*175:175[wm][base];[base][wm]overlay=(main_w-overlay_w)/2:(343)", "-pix_fmt", "yuv420p", "-c:a", "copy", "-y", outputVideo}; int res = FFmpeg.execute(cmd);希望在同一条命令中为方形图片添加圆角效果,已找到单独实现圆角的代码,但不知道如何合并:
ffmpeg -i avatar.png -i mask.png -filter_complex [0]scale=400:400[ava];[1]alphaextract[alfa];[ava][alfa]alphamerge output.png
完全可以合并,只需把圆角处理逻辑整合到原命令的滤镜链中,同时添加圆角遮罩图作为第三个输入。
合并后的命令代码
final String[] cmd = new String[]{ "-i", videoPath, "-i", squarePath, "-i", maskPath, // 新增圆角遮罩图作为第三个输入 "-filter_complex", "[1:v][0:v]scale2ref=(300/300)*175:175[wm_raw][base];[2:v]scale=175:175,alphaextract[alfa];[wm_raw][alfa]alphamerge[wm];[base][wm]overlay=(main_w-overlay_w)/2:(343)", "-pix_fmt", "yuv420p", "-c:a", "copy", "-y", outputVideo }; int res = FFmpeg.execute(cmd);
关键步骤说明
- 新增遮罩输入:把圆角遮罩图(maskPath)作为第三个输入源(索引为
2:v) - 缩放并提取遮罩alpha通道:先将遮罩图缩放到和水印图片一致的尺寸(175x175),再提取它的alpha通道作为圆角蒙版
- 合并水印与蒙版:将缩放后的原始水印图(
wm_raw)和alpha蒙版(alfa)合并,生成带圆角的水印(wm) - 保持原overlay逻辑:最后按原命令的位置参数,把带圆角的水印叠加到视频上
注意事项
- 遮罩图尺寸必须和最终水印尺寸一致(这里是175x175),否则
alphamerge会失败;如果遮罩尺寸不符,必须通过scale滤镜统一尺寸 - 遮罩图建议用黑色背景+白色圆角路径的PNG图,提取alpha后才能生成正确的圆角透明效果
内容的提问来源于stack exchange,提问作者Erez git
相关产品推荐
相关产品推荐

