これらのキーワードがハイライトされています:direct_pred

Man / CODEC固有オプション / -x264encopts / direct_pred
2010-03-09 (火) 13:12:31更新
カテゴリ:x264:Bフレーム

direct_pred=<0-3>:Bフレーム中のダイレクトマクロブロックで使われる動き予測の方式を決める。

原文

Determines the type of motion prediction used for direct macroblocks in B- frames.

0 None: Direct macroblocks are not used.
1 Spatial: Motion vectors are extrapolated from neighboring blocks.(default)
2 Temporal: Motion vectors are interpolated from the following P-frame.
3 Auto: The codec selects between spatial and temporal for each frame.

Spatial and temporal are approximately the same speed and PSNR, the choice between them depends on the video content. Auto is slightly better, but slower. direct_pred=0 is both slower and lower quality.

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

訳文

default=1

Bフレーム中のダイレクトマクロブロックで使われる動き予測の方式を決める。

0:無 し: ダイレクトマクロブロックを使わない。
1:空間軸: モーションベクトルを近接ブロックから推定。(default)
2:時間軸: モーションベクトルを 後続のPフレームから補完 。(*こちらがdefaultだった時期も有り。ffmpegX0.0.9v版は要注意*)
3:AUTO: コデックが各フレーム毎に空間軸と時間軸を決定。(*ffmpegX0.0.9v版には無い*)

空間軸予測と時間軸予測は速度もPSNRも概ね同じ。どちらが適しているかは映像内容によって異なる。
Autoの方が僅かに良いが、遅い。direct_pred=0は速度も遅く、品質も低い。

参考:

エンコード終了後の表示(Mac) diret_pred=3の場合

x264 [info]: direct mvs  spatial:87.8%  temporal:12.2%
  • 2はゴーストが出るとの情報有り。
  • Doom9 コデックコンテスト2005では決勝の2例(エンコードがより困難な素材)で空間軸(spatial)を使っている。
  • diret_pred=3の登場により、ブロック毎に適切なモーションベクトルを判断できるようになった。概ね空間軸と時間軸の配分はアニメで9:1。実写で7:3程度。

ダイレクトマクロブロック〜『改訂版H.264/AVC教科書(インプレス)』

H.264/AVCのBスライス専用のマクロブロック・タイプ。
動き情報を符号化せず、既に符号化済みのブロックの動き情報から予測生成するため圧縮効率があがる。
ダイレクト・モードの圧縮率は動き情報を生成する際の予測精度に依存する。
予測方式は2種類。
時間軸ダイレクト・モード:異なる動きを含む画像で、「動きの速度が一定」のケースに有効(時間的な動きの相関性に強い)。
空間軸ダイレクト・モード:似たような動きを含む画像で、「動きの速度が変化する」ケースに有効。(空間的な相関性に強い)。

従って画質的には、時間と引き換えに3(Auto)を使うのがベストと言う事になる。

MeGUIヘルプの「direct name="B-frame Mode"」

Bフレーム用のモーションベクトルの供給方式。
Spatial(空間軸) は同一フレーム内部の隣接ブロックを使う。より高いPSNRが得られる。
Temporal(時間軸)は隣接フレームを使う。より良い画質が得られるとされている。
デフォ・推奨値ともに時間軸(temporal)
※"Auto"追加以前の情報