GOPとキーフレーム間隔の最適化:低遅延と画質の実務チューニング
低遅延配信やインタラクティブなUI動画では、GOP長とキーフレーム(IDR)間隔の 設計が体感を左右します。本稿では最小ルールとffmpegの実例で、 遅延・シーク・帯域・品質のバランスを短時間で整える手順を示します。
先に結論(最小ルール)
- GOP長は用途別に秒で定義(ライブ≤1–2s、VOD 2–5s)。
- IDRはセグメント長に同期(HLS/DASHとの整合)。
- 低遅延はB=0〜2でパイプライン遅延を短縮。
- シーク安定化のためscene cut無効や強制キーフレームを併用。
要点(TL;DR)
- GOP=秒×FPS。IDRはHLS/DASH境界に合わせる。
理由: セグメント開始をIDRに揃えるとシーク/切替が安定。 - 低遅延はBフレーム抑制、VOD品質は中程度のB/参照距離。
失敗時: パイプライン遅延やデコード負荷が増大。 - scene cutでの断片化は負荷増。必要に応じて
sc_threshold=0
。
根拠: キーフレーム散在でバッファ破断/再生負荷が上がる。 - 計測は遅延・シーク・品質・帯域の4象限で見る。
RUMやプレイヤー統計で実利用を観測。
1. 背景:GOP設計がUXを決める
GOP長とIDR間隔は、切替/シークの安定性と遅延に直結します。短すぎれば圧縮効率が落ち、 長すぎればライブで遅延が積み上がるため、用途別の秒基準が近道です。
2. まずはFPSと許容遅延から逆算
GOP長はフレーム数ではなく秒で考えると安全です。30fpsでGOP=60は2秒、 ライブ低遅延なら1秒(=30フレーム)を上限に検討します。
2. ffmpegの実用プリセット
2.1 VOD向け
# VOD向け(30fps, GOP=2秒, IDR=2秒, B=3)
ffmpeg -i input.mp4 -c:v libx264 -preset slow -profile:v high -b:v 2500k -g 60 -keyint_min 60 -sc_threshold 0 -x264-params "bframes=3:ref=3:open_gop=0" -c:a aac -b:a 128k -movflags +faststart output.mp4
# 低遅延ライブ(30fps, GOP<=1秒, B=0, tune zerolatency)
ffmpeg -i input.sdp -c:v libx264 -preset veryfast -tune zerolatency -b:v 2000k -g 30 -keyint_min 30 -sc_threshold 0 -x264-params "bframes=0:ref=1" -f flv rtmp://...
2.2 HLS/DASHでの同期
# HLSでセグメント境界にキーフレームを強制(2秒セグメント)
ffmpeg -i input.mp4 -c:v libx264 -b:v 2500k -g 60 -keyint_min 60 -sc_threshold 0 -force_key_frames "expr:gte(t,n_forced*2)" -hls_time 2 -hls_playlist_type vod -hls_segment_type mpegts -hls_list_size 0 out.m3u8
# DASH(GOP=2秒、IDR同期)
ffmpeg -i input.mp4 -map 0:v -map 0:a -b:v:0 800k -b:v:1 1600k -b:v:2 2500k -c:v libx264 -g 60 -keyint_min 60 -sc_threshold 0 -use_template 1 -use_timeline 1 -c:a aac -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash out.mpd
2.3 プレイヤー設定(疑似コード)
// プレイヤーのキーフレーム合わせシーク(疑似コード)
player.seekTo( targetTimeAlignedToKeyframe(targetTime) );
player.setConfig({ lowLatency: true, maxBufferLength: 6, maxBufferHole: 0.5 });
2.4 ラダー設計の目安
# ビットレートラダー例(30fps, H.264)
240p 400–600 kbps GOP=30–60
360p 800–1200 kbps GOP=30–60
720p 1800–2800 kbps GOP=30–60
1080p 3000–4500 kbps GOP=30–60
3. 応用とハマりどころ
- AV1/HEVCでも考え方は同じ。/video-performance-metrics を参照。
- UI内の短尺ループは短GOP+poster最適化(poster戦略)。
- セグメント多重化はCDNキャッシュと相談(CDN戦略)。
- VFR(可変フレームレート)は意図せずGOPが流れることがあるため、VODではCFR化を検討。
- 長時間ライブはドリフト対策で定期IDR挿入を維持(例: 1–2秒毎)。
4. 公開前チェック
- GOP長とIDR間隔が用途に適合(ライブ≤1–2秒、VOD 2–5秒)。
- HLS/DASHのセグメント境界にキーフレームが整列。
- Bフレームは遅延要件に対して過剰でない。
- scene cutや可変GOPで再生負荷が上がっていない。
5. まとめ
GOP/キーフレーム設計は秒で考え、配信方式と同期させるのが近道です。指標は遅延・シーク・品質・帯域の4点。 まずは上のプリセットでベースラインを作り、RUMと実測で仕上げましょう。
FAQ
FAQ(よくある質問)
1画像形式の基本方針は?(写真/スクショ/透過)
写真は AVIF / WebP(画質80–85%目安)、UIやスクショはPNG / WebP Lossless、単色ロゴはSVGが基本です。 実装の詳細は srcset/sizes設計ガイド と スクショ最適化 を参照してください。
2圧縮しても画質を落とさないコツは?
実表示幅に合わせたリサイズ → 過大ダウンロードを防ぎ、
srcset/sizes
を 実描画幅に一致させます。画質は写真で 80–85% を起点に、ノイズやエッジを目視確認。 仕上げは /compare で Before/After を見比べるのがおすすめです。3CLSを悪化させない画像の置き方は?
公開日: 2025-09-08編集: gazou-compressor.jp