使用保持相同 DPI 的 FFMPEG 将 TIFF 转换为 JPG

Anu*_*nuj 5 jpeg ffmpeg tiff images conversion

我们在我们的 Java 应用程序中使用 FFMPEG,我正在尝试将 tiff 文件转换为 jpg,但要求是保持与原始 tiff 文件中相同的 DPI。

我是 FFMPEG 的新手,并尝试了以下失败的尝试来实现这一目标:

  1. ffmpeg -y -i test.tif test.jpg: 成功转换为jpg,但DPI​​从300降低到96。(通过按右键单击图像-->属性-->详细信息选项卡-->水平和垂直分辨率属性来验证)
  2. ffmpeg -y -i test.tif -c:v copy test.jpg: 转换为 300 dpi 的 jpg,但实际文件格式仍然是 tif。似乎只有扩展名更改为jpg。
  3. ffmpeg -y -i test.tif -pix_fmt <format> test.gif (尝试了所有 3 种支持的格式:yuvj420p、yuvj422p yuvj444p):转换为 jpg 但 dpi 从 300 更改为 96。
  4. ffmpeg y -i test.tif -r 1 -q:v <range> test.jpg (尝试了各种范围:1 到 10):同样的问题。

  5. 尝试-q:v-qscale选项,但它只是改变图像的宽度和高度。

最后我听说了 ImageMagick 并且问题在第一次尝试时使用以下命令解决了:

  1. magick convert "test.tif" "test.jpg": 转换为 jpg,dpi 为 300。

是否可以使用 FFMPEG 实现相同的目标。如果是,请帮助我,因为我被困在这里很长时间了。

use*_*356 2

需要认识到的一件事是 DPI 与图像中的数据无关。它是基于硬件输出能力的构造。图像有很多单独的像素,文件中也有这些像素的数据。一英寸内有多少像素的测量仅与打印机上的输出或设备上的显示有关。图像数据本身没有固有的像素“大小”。某些图像文件格式支持可以包含“DPI”的元数据,但它对于图像本身来说基本上没有意义。

您所看到的 DPI 信息可以由您用来显示图像文件的程序任意指定。如果您的绘图程序显示图像为 300 DPI,则这可能与文件中的数据无关,文件中可能没有 DPI 标记。TIFF 文件可以包含 DPI 等元数据标签(这就是该格式是“标记图像文件格式”的原因),但这对图像数据并不重要。

这些概念对于人们来说似乎特别难以理解,但事实是图像元素(像素)没有尺寸——只有输出设备才有 DPI 测量值。我怀疑,您不更改 DPI 的要求是某人对保留数据的要求的想法。顺便说一句,由于 JPEG 是一种有损压缩方案,因此您应用的压缩量比某些任意 DPI 元数据重要得多。如果将这些图像压缩为 JPEG 格式,同时保留 DPI 标签,则可能会破坏这些图像。