Doom9 / MPEG-4_AVC


Doom9 / MPEG-4_AVC
2016-05-13 (金) 09:39:50更新
カテゴリ:規格?

MPEG-4 AVC / H.264 Information

ISO 14496-10 (ビデオ) - Advanced Video Coding (AVC)

MPEG -4規格は AVC/H.264 で最新で、技術的にも素晴らしく、ほとんど芸術の領域のビデオ符号化フォーマットを定義しました。
AVC/H.264 ビデオ符号化規格は2003年に二つの団体で策定されました。ISOのMPEGとITUのVCEG です。ITUは国連の下部組織で、H.263 フォーマット(主にビデオ会議のソフトに使われています)を策定した機関です。
AVC/H.264 規格そのものの開発はJVTが開発にあたりました。これにはMPEG と VCEGの専門家が参加しています。

MPEGサイドから見ればこの規格は MPEG-4 Part 10 (ISO 14496-10)、ITU サイドではH.264 (ITU の文書番号)。 AVC(Advanced Video Coding)という "正式な" タイトルはMPEG側がAACと並べた時のバランスを考えてつけたものです。

AVC/H.264 プロファイル

AVC/H.264 は4つのプロファイルを定義しています:
Baseline, Main, Extended , High Profile (これらの下に〜他と同様〜それぞれ Levelによる分類があります):

Baseline
利用可能: I/P-フレーム
サポート:プログレッシブ 、CAVLCのみ
※Apple-H.264(QuickTime Pro7)、iPod、ワンセグなど。
Extended
利用可能:I/P/B/SP/SI-フレーム
サポート:プログレッシブ、 CAVLC のみ
※Apple-H.264(QuickTime Pro7)ではグレイアウト。
Main
利用可能:I/P/B-フレーム
利用可能: CAVLC または CABAC
サポート:プログレッシブ、インターレースド
※ffmpegXなど。
※Apple-H.264(QuickTime Pro7)もサポートしていると主張するが、Doom9はこれはBaseline+Bサポート以上のものでは無く、Mainを名乗るには規格上あり得ない制限があるとしている。
High(別名 FRExt)
Main プロファイルに加えて: 8x8 イントラ予測、カスタム量子化マトリクス、ロスレス符号化、対応するYUVフォーマットの拡張(4:4:4など...)
※HD解像度向けの拡張。元来はプロ用途を狙っていたためYUV4:4:4など、家庭では無意味なものも含む。
※Mac/Win/linux:MEncoder, x264cli、Winのみ: x264VfW, MeGUI(x264版)など。
※QuickTime Player7 は再生できない。要VLC/MPlayer。WinではMedia Player Classicなど。

DVDバックアップでは、どうやらHigh プロファイルで以下のツールを使うのが最適なようです。(2nd January 2006時点)
(MPEG-ASP? の説明もチェックして下さいGMC以外はAVC でも使えます):

CAVLC/CABAC:

AVC/H.264 では二つの、MPEG-4 ASPより先進的なビットストリーム記述方式 (マクロブロック・タイプ、モーションベクトル + 参照インデックス...)のエントロピー符号化ツールを定義しています : CAVLC(Context-Adaptive Variable Length Coding 、適応可変長符号化) と CABAC (Context-Adaptive Binary Arithmetic Coding、適応2進法符号化)。

CABACはAVC/H.264デフォルトのCAVLC (別名UVLC)よりも強力な圧縮方式で、 ビットレートをさらに約10-15% 節約できると言われています(特に高ビットレート時)。 CABACは (CAVLCも同様) ロスレスで画質低下が一切ありません。しかしエンコードとデコード速度は低下します。

※CABAC/CABLCは変換〜言葉を短く言い換えるようなもの〜なのでロスレスだが、その前の段階で量子化等による圧縮=画質劣化が入る。
※CABACはx264系(MEncoder,x264cli,x264VfW,MeGUI)のデフォルト。
※Apple-H.264(QuickTime Pro7)は明示的に指定不能。自動選択か?

Loop/Deblocking Filter:

プレフィルタ(例えばavisynthが行うエンコード前のフィルタリング)やポストプロセス/フィルタ (デコーダが最終出力前に行うもの)とは異なり、ループフィルタは各フレームごとのエンコードプロセス中に行われます。厳密にはエンコードの後、但し、後続フレームの為の参照フレームとして使われる前の時点です。これは特に低ビットレート時のブロックノイズ減少に効果があります。しかし、エンコードとデコードは遅くなります。

※従って、x264デブロックは切るべきではない。切ればブロックノイズのドミノ倒し。
※素材にブロックノイズがある場合はエンコーダのプレフィルタは(あれば)使ってもイイ。
※再生ソフトのデブロックフィルタ(ポストプロセスフィルタ)も切った方が良い。
※別名がいっぱいある。ループフィルタ、インループフィルタ、インループデブロッカー、x264デブロック、などなど。
※FRExtではさらに機能が拡張され、規格上はフィルムグレインすら保持できるようになったらしい。


Variable Block Sizes/Macroblock Partitions:(可変ブロックサイズ/マクロブロックパーティション)

MPEG-4 ASP (Inter4V/4MVを使った場合のみ、ブロックサイズは16x16 または 8x8 ピクセルの2種類を使い分ける)と異なり、AVC/H.264規格ではモーションサーチの精度を決めるマクロブロックを4x4 ピクセルまで下げる事を定義しています(8x4のように段階的に下げる事もできます)。ブロックサイズは映像内容に応じて適応性があり、可変です。
各マクロブロックにどの程度のブロックサイズを与えれば最も効果的か、その判断が賢いものが良いエンコーダと呼ばれるでしょう。

※x264では4x4, 4x8, 8x4, 8x8, 16x8, 8x16, 16x16、さらにi4x4とかp8x8とかなんか種類がある。

Multiple Reference Frames: (複数参照フレーム)

MPEG-4 ASP (直前のフレームのみを参照フレームにする)と異なり、 AVC/H.264 では複数の候補から参照フレームを選べるようにになりました。つまり、ビデオコデックはASPのようにシンプルに直前フレームを参照するか、それとももっと前のフレームを参照するか自分で決められると言う事です。このために(例えば、P-フレームが直前のI-フレームよりも前のフレームを参照できるようにするために)新しいタイプのフレームが必要になりました: IDR-フレームというのがそれです。
これはI-フレームの一種ですが、後続のフレームに自分より前のフレームを参照する事を許しません。複数参照フレームを使うとエンコード、デコード速度は低下し、カットもIDR-フレーム単位でしかできなくなります。

※MEncoderのx264は最大15フレームまで指定できるが、デコーダによってはあまり大きな値には非対応らしい。
※複数参照フレームが最も効果を発揮するのは、24fps映像を30fpsでエンコードするような場合と思われる。
※MEncoderのドキュメント類では特に、リミテッドアニメに効果有り、実写はそうでもないとしている。
※背景の前を車が通りすぎるような場面で、背景部分の参照フレームは、車に覆われる前のフレームからとった方が良いという考えに基づくので原理上は特に実写/アニメの区別は無い。
※なお、『改訂版H.264/AVC教科書(インプレス)』に拠るとH.264/AVCのPフレームは自分より後のフレームを参照する事ができる。また、Bの参照フレームは自分より前2枚 or 後ろ2枚 or 前後から各1枚の3パターンが選べる。
※この点、XvidまでのPやBの理解に基づくX264よりも「フレーム並べ替え」という全てを包含し得るAPIを持つQuickTimeのほうが将来的な拡張余地が大きい。もっとも、今のところこれはBフレームをサポートしているだけのようだ。

Weighted Prediction: (適応重み補完予測)

Weigthed Predictionを使うと参照フレームに「重要性」を付ける事が出来ます(例えば、直前の映像を(ブライトネス方向に) スケーリングできます)。これは特にフェードのある場面、暗転などで暗さが増す場合は除きますが、後続の映像が直前の映像によく似ている場合に効果的です。クロスフェードには効果がありません (例えばフェードを使った場面転換など)。
従来方式では画像の動きを予測する仕組みはあったものの、フェード画像のように画面の明るさが時間的に変化する画像を有効に予測する手段が無く、符号化画像の品質が劣化する要因となっていました(直前のフレームの明るさが基準になるので、実際のフレームの明るさとの差がノイズとなる。)。
H.264/AVC規格では、複数の参照フレームを適応的に重み付け加算した信号を予測に用いる事により、この問題を解決しています。
(複数の参照フレームに適応的に重み係数を掛けて予測に使う為、明るさが時間的に変化するフェード画像などで性能が大幅に向上する。)

『改訂版H.264/AVC教科書(インプレス)』に拠ると、規格上はP/Bに使える。また、フェードの種類、ディゾルブ、部分的な明るさ変化であっても効果は出せるとしていた。
※実際のプログラミングでは白フェード、黒フェード、フェードイン、フェードアウト、ディゾルブなどで別の計算式を用意する必要があるようだ。
※x264は(no)weight_bのみで、これは(no)b_adaptと一緒に使うと意味が無くなる。

Rate Distortion Optimisation (RDO?):レートと歪の最適化方式

RDO?を使うと、エンコーダは2種類の選択肢があるような場合に最も効率の良い符号化方式を選べるようになります(例えば inter/intra decisions, motion search...などなど)

RDO?はAVC/H.264 仕様書の定義にありません。しかし、この新しいアプローチを最初に導入したのはH.264のレファレンスソフトウェア(JM)です。他のコデックもRDO?を組み込む事が出来ます。例えば、既にRDO?を装備しているXviDのVHQ モードのように。

AVC/H.264と他のビデオコデック比較:

compchart2fa.png

VC-1:別名wmv9。H.264/AVCと並んで次世代DVDに採用されている。画質的にはAVC>VC-1>ASPとされるがエンコード/デコード負荷がAVCよりは軽い。Win機の標準装備であり、北米のデジタル放送規格でも採用されている。
SNOW:妖精現実さんがたびたび言及するlibavcodec(オープンソース)の最新コデック。MPEG系とは圧縮に対する考え方が違い、原理的にブロックノイズが発生しない。エンコード/デコード負荷はAVCよりも重い。JPEGに対するJPEG2000の地位に留まるか、パテントで煮詰めたH.264/AVCとどこまで互してゆけるか


AVC/H.264 コデック

現時点で使える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,,,などなど、すでに沢山あります。

エンコーダ

デコーダ

Doom9の比較記事

AVC/H.264の問題点

相互運用性:

現時点では、多くの実行環境が異なるコンテナをサポートしています:

.mp4
AVC が MPEG-4 規格 (ISO 14496-15) で定義したコンテナ。現時点でサポートしているのは Nero, Sorenson, Envivio , Moonlight
.mpg
AVC が MPEG-2 規格 (ISO 13818-1, AMD3) で定義したコンテナ。現時点でサポートしているのは Mainconcept と Moonlight。
.avi
AVC をAVI の中に入れる事は誰も規格化していないため、既に相互運用性の問題がおきています。AVI と VFW の制限(例えば b-フレーム または自由なフレーム符号化順番)は、これら二つのフォーマットに対するハッキングを不可欠なものにしており、その結果、AVC が提供する全ての機能を実装する上での障害となっています。これは再生品質悪化の可能性があり、少なくとも開発の速度を鈍らせ、相互運用性の問題を起こし、競争力低下の原因となっています。現在AVI は VSS, x264 (mencoder と vfw) , mpegableでサポートされています。
.264/.h264
レファレンスエンコーダが出力するraw bitstream。コンテナに入っていない。JM,x264cli, mencoder, mainconceptが出力可能。

MEncoderx264cliで.264/.h264を吐き、mp4boxで.mp4コンテナにmuxするのが最も確実な模様。QuickTime7 Proは.264/.h264を読み込めない。


速度:

現在のエンコード実行環境は非常に遅い (大半は商業製品のプレビュー版) 。

それでも x264 と NeroDigital'の AVC エンコーダは既に良い速度と品質を提供しているようですが。とはいえ、 AVC が非常に先端的なビデオ符号化フォーマットである事に変わりはなく、古い CPUでのエンコードは非常に時間がかかるでしょう。

ハードウェアにおけるMPEG-4 AVC/H.264 - HD-DVD/Blu-ray

二つの組織 (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 のように。




:用語集

FrontPage
MPlayer
Manuals
Documents
カテゴリ

■GENERAL
MEMO
LINK
雑談所
最近の更新
popular

■Other Tools
ffmpeg
mkvmerge
mp4box
MPEG Streamclip
QTCoffee
x264cli

■About
About Wiki

edit


blog


本日1
昨日0
累積12546