以下はDoom9のMPEG-4 AVC / H.264 Informationの試訳です。 |
プロファイル | offer | support |
Baseline | I/P-フレーム | progressive 、CAVLCのみ |
Extended | I/P/B/SP/SI-フレーム | progressive、 CAVLC のみ |
Main | I/P/B-フレーム、CAVLC または CABAC | progressive, interlaced |
High(別名 FRExt) | Main プロファイルに加えて: 8x8 intra prediction, custom quants, lossless video coding, more yuv formats (4:4:4...) |
現時点では、どれがDVDバックアップに適したプロファイルかはなんとも言えない。おそらくは、MainもしくはHighで、以下の toolを使うのが良いように思う。 (MPEG-4 ASP toolの説明も読んで下さい。GMC以外はAVCでも使えます。
AVC/H.264 では二つの、MPEG-4 ASPより先進的なビットストリーム記述方式のエントロピー符号化ツール (macroblock-type, motionvectors + reference-index...)を定義しています : CAVLC(Context-Adaptive Variable Length Coding) と CABAC (Context-Adaptive Binary Arithmetic Coding)
CABACはAVC/H.264デフォルトのCAVLC (別名UVLC)より強力な圧縮方式で、 ビットレートを約10-15% 節約できると言われています(特に高ビットレート時)。 CABACは (CAVLCも同様) ロスレスで画質低下が一切ありません。しかしエンコードとデコード速度は低下します。
プレフィルタ(例えばavisynthが行うエンコード前のフィルタリング)やポストプロセス/フィルタ (デコーダが最終出力前に行うもの)とは事なり、ループフィルタリングは各フレーム毎のエンコードプロセスの工程中に行われます。厳密にはエンコードの後、但し、後続フレームの為の参照フレームとして使われる前の時点です。これは特に低ビットレート時のブロックノイズ減少に効果があります。しかし、エンコードとデコードは遅くなります。
MPEG-4 ASP (Inter4V/4MVを使った場合のみ、ブロックサイズは16x16 〜8x8 ピクセルの間で変化する)と異なり、AVC/H.264規格ではモーションサーチの精度を決めるマクロブロックを4x4 pixelまで下げる事を提案しています(8x4のように段階的に下げる事もできます) 。ブロックサイズは適応性があり、可変です。各マクロブロックにどの程度のブロックサイズを与えれば最も効果的か、その判断が賢いものが良いエンコーダと呼ばれるでしょう。
*Mainでは4と16の組み合わせ(4x4,4x16,16x4,16x16)しか使えない。これは闇階調でぱたぱた動くブロックノイズの発生に繋がり、x264では抑制困難。Apple-H264のマルチパスが5パス程度行うのはこの対策と思われる。商用DVDを作成するプロの世界でもMainではmpeg2に勝てないとの問題が指摘され、これがFRext拡張(High profileなど)の誕生に繋がった*
MPEG-4 ASP (直前のフレームのみを参照フレームにする)と異なり、 AVC/H.264 では複数の候補から参照フレームを選べるようにになりました。つまり、ビデオコデックはASPのようにシンプルに直前フレームを参照するか、それとももっと前のフレームを参照するか自分で決められると言う事です。
このために(例えば、P-フレームが直前のI-フレームよりも前のフレームを参照できるようにするために) 新しいタイプのフレームが必要になりました: IDR-フレームというのがそれです。これはI-フレームの一種ですが、後続のフレームに参照を許可しません。複数参照フレームを使うとエンコード、デコード速度は低下し、カットもIDR-フレーム単位でしかできなくなります。
Weigthed Predictionを使うと参照フレームに「重要性」を付ける事が出来ます(例えば、直前の映像を(ブライトネス方向に) スケーリングできます)。これは特にフェードのある場面、後続の映像が直前の映像によく似ているんだけど、暗さが違うだけ、、、といった場合に効果的です。クロスフェード(フェードを使った場面転換)には効果がありません。
※実際には白フェード、黒フェード、フェードイン、フェードアウトで別の計算式を用意しないと効果が安定しない模様。
RDO を使うと、エンコーダは2種類の選択肢があるような場合に最も効率の良い符号化方式を選べるようになります(例えば inter/intra decisions, motion search...などなど)
RDO はAVC/H.264 仕様書の定義にありません。しかし、この新しいアプローチを最初に導入したのはH.264のレファレンスソフトウェア(JM)です。他のコデックもRDOを組み込む事が出来ます。例えば、既にRDOを装備しているXviDのVHQ モードのように。
現時点で使えるAVC/H.264コデックは、x264, Nero, Apple, MainConcept, Sorenson, Moonlight, CyberLink, VSS, mpegable, Envivio, Hdot264 (binary), DSPR, JM (reference software) (binary), ffmpeg, Philips, FastVDO, Skal, Sony,,,などなど、すでに沢山あります。
名前 | 種別 | CABAC | Loop | max B-Frames | multiple B-Frames | B-References | multiple Reference Frames | weighted prediction | P-Frame Size | B-Frame Size | anamorphic signalling | High Profile | Adaptive Quant (Psy High) | multiple Slices |
x264 | GPL | ◎ | ◎ | 16 | ◎ | ◎ | ◎ | (no)weight_b | 4x4 | 8x8 | ◎ | ◎ | ? | thread |
NeroDigital AVC | 製品 | ◎ | ◎(adaptive) | ? | ◎ | ? | ◎ | ◎ | 8x8 | 16x16 | ? | ? | ◎ | ? |
Apple | 製品 | X | X | 1 | ? | ? | ? | X | ? | ? | ? | ? | ◎ | ◎ |
※全文を訳してもあまり意味が無いので一部に限定。原文ではApple-h264はCABAC,Loop,weighted prediction非対応としている。x264についてはコマンド一覧から相当するものを補完した。表には無いがx264はcustom quantization matrixが実装されるなど(2005/秋頃)進化が速い
現時点では、多くの実行環境が異なるコンテナをサポートしています:
現在のエンコード実行環境は非常に遅い (大半は商業製品のプレビュー版) 。
それでも x264 と NeroDigital'の AVC エンコーダは既に良い速度と品質を提供しているようですが。とはいえ、 AVC が非常に先端的なビデオ符号化フォーマットである事に変わりはなく、古い CPUでのエンコードは非常に時間がかかるでしょう。
二つの組織 (DVDフォーラムとBlu-rayディスクアソシエーション) が現在一般的な DVD フォーマットの後継となるべく活動しています。これはいわゆる High Definition コンテンツ (現行DVDより大きな映像サイズになる)と呼ばれる物です: HD-DVD と BD-ROM
DVD フォーラムは既に MPEG-4 AVC/H.264 をHD-DVDの必須のビデオコデックとして採用しました。 Blu-rayディスクアソシエーションも、MPEG-4 AVC/H.264を対応ビデオコデックに含めるとアナウンスしています。
以上の事から、AVC/H.264 が広く使われ、サポートされる次世代ビデオフォーマットになる確率は非常に高いように思えます。DVDの中で使われている現在のMPEG-2 のように。