使用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
相关产品推荐
相关产品推荐

