- ピ クチャ:概ねフレーム(1つの画面)に相当。
- スライス: ピクチャをある程度分割したもの。
- マクロブロック: スライスよりも小さな単位。一般的には16x16ピクセル。「動き補償」という圧縮方式が使う。
- ピクセル: これはそのままピクセル。
- ハーフペル: ハーフピクセル。「動き補償」で使う。隣接ピクセルの値の間の値を計算で出したもの。「1/2精度動き補償」などと言う。
- クォーターペル:Qpel とか。「動き補償」で使う。「1/4精度動き補償」などと言う。
1. H.264/AVCの符号化の基礎単位
※図は『改訂版H.264/AVC教科書(インプレス)』から引用。1)MPEG 4までのピクチャ
1枚のピクチャは全部同じスライス・タイプ。例えばBフ
レーム(B-VOP)だとすると、
符号化の基本はフレーム(VOP)単位。これはBフレーム、とかPフレーム、とか言ってもそう間違いはなさそうだ。
2)H.264/AVCのピクチャ| Bスライス |
| Bスライ ス |
| Bスライ ス |
| Bスライ ス |
1フレーム内に様々なタイプのスライスが混在できる。
| Bスライス | ||
| I ス ライス | ||
| P スライス | ||
| Bスライス | ||
符号化の基本は「スライス」単位。Pスライスの参照スライ
スと、Bスライスの参照スライスは、別のフレームにある。I
スライスはどこも参照しない。
だから、厳密にはスライスとフレーム(ピクチャ)は使い分けないと混乱すると思うのだが、『改訂版H.264/AVC教科書(インプレス)』も『わかる MPEG(I/Oブックス)』も 非常にコンテキスト・アダプティブ、つうかすげーアバウトに思える。MPEG1以降の動画符号化技術の流れをきちんと把握している人なら問題ないのかもし れない。
2. H.264/AVCにおけるスライスの種類
※表は『改訂版H.264/AVC教科書(インプレス)』から引用。各スライスは複数のマクロブロックの集合体。マクロブロックにはいくつかの種類がある。
| 種類 | 概要 | マクロブロック・ タイプ |
| Pスライス | イントラ符号化、および参 照ピクチャ1枚のインター符号化を行うスライス | I,P |
| Bスライス | イントラ符号化、および参照ピクチャ1枚または2枚のインター符号化を行うスライス | I,P,B |
| Iスライス | イントラ符号化のみを行うスライス | I |
| SPスライス | 特殊なPスライス。ストリーム切り替え用。チャ ンネル切り替えとかだと思う。 | I,P,B |
| SIスライス | 特殊なIスライス。同
上 |
I,SI |
Bスライス中のマクロブロックでは、I,P,Bの3種類の「マクロブロック・タイプ」を使い分ける事が出来る。
一つのBスライス中でI,P,Bのマクロブロックが混在できるのか、それともどれか一種に統一せねばならないのかは不詳。
少し脱線。太字で示したPスライスの"参照ピクチャ1 枚のインター符号化"という説明が超絶気になって読み直したら、「H.264/AVCのPピクチャは、表示順序で後方からのインター(画面間)予測が可能」 と書いてある箇所があった。
この一点だけでもエンコーダ/デコーダのバッファ管理は劇的に複雑化するはずだ。双予測Bフレームに加えて、これもx264は対応してない可能性が高い。
3. H.264/AVCのマクロブロック・タイプ
MEncoderでx264を使うと出て来るこの表示。x264 [info]: no need for a SARI16..4とかは後回しにするとして、ここではskipとdirectについて。
x264 [info]: using cpu capabilities Altivec
x264 [info]: slice I:385 Avg QP:18.70 size: 28704 PSNR Mean Y:46.93 U:46.57 V:47.87 Avg:46.96 Global:46.23
x264 [info]: slice P:16253 Avg QP:21.03 size: 8502 PSNR Mean Y:45.55 U:44.57 V:46.50 Avg:45.45 Global:43.94
x264 [info]: slice B:18586 Avg QP:22.10 size: 2195 PSNR Mean Y:45.77 U:44.29 V:46.61 Avg:45.55 Global:44.21
x264 [info]: mb I I16..4: 45.6% 0.0% 54.4%
x264 [info]: mb P I16..4: 27.2% 0.0% 0.0% P16..4: 56.8% 0.0% 0.0% 0.0% 0.0% skip:16.0%
x264 [info]: mb B I16..4: 1.0% 0.0% 0.0% B16..8: 17.7% 0.0% 0.0% direct:32.3% skip:49.0%
x264 [info]: final ratefactor: 20.37
x264 [info]: direct mvs spatial:75.9% temporal:24.1%
x264 [info]: PSNR Mean Y:45.680 U:44.446 V:46.573 Avg:45.521 Global:44.103 kb/s:1034.72
スキップト・マクロブロック
- MPEG-4:マクロブロックの情報を全く送らず、参照フレームの空間的に同じ位置の画素(動きベクトル=0)をそのまま符号化 画像として用いる。
- H.264/AVC:「動きベクトル=0」では無く、予測動きベクトルを用いて動き補償を行った予測信号を用いる。
ダイレクト・マクロブロック
H.264/AVCのBスライス専用のマクロブロック・タ
イプ。
動き情報を符号化せず、既に符号化済みのブロックの動き情報から予測生成するため圧縮効率があがる。
ダイレクト・モードの圧縮率は動き情報を生成する際の予測精度に依存する。
予測方式は2種類。
時間軸ダイレクト・モード:異なる動きを含む画像で、「動きの速度が一定」のケースに有効(時間的な動きの相関性に強い)。
空間軸ダイレクト・モード:似たような動きを含む画像で、「動きの速度が変化する」ケースに有効。(空間的な相関性に強い)。
動き情報を符号化せず、既に符号化済みのブロックの動き情報から予測生成するため圧縮効率があがる。
ダイレクト・モードの圧縮率は動き情報を生成する際の予測精度に依存する。
予測方式は2種類。
時間軸ダイレクト・モード:異なる動きを含む画像で、「動きの速度が一定」のケースに有効(時間的な動きの相関性に強い)。
空間軸ダイレクト・モード:似たような動きを含む画像で、「動きの速度が変化する」ケースに有効。(空間的な相関性に強い)。
と、言う事であるならば、どちらかを一律に適用するのは宜しくない。
時間が許すならdirect_pred=<1-3>の ベストチョイスは3 (Auto)という事になるだろう。
x264cliだと、、、--direct autoになる のかな?
/*/
さて『改訂版H.264/AVC教科書(インプレス)』、高いし、難解なのだけ ど、おかげでなんとか「Introduction paper to H.264/MPEG-4 AVC including the Fidelity RangeExtension.(PDF)」が読めそう。
MPEG LAのH.264/AVCライセンサーリストを見ると半分くらい は日本企業なわけで、執筆者リストに載ってるのはそうした企業の方々なわけで、
してみるとこの本、世界有数の参考書〜あ、いや教科書か〜かも知れないわけで、x264であれQuickTimeベースであれ、国内でソフト開発に手を出 される方は買っておいて損は無いと思われます。
/*/
なお、このエントリを引用したりコピペしたりすんのはいろいろマズいかもしれないのでご注意下さい。



最近はAppleの新兵教育に参加してるので動画方面の最新情報はほとんど見てないのですが、古い規格の話なので少しだけ。
スライスについては、
http://home.catv.ne.jp/dd/pub/book/mpeg.html#5.6
が参考になると思います。
スライスの縦幅は、画面の右端を越えて2行にまたがる場合を除けばマクロブロック1つの縦幅と等しく、「オーバーラップせず、ギャップを持たない」ってのは、要するにスライスを重ねずに画面内を隙間無く埋めなさいって事です。
スライスの先頭と最後のマクロブロックがnonskippedで無ければいけないってのは、フレームに例えると、動画の先頭フレームがヌルフレームじゃダメだと言ってるのと大した違いはありません。
Bi-Predictive Pictureについては、1フレームだけフラッシュが焚かれるとか、2つの別々のシーンが1フレーム毎にめまぐるしく切り替わるような映像を考えると必要性が分かりやすいと思います。
追伸:
新兵教育はなかなか厳しいですw
MPEG-1/2の理解を完全にすっ飛ばしてきたので、おかしな事書いてたら突っ込みの程、よろしくお願いします。
新兵教育は楽しそうなのですが、毎年Mac買うのもアレなのでガマンガマンです^^;