Man / CODEC固有オプション / -x264encopts / keyint
2010-03-15 (月) 08:14:51更新
カテゴリ:x264

keyint=<value>:IDRフレームの最大間隔(シーク精度調整)

原文

Sets maximum interval between IDR-frames (default: 250). Larger values save bits, thus improve quality, at the cost of seeking precision.
Unlike MPEG-1/2/4, H.264 does not suffer from DCT drift with large values of keyint.

・MEncoder dev-CVS-060314-20:27-4.0.1 (C) 2000-2006 MPlayer Team
・x264 core:45 svn-467

訳文

デフォルト:

keyint=250

IDRフレームの最大間隔
大きい値の方がbitが節約できるので品質が向上するが、シークの精密さと引き換えになる。
MPEG-1/2/4とは違って、 H.264はkeyintを大きくしてもDCT driftで苦しむ事が無い。

参考

MeGUI2.0-Help;"Maximum Key Frame Interval"

Group of Pictures(GOP)の最大長を指定。GOP は他のGOP中のフレームを参照できない。また、シークやランダムアクセスをする上で必要なもの。GOP sizeは、効率的に符号化するためにエンコード過程で動的に算出される。しかしながら、maximum GOPの指定は prevents any reduction of seekability.(*シーカビリティのいかなる減少も妨げる?*)
Recommended;250
Default;250

その他

IDRフレームとは、H.264/AVCの新しいIフレームの一種。
後続フレームに対し、自分より前のフレームを参照する事を禁止する。
正式にはInstantaneous Decoding Refresh(デコーダ復号動作の瞬時リフレッシュ)というが、要するにデコーダ・バッファにリセットをかけるフレーム。
画質のキモとなるIフレームと、シークに使うIDRフレームに分離したと考えても良い(ただしIDRはIも兼ねる)。

IDR登場の理由は、H.264/AVCで参照関係の自由度が激しく向上したため。

  • multiple reference frame(複数参照フレーム、frameref参照)で、直前のIフレームより前のフレームを参照フレームに使えるようになったり、
  • b_pyramidでBフレームを参照フレームにできたり

と、従来のclosed GOP(シーク/編集の単位)の概念はめろめろになっている。
従って、xvid(MPEG-4 ASP)ではオールラウンドに効いた「keyint間隔を減らして符号化効率と引き換えに画質を取る」策は効果が出にくい。

画質向上、特に動きの激しい場面のブロックノイズ対策としてIフレームを増やすにはscenecutを弄る。

DCT driftは意味不明だが、PSPのwikiではkeyint無限大の設定も見かける。
一方、ffmpegXではkeyint=120を使っているが、これはx264の符号化効率をサイズ減少より画質とシーク精度向上に振ったスタンスに見える。
どのへんが最適解かはなんとも言えず、手許では従来通りにフレームレートの10倍をキープしている。デフォルトの250はPAL*1の10倍だし。
原文を見る限り、このオプション本来の目的は純粋にシークに思えるが、、、*2






*1 欧州TV規格。25fps。DVDも同じ
*2 新しい概念の普及と、ユーザの慣れの綱引きはしばらく続くものなのかもしれない。ここ一年程でも、x264関連ドキュメントからCBRの用語が消えてABRで統一されたり、1パスのqp_constantが使いもんにならんと思ってたらcrfが出て来たり、、、ま、それでがすがす進化してくのが楽しいんだけども