gazou-compressor.jp

WebP レートコントロール & Trellis最適化:Q値の歩幅 / 量子化マトリクス / 早期停止

WebP の Q値決定と再探索 は無調整だと時間を浪費し、品質差分が小さいステップを繰り返します。本稿は Adaptive Q と併用できる 高速・安定なレートコントロール を提示します。

要点
  • 大まか二分探索 + 歩幅縮小
  • Trellis は“改善余地”がある時だけ
  • PSNR増分 ×2回閾値で早期停止

1. コスト分解

再探索コスト = encode時間 * 試行回数。歩幅制御で 収束までの試行回数 を、Trellis条件分岐で 1試行あたり時間 を削減します。

2. 歩幅制御アルゴリズム

// 二分探索+歩幅縮小 (擬似コード)
let qLow = 30, qHigh = 90;
let lastGain = 99;
while (qHigh - qLow > 2) {
  const mid = Math.round((qLow + qHigh)/2);
  const r = encodeAndMetric(mid); // { psnr, bytes }
  const target = wantBytes();
  if (r.bytes > target) qHigh = mid; else qLow = mid;
  const gain = prev ? r.psnr - prev.psnr : 1;
  if (gain < 0.10 && lastGain < 0.12) break; // early-stop
  lastGain = gain;
  prev = r;
}

3. Trellis適用判定

// Trellis 適用判定: 増分が一定未満ならスキップ
function shouldTrellis(pass, lastGain){
  if (pass === 0) return false;
  return lastGain > 0.12; // 画質改善余地が大きい時だけ
}

4. 早期停止ロジック

// PSNR増分ベース早期停止
const GAINS = [];
function pushGain(g){
  GAINS.push(g);
  if (GAINS.length > 4) GAINS.shift();
  const recent = GAINS.slice(-3);
  return recent.every(x=>x < 0.10); // 連続で低増分
}

5. CI統合

# CI: ラダー生成と比較 (関連記事: /articles/ci-image-optimization-pipeline)
node scripts/ladder.js --image ui.png --out head.json --format webp
node scripts/ladder.js --image ui.png --out base.json --ref origin/main --format webp
node scripts/metrics-compare.js base.json head.json --psnr-threshold 0.25 --ssim-threshold 0.004

6. FAQ

7. まとめ

歩幅・Trellis・早期停止の3要素で“最小試行”のレートコントロールを実現し、従来手動探索より平均30–45%の時間短縮が見込めます。

gazou-compressor.jp 編集部

画像圧縮・変換・背景除去などの実践テクニックと、Webで“速く・軽く・崩さない”ためのノウハウを発信しています。

関連記事

トピック/更新日の近いコンテンツ