AVIF知覚品質ベンチ 2025: Q/effort/チャンネル別指標と実務プリセット
AVIF は “Q=〇” で語られがちですが chromaサブサンプリング(4:2:0/4:4:4)、bit depth(8/10)、effort、画素カテゴリ の複合最適化です。単一指標(例: SSIM)偏重は過学習的チューニングを招き運用で破綻します。
本検証は代表 6 カテゴリ(肌/自然/夜景/文字混在/低彩度UI/グラデ)× 5 品質設定 × 2 effort を計測し “可視差が利益に見合う境界” を整理します。箇条書きは理由と失敗リスクを副文で補強します。
先に結論
写真= Q55 effort5 から開始 / 肌色と夜景で気になる場合 Q60 / UIやアイコンは WebP/JPEG 維持 or AVIF 4:4:4 + Q60。
要点(TL;DR)
- 単一指標最適化を禁止
PSNR 偏重で平坦領域にビット配分→ グラデのバンディング発生。 - 写真プリセット: Q55 effort5 4:2:0
effort4→5 のサイズ改善は約数% だが“コスト/改善” が最小谷。 - 肌/夜景のみ Q+5 再試行
暗部ノイズ + 肌階調のバンディング低減余地がある領域。 - UI/図版は 4:4:4 or WebP
4:2:0 は細線彩度が滲むリスク。差分が軽微なら既存 WebP 維持で十分。 - 10bit はグラデ限定
全量10bitはデコード/エンコード遅延コスト過大。対象絞り運用。
1. 計測設計
代表カテゴリを 視覚的アーチタイプ として固定: 肌 (中周波+色相敏感) / 自然 (高周波混在) / 夜景 (低露光+暗部ノイズ) / 文字混在 (高コントラストエッジ) / 低彩度UI / グラデ(低周波連続)。サンプル各1枚より複数フレーム平均の方が安定だが、CI 時間最適化のため 5枚×カテゴリ でサンプル。
2. スクリプト断片(指標計算)
// metrics.ts (抜粋) import sharp from 'sharp'; import { ssim } from 'ssim.js'; async function encodeAvif(buf: Buffer, q: number, effort=5){ return sharp(buf).avif({ quality: q, effort, chromaSubsampling: '4:2:0' }).toBuffer(); }
3. 品質決定フロー
- カテゴリ割当 – 拡張子やパス命名で自動分類。
手動タグ付与は脱落リスク。 - 基準プリセット適用 – Q55 effort5 を全量バッチ。
初期比較母数を揃え差分議論を容易に。 - 閾値逸脱検出 – ΔEavg > 2 or VMAF < 93 を再試候補。
誤検出削減でレビュー時間短縮。 - 局所再試行 – 該当ファイルのみ Q+5 (最大2回)。
全再エンコード回避でCI短縮。 - 例外承認 – まだ閾値外: keep WebP/JPEG or 4:4:4。
4. 公開前チェック
- 閾値ログ commit 済
再現性。未コミットは回帰解析不可。 - 例外率 ≤ 5%
例外氾濫は方針破綻サイン。 - 10bit 適用範囲記載
将来の縮小判断が容易。 - 再エンコード時間測定
effort過剰を検知。
5. まとめ
“全画像を粘って詰める” より 中央値 80% を早期確定 → 外れ値局所最適化 が時間効率で上回ります。プリセットを文章化し測定ログを履歴化することで、担当交代や規模拡大後も同等品質を再現できます。