Hackerたちの意見
JpegXLとWebP(それにAVIF?)の争いについて、何年も聞いてるけど、あんまり詳しくないんだよね。いろんな「ベンチマーク」をざっと見た感じだと、JpegXLは圧縮速度とサイズの両方でWebPよりも明らかに優れてるみたい。なんでChromiumが採用に消極的なんだろう? WebPの利点って何かあるのかな? WebPの経験は、名目上は`.png`ファイルをダウンロードしたけど、開こうとしたら「WebPはサポートされていません」って言われたことだけなんだよね。
└
JPEGXLのメインライブラリがメンテされてなくて、セキュリティの問題があるかもしれないっていうのが問題だったんだ。何人かが集まって、Rustで新しいライブラリを書いたら、それが安全なブラウザにとって受け入れられる選択肢になったんだよ。
└
JpegXLとAVIFは比較できるフォーマットだよ。Googleは、1つだけあれば十分で、追加のフォーマットはセキュリティの脆弱性になるって主張してた。
└
- avifは低bpp(低品質の画像)では優れてるけど、ロスレスではひどい - jxlは高bppでは優れてて、ロスレスモードでは最高だね。
└
WebPとAVIFのコードの大部分はVP8/AV1と共有されてるから、ブラウザが現代のビデオコーデックをサポートしてれば、かなり良いロスィ画像コーデックもタダで手に入るんだ。JPEG-XLは別のコードベースだから、実装にはかなりの手間がかかるし、単に圧縮が良くなっただけじゃ他の考慮がないと価値がないかもしれない。JPEGが広く使われ続けてるのは、多くのウェブパブリッシャーが数バイトの圧縮にそれほどこだわってない証拠だよ。また、セキュリティの観点から見ると、JPEG-XLのリファレンス実装はあまり良くない。C++で10万行以上あるし、GoogleとMozillaがメモリ安全性を公に支持してる中で、libjxlのセキュリティ脆弱性がChromeやFirefoxでゼロクリックのゼロデイにつながったら、めっちゃ恥ずかしいことになるよね。タイミング的に、ChromeがJPEG-XLのRust実装を成熟してる(または少なくともその方向に向かってる)と考えてるサインかもしれないね。
└
JPEG XLはプログレッシブデコーディングができるよ。 https://www.youtube.com/watch?v=UphN1_7nP8U
└
GoogleがWebPを作ったから、無理やりネットに押し付けてるって感じだよね。ほんとに不当な優遇をしてると思う。
└
> さまざまな「ベンチマーク」で、JpegXLはWebPよりも明らかに優れているようだね。 デコード速度のベンチマークは誤解を招くよ。WebPは2013年からAndroidで、2020年からAppleデバイスでハードウェアアクセラレーションされてるから。既存のハードウェアの能力のおかげで、実際のユーザーはWebPで常により良いパフォーマンスとバッテリー寿命を体験することになる。JXLは未来に備えるためのものだね。ビット深度、広色域HDR、プログレッシブデコーディング、アニメーション、透明度など。JXLは今のところAVIF(画像コーデック、動画じゃなくて)を完全に上回ってるよ。AVIFは現代のスマホではまだハードウェアデコーディングがほとんどないし、今はJXLに投資する方がAVIFよりも理にかなってる。今使われているもので言うと、残念ながらWebPに対抗する大きなケースはないね。サイズと知覚品質のトレードオフはあまり変わらないし、ユーザーにとっては、ハードウェアデコードがないせいで、状況が悪化する(デコード速度が遅くなったり、バッテリー寿命が短くなる)前に良くなることはないだろうね。それには何年もかかるかもしれない。だって、JXLの機能が増えるってことは、それをハードウェアのダイスペースに翻訳するのにも時間がかかるから。ソフトウェアの面は今やっと動き出してるところだし。でも、みんなが必要としてることを考えると、今すぐJXLの旅を始めるのが本当に必要だと思う。
└
1つの黒いピクセルの.webpは、1つの黒いピクセルの.jpegxlよりも小さいし、さらにそれは1つの黒いピクセルの.pngよりも小さいから、webp > jpegxl > pngって感じだね。
誰か、実装がアニメーションをサポートしてるか知ってる? これはAppleのにはない機能だよね。
└
Chromeのプラットフォームステータスページによると、そうだよ! https://chromestatus.com/feature/5114042131808256 >>> - 認識される読み込みパフォーマンス向上のためのプログレッシブデコーディング - 幅広い色域、HDR、高ビット深度のサポート - アニメーションのサポート
└
そうだよ、今Canaryで試してみたけど、jxlテストページでもアニメーションが表示されたよ。
└
え、これって誰かが「WebPは実際には悪い画像フォーマットの動画フォーマットで、JpegXLは良い画像フォーマットだけど悪い動画フォーマットっていう対称性があるのは皮肉だよね」って説明するきっかけじゃないの? :-D (これが本当かどうかはわからないけど、面白いね…)
└
うん、でもあんまりおすすめはしないよ。インターフレーム圧縮がないから、普通の動画ファイルに「gif」って付けるよりも効率がかなり悪いんだよね。
https://github.com/libjxl/jxl-rs jxl-rsが基盤の実装だよ。比較的新しいけど、Rustはセキュリティの不安を和らげてくれるよね。このライブラリは、前回Chromiumで話題になったときには本当に選択肢じゃなかったんだ。
└
確か、GoogleはJpegXLを追加するのを拒否したのは、興味が足りないって言ってたよね?セキュリティの懸念から拒否したわけじゃないと思うけど、もしかしたら記憶違いかも。
└
> Rustは確かにセキュリティの不安を和らげるけど、メモリの安全性はセキュリティじゃないよ。Rustのメモリ保証は一部の問題を解決するけど、逆に危険な過信を生むこともある。開発者はコンパイラをセキュリティ監査だと思って、脅威モデリングの大変な作業をスキップしちゃう。手動で全てを確認して、手元のツールを使う慎重なCプログラマーの方が、言語を盲目的に信じてる怠慢なRustプログラマーよりもリスクが少ないんだよ。
最近、WebPとAVIFをリファレンスエンコーダー(損失ありのAVIFにはrav1eを使用)で比較してみたんだけど、同じ品質でWebPはほぼ瞬時に処理できるのに対して、AVIFは1MPの画像で20秒以上かかるんだよね。JXLはまだ広くサポートされてないから、実際には使えないけど(ゲームのマップとか)、将来的にはWebPよりも品質が良くて性能が似てることを願ってる。
└
AVIFでは、品質だけじゃなくてCPU使用パラメータも調整しないといけないよ。確かに遅いこともあるけど、1MPの画像にしてはそんなに遅くなるはずじゃない。デフォルト設定がなぜか高いCPU設定を使ってることが多いんだよね。俺のインフラは控えめだけど、2MPのAVIFを100msくらいで生成できるよ。
ありがとう!でも、WEBPと同じように、できるだけ普通のJPEGにこだわりたいな。使ってるプログラムの中にはこれらのフォーマットを受け付けないものもあるし、一般的なユーザーにとってはJPEG + PNGでほとんどのニーズをカバーできると思う。シンプルなアニメーション用にGIFもリストに加えて、もっと複雑なものは画像じゃなくて動画にした方がいいかもね。
└
2026年にはWebPを普遍的に使えるフォーマットとして扱えるようになるよ。今は古くて退屈だけど、安全に使えるフォーマットだね。ブラウザのWebPサポートは今や素晴らしいし、最後に対応したのは2020年9月16日のSafari 14だよ。Windows 10 1809には2018年10月に入ったし、MacOS Big Surには2020年11月に対応した。Wikipediaには対応している人気ソフトのリストがあるよ。
└
GIFはもう使わない方がいいよ、めっちゃ非効率的だから。動画にした方が5倍から10倍効率的だよ。
└
「JPEG XL」って名前はちょっと誤解を招くかもね。単に「ビット数の多いJPEG」ってわけじゃないんだ。PNGよりも小さいファイルサイズで既存のコンテンツをロスレスでエンコードできるし、既存のJPEGを20%のスペース削減で復元可能にトランスコードできるんだ。ロスのあるエンコードもJPEGほど汚くなくて、アーティファクトも少ないし、広色域やHDRにも対応してる。画像を段階的に表示するから、15%の画像が読み込まれるだけで decent なプレビューが見られるよ(クライアント側の追加作業なしでね)。少なくともウェブ用のトランスコーディングターゲットとしては非常に良いし、元のソースファイルをほぼ再生成できる形で多くのフォーマットを実際に置き換えてるんだ。
https://cloudinary.com/blog/jpeg-xl-and-the-pareto-front ちょっと古いけど、WebP、JpegXL、AVIF、JPEGなどを比較したチャート付きの記事だよ。AVIFは遅いね。
残念ながら、Chromiumがmanifest-v2拡張のサポートをやめて、uBlock Originの適切なサポートもなくなったから、使うのをやめることにしたよ。もちろん簡単じゃないけどね…
JpegXLに自由に使える仕様がないのは残念だね。
└
一般的に言って、ISOやIECなどの数千の仕様や文書が有料なのは残念だよね。
└
公開されてない規格があるのは詐欺みたいなもんだよね。
僕の(限られた)理解では、JPEGとJPEG-XLの間にはまだたくさんの共通点があるみたい。新しい実装が古いJPEGフォーマットのサポートを取り入れるように拡張できるかどうか、そしてその結果、全体のコードサイズが減らせるか気になるな。