我們在 java 應用程式中使用 FFMPEG,我試圖將 tiff 檔案轉換為 jpg,但要求是保持與原始 tiff 檔案中相同的 DPI。
我是 FFMPEG 的新手,並嘗試了以下失敗的嘗試來實現此目的:
ffmpeg -y -i test.tif test.jpg
:成功轉換為jpg,但DPI從300降低到96。ffmpeg -y -i test.tif -c:v copy test.jpg
:轉換為 300 dpi 的 jpg,但實際檔案格式仍是 tif。好像只是副檔名改為jpg。ffmpeg -y -i test.tif -pix_fmt <format> test.gif
(嘗試了所有3種支援的格式:yuvj420p,yuvj422p yuvj444p):轉換為jpg,但dpi從300更改為96。ffmpeg y -i test.tif -r 1 -q:v <range> test.jpg
(嘗試了各種範圍:1到10):同樣的問題。嘗試過
-q:v
和-qscale
選項,但它只是改變圖像的寬度和高度。
最後我聽說了 ImageMagick,並且透過使用以下命令在第一次嘗試中解決了問題:
magick convert "test.tif" "test.jpg"
:轉換為jpg,dpi為300。
使用 FFMPEG 是否可以達到相同的目的。如果是,請幫助我,因為我被困在這裡很久了。
答案1
需要認識到的一件事是 DPI 與影像中的資料無關。它是基於硬體輸出能力的建構。影像有很多單獨的像素,檔案中也有這些像素的資料。一英寸內有多少像素的測量僅與印表機上的輸出或裝置上的顯示有關。影像資料本身沒有固有的像素“大小”。某些影像檔案格式支援可以包含“DPI”的元數據,但它對影像本身來說基本上沒有意義。
您所看到的 DPI 資訊可以由您用來顯示影像檔案的程式任意指定。如果您的繪圖程式顯示影像為 300 DPI,則這可能與檔案中的資料無關,檔案中可能沒有 DPI 標記。 TIFF 檔案可以包含 DPI 等元資料標籤(這就是該格式是「標記影像檔案格式」的原因),但這對影像資料並不重要。
這些概念對於人們來說似乎特別難以理解,但事實是影像元素(像素)沒有尺寸——只有輸出裝置才有 DPI 測量值。我懷疑,您不更改 DPI 的要求是某人對保留資料的要求的想法。順便說一句,由於 JPEG 是一種有損壓縮方案,因此您所應用的壓縮量比某些任意 DPI 元資料重要得多。如果將這些影像壓縮為 JPEG 格式,同時保留 DPI 標籤,則可能會破壞這些影像。