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

使用FFmpeg将TIFF转JPG并保留原DPI的技术求助

解决FFmpeg转换TIFF到JPG时保留原DPI的问题

嘿,我完全懂你遇到的困扰——默认用FFmpeg转TIFF到JPG时,确实会把DPI从300降到96,这是因为FFmpeg不会自动把原TIFF的DPI元数据继承到JPG里,得手动指定才行。先给你拆解下之前的问题:

  • 你用的ffmpeg -y -i test.tif test.jpg命令只是完成了格式转换,但FFmpeg默认输出JPG的DPI就是96,不会读取原TIFF的DPI信息,所以才会出现分辨率下降的情况。
  • 那个没写完的-c:v copy命令肯定行不通,因为TIFF和JPG的编码格式完全不一样,-c:v copy是直接复制视频流,只有当输入输出的编码格式一致时才能用(比如同是H.264编码的MP4转MKV),这里用的话只会报错。

下面给你两种解决方案,从手动指定到自动化批量处理都有:

方案一:手动指定DPI转码

如果你已经知道原TIFF的DPI是300,直接在转码命令里加上-metadata参数设置DPI即可:

ffmpeg -y -i test.tif -metadata xres=300 -metadata yres=300 test.jpg

转完之后你再去右键图片→属性→详细信息里看,水平/垂直分辨率就会是300DPI了。

方案二:自动读取原TIFF的DPI并转码

如果有大量文件需要处理,或者不想手动输入DPI值,可以用FFmpeg自带的ffprobe工具先读取原TIFF的DPI,再自动传入转码命令:

# 先获取原TIFF的X、Y方向DPI值
XRES=$(ffprobe -v error -show_entries format_tags=xres -of default=noprint_wrappers=1:nokey=1 test.tif)
YRES=$(ffprobe -v error -show_entries format_tags=yres -of default=noprint_wrappers=1:nokey=1 test.tif)

# 执行转码并写入DPI元数据
ffmpeg -y -i test.tif -metadata xres=$XRES -metadata yres=$YRES test.jpg

小提示:

如果上面的命令没读到DPI值,可能是原TIFF的DPI元数据存在于流标签而非格式标签里,这时候把命令里的format_tags换成stream_tags就行:

XRES=$(ffprobe -v error -show_entries stream_tags=xres -of default=noprint_wrappers=1:nokey=1 test.tif)
YRES=$(ffprobe -v error -show_entries stream_tags=yres -of default=noprint_wrappers=1:nokey=1 test.tif)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:21:28