画像の圧縮にAVIFかJPEG XLを使う
Summary
Related to #6626, #9275
Mastodon v4からAVIFに対応したらしいので
https://caniuse.com/avif

Mastodon v4はあまり普及してないので後回しかな
Mastodon v4はあまり普及してないので
これに関してなにかデータとかありますか?ただ気になるだけですが
まず大きなインスタンス(fedibird, mstdn.jp)あたりが対応しないことには…
よしんばMastodon v4が普及したとしてもImageMagick 7が必要なので対応するインスタンスは限られそう(v6が広く使われているようなので)
ImageMagick supports AVIF. As ofversion 7.0.25, it supports AVIF compression natively. https://avif.io/blog/tutorials/imagemagick/#imagemagicksupportsavif
FedibirdはまだMastodon 3.4.1使っているし、時間かかりそうですね
MEMO: Webpもv4からっぽい https://github.com/mastodon/mastodon/commit/379a7a7ca7cf913cbc130a6323f821b534fc14c4
Mastodonや他のソフトウェアが問題なので、高互換と圧縮優先の2種類を用意して使い分けるというのはどうだろう
(ただ2種類をストレージに保存するのは微妙、片方をプロキシにする?)
AVIFを検討するならJPEG XLも検討して良さそうだけど、ブラウザの対応が全滅している

https://caniuse.com/jpegxl
Sharp.jsの対応も面倒 https://github.com/lovell/sharp/issues/2731#issuecomment-1349856411
片方をプロキシにする?
圧縮優先低互換の方をストレージに保存するのがサーバーのCPU的にもストレージ的にも無難そう
avifは重たすぎるし、jpeg xlはブラウザ対応の見込みがわからないためnot planned
AVIF 重いのは昔の話では
avifは重たすぎるし
WebPに比べてどのくらい重たいのか数字をみたいですね
なんなら WebP (VP8) エンコーダー (libwebp) の方が wasm に持ち込むのが高コストという事象などがある
WebPに比べてどのくらい重たいのか数字をみたい
sharp.jsで試してみるか
なんなら WebP (VP9) エンコーダーの方が wasm に持ち込むのが高コストという事象
ならサーバーで圧縮するのはwebp, クライアントではavifにするとかの対応もありうる
WebPってVP9サポートします?
WebPってVP9サポートします?
すみません VP8 です
effort 0, smartSubsample false

effort: 0だと、avifは写真は得意だがイラストがかなりノイズが多くなる
effort: 1もかなりノイズありますね。rav1e使うとどうなるかなと調べてみましたがsharpはlibvipsからencoder選べる機能がなかったです。https://github.com/lovell/sharp/issues/3582
wasm-vipsも試して見たかったですがAVIFサポートがなかったです https://github.com/kleisauke/wasm-vips/issues/44
avifの個人的な指針
写真:
quality: 50, lossless: false, effort: 1
イラストlossy:
quality: 80, lossless: false, effort: 1
※qualityを上げるだけでかなり改善する
イラストロスレス: webpを用いる [webpより遅い割に、圧縮率はほぼ差がない]
でも写真とイラスト区分ができないですね
lossyだと圧縮の結果のサイズの違いが大きいのでオプションで両方できるようにするのはどうでしょう。
写真とイラスト区分ができない
sharp.jsのstats()のentropyを見てなんとなく判断できないかな
7以上は写真とみなすとか
この映像のentropy 7.023でました
sharpnessもほぼ違いないような…ううん

じゃ、じゃあ7.1で(超適当
原神のスクショってどうなんだろう(たまにベンチマークとかこういった用事で開くんだけど5GBのダウンロードが…

7.3328
これをresize 1024x1024 insideしてquality: 50, lossless: false, effort: 1でavifにしたら悲惨なことになってしまった

