画像変換ライブラリsharpで画像変換する記事をメモサイトに投稿した余談です。
AVIFのeffort(エンコード速度)というオプションが容量や変換速度に大きく影響するようなので少し検証してみました。
※比較画像が13枚とかなり少ないので、あくまでも参考程度に見ていただければと思います。
先に結論
基本的に変換速度を最優先にした「effort: 4(初期値)」で良さそう
画像によって最もファイル容量が小さくなるeffort値はバラバラ
全ての画像で必ず最小値になるようなeffort値は存在しなさそう
バラつきと言っても数KB程度の極少値なので、ほぼ差はないと言ってしまっても良いかも?
変換速度は数値が低い順に早かった
effort: 9はめちゃくちゃ遅い
effort: 6 が結構良いスコアを出したので、速度より容量が最優先の場合は比較・検討しても良いかも
effort(エンコード速度)について
CPUにどれだけ負荷をかけるか
qualityと並んで画質に関係する設定
0〜9の数値を渡せて数値が小さいほど変換速度が早くなる(その分圧縮率は悪くなると言われている)
参考 : https://sharp.pixelplumbing.com/api-output#avif
検証環境
MacBook Pro
プロセッサ 2.3GHz 8コア Intel Core i9
メモリ 16GB
effort: 4〜9 で検証
quality: 50 のままeffortの値のみ変更し数枚の画像で検証
※effort: 3以下はノイズや主に赤系の色ブレが起こる可能性あるそうなので検証外としました。
スマホで撮影した3枚の画像(サイズそのままでjpg圧縮あり・なし)で検証
画像1(4000x3000px)
画像2(3000x4000px)
画像3(3000x4000px)
検証結果
変換前ファイルの圧縮処理の有無
AVIF変換前にjpg圧縮した画像の方が容量が大きくなった
ひと手間かけない方は小さくなりやすいのかも
処理時間
4が圧倒的に早い
圧縮率
意外とeffort値6が良いスコアを出しやすいのかも
画質
変換前後や各パターンを目視で確認した限りでは違いは分からなかった
拡大して細かく見ると違いはあると思うけど、よほど重要な画像ではない限りWebサイトに掲載する分には気にしなくて良いレベルだと思う
数値の詳細
画像1
圧縮処理なしのjpg画像(2.9MB)をAVIFに変換(最小:effort: 6)
effort: 9 - 185.688KB, 変換時間: 37.275秒
effort: 8 - 185.281KB, 変換時間: 27.941秒
effort: 7 - 186.205KB, 変換時間: 22.218秒
effort: 6 - 185.253KB, 変換時間: 12.195秒
effort: 5 - 186.55KB, 変換時間: 6.961秒
effort: 4 - 185.917KB, 変換時間: 4.965秒
圧縮処理済みのjpg画像(548KB)をAVIFに変換(最小:effort: 4)
effort: 9 - 200.437KB, 変換時間: 32.001秒
effort: 8 - 198.674KB, 変換時間: 25.172秒
effort: 7 - 198.77KB, 変換時間: 18.725秒
effort: 6 - 197.813KB, 変換時間: 10.122秒
effort: 5 - 197.977KB, 変換時間: 6.606秒
effort: 4 - 196.752KB, 変換時間: 5.011秒
画像2
圧縮処理なしのjpg画像(3.1MB)をAVIFに変換(最小:effort: 6)
effort: 9 - 148.612KB, 変換時間: 31.425秒
effort: 8 - 147.828KB, 変換時間: 22.412秒
effort: 7 - 147.235KB, 変換時間: 18.826秒
effort: 6 - 146.481KB, 変換時間: 11.703秒
effort: 5 - 148.427KB, 変換時間: 8.424秒
effort: 4 - 147.452KB, 変換時間: 5.356秒
圧縮処理済みのjpg画像(456KB)をAVIFに変換(最小:effort: 6)
effort: 9 - 165.236KB, 変換時間: 26.144秒
effort: 8 - 158.077KB, 変換時間: 18.535秒
effort: 7 - 157.949KB, 変換時間: 15.954秒
effort: 6 - 157.531KB, 変換時間: 10.534秒
effort: 5 - 158.694KB, 変換時間: 7.569秒
effort: 4 - 157.848KB, 変換時間: 4.649秒
画像3
圧縮処理なしのjpg画像(3.5MB)をAVIFに変換(最小:effort: 6)
effort: 9 - 273.928KB, 変換時間: 32.778秒
effort: 8 - 271.246KB, 変換時間: 21.662秒
effort: 7 - 271.116KB, 変換時間: 19.134秒
effort: 6 - 269.919KB, 変換時間: 12.53秒
effort: 5 - 273.328KB, 変換時間: 8.116秒
effort: 4 - 272.883KB, 変換時間: 5.767秒
圧縮処理済みのjpg画像(632KB)をAVIFに変換(最小:effort: 4)
effort: 9 - 288.583KB, 変換時間: 32.055秒
effort: 8 - 288.165KB, 変換時間: 22.751秒
effort: 7 - 288.189KB, 変換時間: 20.501秒
effort: 6 - 288.564KB, 変換時間: 15.279秒
effort: 5 - 291.968KB, 変換時間: 11.222秒
effort: 4 - 287.145KB, 変換時間: 6.464秒
追加でミニ検証
上の写真3枚だとeffort値は4か6が良さそうに思えましたが、思っていたよりは結果がバラバラだったので無作為に10枚選んで追加検証することにしました。
結論
各設定値で殆ど差はないのでeffortの値は基本的に速度優先の4で良さそう
画像によってバラつきが結構出そうなので、とにかくほんの少しでも容量を少なくしたい場合には4、6、9で書き出して毎回比較するしかなさそう
概要
サイズ、画質など全てバラバラの10枚を適当にピックアップ(※実務で利用した画像のため掲載は割愛します)
effort: 9、6、4の3種類でファイルサイズを比較
結果
effort: 9 が最もファイルサイズが少ない:4/10
effort: 6 が最もファイルサイズが少ない:3/10
effort: 4 が最もファイルサイズが少ない:3/10
変換速度は全てeffort: 4 が圧倒的に早かった
AVIF変換の詳細
img01.jpg :(最小:effort: 9)
effort: 9 - 100.519KB, 変換時間: 18.513秒
effort: 6 - 100.86KB, 変換時間: 4.101秒
effort: 4 - 101.422KB, 変換時間: 1.99秒
img02.jpg(最小:effort: 6)
effort: 9 - 66.477KB, 変換時間: 75.835秒
effort: 6 - 66.159KB, 変換時間: 15.516秒
effort: 4 - 66.406KB, 変換時間: 13.389秒
img03.jpg(最小:effort: 9)
effort: 9 - 149.812KB, 変換時間: 25.97秒
effort: 6 - 149.956KB, 変換時間: 8.602秒
effort: 4 - 149.908KB, 変換時間: 3.867秒
img04.jpg(最小:effort: 9)
effort: 9 - 42.862KB, 変換時間: 8.01秒
effort: 6 - 42.97KB, 変換時間: 2.272秒
effort: 4 - 43.568KB, 変換時間: 1.137秒
img05.jpg(最小:effort: 4)
effort: 9 - 76.82KB, 変換時間: 24.817秒
effort: 6 - 76.161KB, 変換時間: 8.008秒
effort: 4 - 75.584KB, 変換時間: 3.859秒
img06.jpg(最小:effort: 9)
effort: 9 - 106.784KB, 変換時間: 29.711秒
effort: 6 - 107.662KB, 変換時間: 7.267秒
effort: 4 - 109.565KB, 変換時間: 3.521秒
img07.jpg(最小:effort: 6)
effort: 9 - 23.821KB, 変換時間: 58.166秒
effort: 6 - 22.872KB, 変換時間: 16.858秒
effort: 4 - 22.971KB, 変換時間: 12.132秒
img08.jpg(最小:effort: 4)
effort: 9 - 85.497KB, 変換時間: 40.143秒
effort: 6 - 84.105KB, 変換時間: 11.774秒
effort: 4 - 83.157KB, 変換時間: 5.424秒
img09.jpg(最小:effort: 4)
effort: 9 - 11.394KB, 変換時間: 35.107秒
effort: 6 - 11.282KB, 変換時間: 10.548秒
effort: 4 - 11.28KB, 変換時間: 4.879秒
img10.jpg(最小:effort: 6)
effort: 9 - 55.677KB, 変換時間: 138.747秒
effort: 6 - 55.664KB, 変換時間: 20.709秒
effort: 4 - 56.298KB, 変換時間: 12.726秒