如何使用FFMPEG添加随视频等比例自适应缩放的水印
FFmpeg水印按分辨率等比例缩放、统一显示占比方案
现有命令的问题
-s 1280x720参数位置不当,作为全局参数未绑定滤镜处理链路,部分源视频处理时不会按预期输出1280x720分辨率,间接导致水印显示尺寸异常- 未对水印图层做动态适配缩放,直接使用水印原图尺寸叠加,不同分辨率的输出视频上,水印的显示占比自然无法统一
实现方案
核心逻辑是先统一主视频输出分辨率,再按主视频尺寸的固定比例缩放水印,最后叠加,可保证所有输出视频的水印显示占比完全一致。
参考命令
ffmpeg -i input_video.avi -i watermark.png -filter_complex \ "[0:v]scale=1280:720[main];\ [1:v]scale=w=main_w*0.1:h=-1[wm];\ [main][wm]overlay=x=(main_w-overlay_w)-10:y=(main_h-overlay_h)-10" \ -c:v libx264 -crf 23 -c:a aac output_video.mp4
参数说明
[0:v]scale=1280:720[main]:将源视频流统一缩放至1280x720分辨率,输出标记为main的视频流,替代全局-s参数,分辨率控制更稳定[1:v]scale=w=main_w*0.1:h=-1[wm]:将水印宽度缩放为主视频宽度的10%,高度设为-1表示自动按水印原始宽高比计算,避免水印拉伸变形,处理后的水印流标记为wm。其中0.1为水印占比系数,可根据需求调整:数值越大水印占比越高,比如设为0.15即水印宽度占主视频15%,设为0.08即占8%overlay=x=(main_w-overlay_w)-10:y=(main_h-overlay_h)-10:将水印叠加在视频右下角,各留10像素边距避免贴边;如果不需要边距,改回原逻辑overlay=x=(main_w-overlay_w):y=(main_h-overlay_h)即可-c:v libx264 -crf 23 -c:a aac:指定MP4通用的H.264视频编码+AAC音频编码,CRF值23为默认平衡画质参数,输出格式兼容性更好
补充说明
- 如果不需要固定输出分辨率,想保留源视频原始分辨率、仅统一水印占比,只需把第一条滤镜的
scale=1280:720改为scale=w=iw:h=ih(即保持主视频原始尺寸),后续水印缩放逻辑依然生效,任意分辨率的源视频处理后,水印占比都会保持一致 - 带透明通道的PNG水印可直接使用本命令,透明效果会正常保留
内容的提问来源于stack exchange,提问作者Eduardo
相关产品推荐
相关产品推荐

