画像を別フォーマットに変換してサイズを減らす

最近はJPEG XL(JXL)、もしくはWebpのような新しい優秀なフォーマットがある。
JPEGPNGファイルを変換すればサイズを減らせるかも…?と思って試してみた。
変換ツールにはffmpegを使用。

ffmpeg -i input.png -distance 0.0 output.jxl

JXLでは-distance 0.0でロスレス圧縮指定。pngならサイズを小さくできたけど、元ファイルがjpgだと、減らないどころか逆に大きくなってしまった(細かく試してないので不明)

ffmpeg -i input.png -lossless 1 output.webp

webpの場合は-lossless 1でロスレス圧縮を指定。結果のファイルサイズはJXLより若干大きくなったが、誤差範囲かも。

ffmpeg -i input.jpg output.jxl

JXLはパラメータを指定しない場合、デフォルトでは非可逆圧縮になる。元がjpgだと、これでもサイズは小さくならなかった…

ffmpeg -i input.jpg output.webp

Webpも、デフォルトでは非可逆圧縮をする。これは結構小さくなった。非可逆圧縮ではWebpが優秀かも?

結論

ちなみに、webpは16-bit画像に対応していないという問題があるらしいです。
WebP Lossless はちゃんと Lossless してます #WebP - Qiita
という訳で、

  • そこまで画質を気にしない場合は、webpで非可逆圧縮
  • 可逆圧縮で劣化を避けたい場合や、16ビット以上の場合はJXL

がいいかもしれません。
(もっとパラメーターをいじれば違う結果が出るかも)