You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何避免FFmpeg添加水印时增大图片尺寸

解决FFmpeg叠加边框后图片物理尺寸变大的问题

问题原因

你遇到的物理尺寸变大问题,大概率是因为FFmpeg处理时没有保留原图片的DPI(每英寸像素数)信息,或者movie滤镜读取边框图时采用了默认DPI(通常是96DPI),导致输出时用错误的DPI计算物理尺寸。即便输入图和边框图物理尺寸相同,它们的DPI可能不一致,或者FFmpeg输出时重置了DPI参数。

解决方案

方法1:改用双输入方式叠加,保留原DPI

放弃movie滤镜,直接将边框图作为第二个输入源,同时强制输出时继承原输入图的DPI参数:

  1. 先获取原输入图的DPI值(以input.png为例):

    # 获取水平DPI
    X_DPI=$(ffprobe -v error -select_streams v:0 -show_entries stream_tags=x_resolution -of default=noprint_wrappers=1:nokey=1 input.png)
    # 获取垂直DPI
    Y_DPI=$(ffprobe -v error -select_streams v:0 -show_entries stream_tags=y_resolution -of default=noprint_wrappers=1:nokey=1 input.png)
    
  2. 执行叠加命令,同时设置输出DPI与原输入一致:

    ffmpeg -i input.png -i border.png -filter_complex "[0][1]overlay=0:0" -metadata x_resolution=$X_DPI -metadata y_resolution=$Y_DPI output.png
    

方法2:强制输出像素尺寸与输入一致

如果不确定DPI问题,也可以直接指定输出的像素尺寸和输入图完全相同,确保物理尺寸匹配:

  1. 先获取输入图的像素宽高:

    IMG_SIZE=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.png)
    
  2. 执行叠加命令时强制输出尺寸:

    ffmpeg -i input.png -i border.png -filter_complex "[0][1]overlay=0:0" -s $IMG_SIZE output.png
    

方法3:修复movie滤镜的DPI问题(不推荐)

如果你坚持用movie滤镜,可以在滤镜中指定边框图的DPI,或者强制输出尺寸:

ffmpeg -i input.png -vf "movie=border.png:metadata=1 [watermark]; [in][watermark] overlay=0:0,scale=$(ffprobe -v error -select_streams v:0 -show_entries stream=width,height -of csv=s=x:p=0 input.png) [out]" output.png

这里通过scale滤镜强制输出和输入同像素尺寸,同时movie=border.png:metadata=1尝试读取边框图的元数据。

验证结果

处理完成后,可以用图片查看工具(如Photoshop、GIMP)检查输出图的物理尺寸,确认是否和输入的5.13x7.63英寸一致。

内容的提问来源于stack exchange,提问作者NXT_2006

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 20:30:41