Google製JPEGエンコーダー「Guetzli」

  • 3
    いいね
  • 0
    コメント

Guetzli

https://github.com/google/guetzli

Guetzli [guɛtsli] とはスイスドイツ語でクッキーの意味。1

Google が2016年10月22日に GitHub で Initial Release を公開した JPEG エンコーダー。2017年1月13日に GIGAZINE で紹介される。
2017年3月15日に 1.0 がリリースされ、Google Research Blog でアナウンスされたため、同17日頃より国内メディアで紹介され始めた。

Mozilla の JPEG エンコーダー mozjpeg と画像処理を比較した結果、200倍の処理時間がかかった上に圧縮率が拮抗してて(しかも負けてる)、品質も大差ない(しかも quality 90 以下では負けてる)ので、正直使えないかもしれない。ナニコレ。

guetzli.gif

インストール

curl -L https://github.com/google/guetzli/releases/download/v1.0/guetzli_linux_x86-64 -o guetzli
chmod a+x guetzli && mv $_ /usr/local/bin

CentOS 7.3.1611 (minimal) で動作確認。
コンパイル手順では libpng (extras) と gflags (epel) のインストールが記載されているが、バイナリ版には含まれているのかインストールしなくても動作した。(インストールしてもエンコードサイズは変わらなかった)

使い方

基本

guetzli bees.png bees_compressed.jpg

品質指定

guetzli -quality 90 bees.png bees_90.jpg

詳細表示

guetzli -verbose bees.png bees_compressed.jpg
Original Out[ 148444] BA[100.00%] D[0.4312] Score[148444.0000] (*)
Iter  1: f111111 quantization matrix:
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
  1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1     1  1  1  1  1  1  1  1
Iter  1: f111111 GQ[ 0.00] Out[ 148314] BA[100.00%] D[0.4312] Score[148314.0000] (*)
(snip)
Iter  9: f111111 quantization matrix:
  3  3  3  3  3  3  5  5     3  3  3  3  3  3  5  5     3  3  3  3  3  3  5  5
  3  3  3  3  3  5  5  5     3  3  3  3  3  5  5  5     3  3  3  3  3  5  5  5
  3  3  3  3  5  5  5  5     3  3  3  3  5  5  5  5     3  3  3  3  5  5  5  5
  3  3  5  5  5  5  5  5     3  3  5  5  5  5  5  5     3  3  5  5  5  5  5  5
  3  5  5  5  5  5  5  5     3  5  5  5  5  5  5  5     3  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
Iter  9: f111111 GQ[29.82] Out[  58432] BA[100.00%] D[0.9286] Score[58432.0000]

YUV444 selected quantization matrix:
  3  3  3  3  3  3  5  5     3  3  3  3  3  3  5  5     3  3  3  3  3  3  5  5
  3  3  3  3  3  5  5  5     3  3  3  3  3  5  5  5     3  3  3  3  3  5  5  5
  3  3  3  3  5  5  5  5     3  3  3  3  5  5  5  5     3  3  3  3  5  5  5  5
  3  3  5  5  5  5  5  5     3  3  5  5  5  5  5  5     3  3  5  5  5  5  5  5
  3  5  5  5  5  5  5  5     3  5  5  5  5  5  5  5     3  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
  5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5     5  5  5  5  5  5  5  5
Iter 10: f111111(7) up Coeffs[24885/45016] Blocks[1287/1797/1848] ValThres[0.7288] Out[  46401] EstErr[0.10%] BA[100.00%] D[1.0452] Score[1820309.3844]
Iter 11: f111111(7) up Coeffs[3563/19983] Blocks[861/1781/1848] ValThres[0.0294] Out[  44501] EstErr[0.07%] BA[100.00%] D[1.0487] Score[2088126.7296]
Iter 12: f111111(7) up Coeffs[3543/16420] Blocks[944/1771/1848] ValThres[0.0332] Out[  42585] EstErr[0.08%] BA[100.00%] D[1.0651] Score[4521058.0405]
(snip)
Iter 33: f111111(7) down Coeffs[49/3569] Blocks[27/136/1848] ValThres[0.0173] Out[  37860] EstErr[0.08%] BA[100.00%] D[0.9947] Score[119150.1578]
Iter 34: f111111(7) down Coeffs[47/1717] Blocks[23/73/1848] ValThres[0.0259] Out[  37897] EstErr[0.10%] BA[100.00%] D[0.9796] Score[56045.0362]
Iter 35: f111111(7) down Coeffs[44/285] Blocks[10/21/1848] ValThres[0.0265] Out[  37910] EstErr[0.06%] BA[100.00%] D[0.9717] Score[37910.0000] (*)

バグ?

guetzli -version

とやっても guetzli としか出力されない。

スピードとサイズ

quality 時間 サイズ 圧縮率
84 9.474s 19881 11.2%
90 10.960s 25783 14.5%
95 13.667s 37910 21.4%
100 23.489s 148444 83.7%
未指定 13.530s 37910 21.4%

公式のサンプル画像を元にした数値。オリジナル画像のサイズは 177424 バイト。
-quality は 84 からしか指定できない。
変換サイズから推測して未指定の場合は -quality 95 になるようだ。

その他の JPEG エンコーダー

  • Lepton
  • mozjpeg
  • libjpeg-turbo
  • jpegoptim

mozjpeg との比較

画像

画像処理界隈で有名な Lena の画像 2 で比較。
Lena (remastered)

時間

quality Guetzli mozjpeg
(cjpeg)
84 19.498s 0.073s
90 22.506s 0.079s
95 29.476s 0.111s
100 44.614s 0.214s

Guetzli 時間かかりすぎワロタ。

ファイルサイズ

quality Guetzli mozjpeg
(cjpeg)
84 50071
17.7%
49451
17.5%
90 60965
21.6%
60599
21.5%
95 91629
32.5%
80572
28.6%
100 223908
79.3%
173504
61.5%

Guetzli 軒並み負けてて草。

品質

quality Guetzli mozjpeg
(cjpeg)
84 248724 246865
90 244907 242166
95 234535 235457
100 120435 179307

ImageMagick の compare で AE で比較。異なるピクセル数。少ない方が品質が高い。
quality 90 以下で200倍時間かけてる Guetzli が負けてて草も生えない。