misskey icon indicating copy to clipboard operation
misskey copied to clipboard

画像の圧縮にAVIFかJPEG XLを使う

Open tamaina opened this issue 3 years ago • 52 comments

Summary

Related to #6626, #9275

Mastodon v4からAVIFに対応したらしいので

https://caniuse.com/avif

image

tamaina avatar Dec 05 '22 16:12 tamaina

Mastodon v4はあまり普及してないので後回しかな

tamaina avatar Dec 05 '22 16:12 tamaina

Mastodon v4はあまり普及してないので

これに関してなにかデータとかありますか?ただ気になるだけですが

saschanaz avatar Dec 05 '22 16:12 saschanaz

まず大きなインスタンス(fedibird, mstdn.jp)あたりが対応しないことには…

tamaina avatar Dec 05 '22 16:12 tamaina

よしんば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

tamaina avatar Dec 05 '22 17:12 tamaina

FedibirdはまだMastodon 3.4.1使っているし、時間かかりそうですね

saschanaz avatar Dec 05 '22 17:12 saschanaz

MEMO: Webpもv4からっぽい https://github.com/mastodon/mastodon/commit/379a7a7ca7cf913cbc130a6323f821b534fc14c4

tamaina avatar Dec 05 '22 17:12 tamaina

Mastodonや他のソフトウェアが問題なので、高互換と圧縮優先の2種類を用意して使い分けるというのはどうだろう
(ただ2種類をストレージに保存するのは微妙、片方をプロキシにする?)

tamaina avatar Dec 20 '22 06:12 tamaina

AVIFを検討するならJPEG XLも検討して良さそうだけど、ブラウザの対応が全滅している

image

https://caniuse.com/jpegxl

Sharp.jsの対応も面倒 https://github.com/lovell/sharp/issues/2731#issuecomment-1349856411

tamaina avatar Dec 20 '22 07:12 tamaina

片方をプロキシにする?

圧縮優先低互換の方をストレージに保存するのがサーバーのCPU的にもストレージ的にも無難そう

tamaina avatar Dec 20 '22 07:12 tamaina

avifは重たすぎるし、jpeg xlはブラウザ対応の見込みがわからないためnot planned

tamaina avatar Mar 05 '23 14:03 tamaina

AVIF 重いのは昔の話では

acid-chicken avatar Mar 05 '23 14:03 acid-chicken

avifは重たすぎるし

WebPに比べてどのくらい重たいのか数字をみたいですね

saschanaz avatar Mar 05 '23 14:03 saschanaz

なんなら WebP (VP8) エンコーダー (libwebp) の方が wasm に持ち込むのが高コストという事象などがある

acid-chicken avatar Mar 05 '23 14:03 acid-chicken

WebPに比べてどのくらい重たいのか数字をみたい

sharp.jsで試してみるか

なんなら WebP (VP9) エンコーダーの方が wasm に持ち込むのが高コストという事象

ならサーバーで圧縮するのはwebp, クライアントではavifにするとかの対応もありうる

tamaina avatar Mar 05 '23 14:03 tamaina

WebPってVP9サポートします?

saschanaz avatar Mar 05 '23 14:03 saschanaz

WebPってVP9サポートします?

すみません VP8 です

acid-chicken avatar Mar 05 '23 14:03 acid-chicken

sharp-webp-avif-test

webp (smartSubsample: false) vs avif

image

webp (smartSubsample: true) vs avif

image

tamaina avatar Mar 05 '23 14:03 tamaina

effort 0, smartSubsample false

image

tamaina avatar Mar 05 '23 15:03 tamaina

effort: 0だと、avifは写真は得意だがイラストがかなりノイズが多くなる

tamaina avatar Mar 05 '23 15:03 tamaina

effort: 1もかなりノイズありますね。rav1e使うとどうなるかなと調べてみましたがsharpはlibvipsからencoder選べる機能がなかったです。https://github.com/lovell/sharp/issues/3582

wasm-vipsも試して見たかったですがAVIFサポートがなかったです https://github.com/kleisauke/wasm-vips/issues/44

saschanaz avatar Mar 05 '23 17:03 saschanaz

avifの個人的な指針

写真:
quality: 50, lossless: false, effort: 1

イラストlossy:
quality: 80, lossless: false, effort: 1
※qualityを上げるだけでかなり改善する

イラストロスレス: webpを用いる [webpより遅い割に、圧縮率はほぼ差がない]

tamaina avatar Mar 05 '23 17:03 tamaina

でも写真とイラスト区分ができないですね

lossyだと圧縮の結果のサイズの違いが大きいのでオプションで両方できるようにするのはどうでしょう。

saschanaz avatar Mar 05 '23 17:03 saschanaz

写真とイラスト区分ができない

sharp.jsのstats()のentropyを見てなんとなく判断できないかな

tamaina avatar Mar 05 '23 17:03 tamaina

7以上は写真とみなすとか

tamaina avatar Mar 05 '23 17:03 tamaina

test 4 この映像のentropy 7.023でました

saschanaz avatar Mar 05 '23 17:03 saschanaz

sharpnessもほぼ違いないような…ううん

saschanaz avatar Mar 05 '23 17:03 saschanaz

image

じゃ、じゃあ7.1で(超適当

tamaina avatar Mar 05 '23 17:03 tamaina

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

tamaina avatar Mar 05 '23 17:03 tamaina

image

7.3328

tamaina avatar Mar 05 '23 17:03 tamaina

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

tamaina avatar Mar 05 '23 17:03 tamaina