37003枚の画像で徹底比較 画像超圧縮 mozjpeg vs guetzli vs webp

The following two tabs change content below.
夜桜 なのです。 バーチャル女の子をしてるなの。 陸上自衛隊卒のレトルトカレー評論家 高校生の時にフルアセンブラでウィルスを作って、他人に渡したものの、児童相談所に通報されなかったという経歴があるの。 返せなくなった211億円のバーチャル借金があるの。ぐすぐす;; 取締役ブログ事業部部長、音楽事業部部長、IT業務部部長 etc...

某匿名掲示板で、まだRyzen 第2世代が遅すぎて愚痴を言いまくって
お買い得な価格のL3キャッシュ3倍 Zen3D 8コア TDP65Wを求めようとしているなのたんです。

8コア16スレッドを仮想マシン上の16コアのCPU上で同時に超圧縮の再ビルドをたまにおこなっており、
37003枚の画像を圧縮するとcc のコンパイルオプションを(OSカーネルやライブラリ全部すべてを含み) -O3 にしても 1日近くかかってしまいます。

以前mozjpeg と guetzli を簡易徹底比較したつもりですが、
せっかくですのでWebpに対応したのと、mozjpegがアップデートしたことで

mozjpeg vs guetzli vs webp を比較してみました。

Windowsバイナリのダウンロード先

圧縮するコマンドライン

  • /opt/mozjpeg/bin/cjpeg -quality 84 -optimize
  • /usr/local/bin/guetzli –quality 84
  • /usr/local/bin/cwebp -quiet -q 80
    もしくは /usr/local/bin/cwebp -quiet -q 75

利用しているサイト

https://coldcurry.org/

冷えたカレーというよりも常温で食べる非常食のレトルトカレー
無理においしく見せようとせず、本当に非常食にした時のための
比較サイトです。

非常食を想定していますので、いざとなった時のためにインターネット回線がふくそうした時の為に、異常な程の圧縮施策を取っています。

掲載されている画像の実際の変換

1枚のおおむね4K画像の画像から Image::Magick を使用して、多少の画像自動加工をしてから

  • 横1600pxのJPEG(クォリティー84)
  • 横800pxのJPEG(クォリティー84)
  • 横600pxのJPEG(クォリティー84)
  • 縦✕横80pxのJPEG(クォリティー84またはクォリティー75)

を生成しています。

このデータをソース画像として、
Makefileを利用した並列処理にて

  • mozjpeg とguetzli の療法で圧縮して小さいサイズを採用
  • 同時にwebp で圧縮

を行ったもののデータです。

使用バージョン

  • mozjpeg (cjpeg) v4.0.3
  • guetzli v1.0.1
  • webp (cwebp) v1.2.1

使用OSとコンパイルオプション

  • FreeBSD 13.0-RELEASE p4 x86_64 kernel on Microsoft Windows 10 Hyper-V
    CPUTYPE?=
    CFLAGS+=-O2 -pipe
    CXXFLAGS+=
    COPTFLAGS+= -O3 -fno-strict-aliasing -pipe
  • FreeBSD 13.0-RELEASE p4 x86_64 world on Microsoft Windows 10 Hyper-V
    CPUTYPE?=znver2
    CFLAGS+=-O3 -fno-strict-aliasing -pipe
    CXXFLAGS+=-O3 -fno-strict-aliasing -pipe -march=znver2
    COPTFLAGS+= -O3 -fno-strict-aliasing -pipe -march=znver2
  • FreeBSD ports
    CFLAGS+= -O3 -fno-strict-aliasing -pipe -march=znver2 -fPIC
    CXXFLAGS+=-O3 -fno-strict-aliasing -pipe -march=znver2 -fPIC
    COPTFLAGS+= -O3 -fno-strict-aliasing -pipe -march=znver2 -fPIC

パット見の傾向

  • mozjpegが v3 から v4になって、多少圧縮率が上がっています。
  • guetzli は v1.01から一切メンテナンスされていないので、未だに200倍の時間をかけてます。
  • mozjpegがv4になってからguetzliよりサイズが減少したファイルが増えています。
  •  一般的にwebpのが超圧縮JPEGの平均1/2のサイズになるものの、場合によっては超圧縮(guetzliに限る)よりwebpのがサイズが大きくなる

という傾向にあります。

37003枚を超圧縮した総データサイズ

guetzli が失敗するケースが多くあるため、残念ながら 37078枚すべてを、どれがどれに・・というのは、うまい具合に表現することはできません。

しかし、総計を取ってみると

  • オリジナル 1ファイル平均 351273 bytes
  • mozjpeg 1ファイル平均 131087bytes
  • guetzli 1ファイル平均 114851bytes
  • 採用JPEG 1ファイル平均 121969bytes (圧縮率34.72%)
  • webp 1ファイル平均 78685bytes(圧縮率22.40%)

となります。

生データを見てみる

https://docs.google.com/spreadsheets/d/1SFXM2GhwIs0dTnLwkkkdxOS3gKbO6T6OlbFYxgDh53U/edit?usp=sharing

非常に大きなスプレッドシートとなります。ブラウザークラッシュにはご注意ください。

※guetzli のサイズが 0 の場合、圧縮に失敗しています。

スポンサーリンク