h.264の画質についてのお話。
h.264には解像度・目的別にレベルやプロファイルが用意されているけれど、キチンと理解していないと微妙に画質劣化しますよ、「何も考えず動画を作成したらMain Profileの方が高画質ですよ」ってお話。
Main Profileの方が(High Profileより)高画質
High Profileの方が高画質だろって思っている人が多い気がするんだけど、実際にはMain Profileの方が(ほんの少しだけ)高画質になる場合が殆ど。
High ProfileはHD動画を再生する為の規格で、再生負荷を軽くするための量子化が行われているので、Mainと比較すると色滲みが大きい。
比較画像(x264で作成。300%に拡大)(カーソルを乗せると画像が切り替わります)
▲輪郭回りのジャギーや、審判と背景の色滲みに注目
はっきり言って、違いは僅かです(^_^;
上記はMain/Highプロファイル以外、全て同じ設定でx264にてエンコしたもの。
(つまり、Highプロファイルを利用しているけれど、使用するパラメーターはMainまでで使えるものに限定している)
ほんの僅かな差だけど、High Profileはジャギーや色滲みが発生。Main Profileの方がソースに忠実に、かつ美しく再現してくれている。
- こうして拡大してみなければ「全然変わんないじゃん」レベル
SD以下の動画だと気になるレベルでにじむ事が時々ある。 - しかしHD動画になるとこんな違いは全く気にならない。
(ってか普通、こんな所まで画質を意識する事は無い。) - High ProfileはHD動画を意識して設定されたプロファイルなので、High Profileの方が再生負荷は軽くなる。
- High Profileの方が扱える色空間や画像解析用パラメータなどが多彩。その辺まで理解して動画を作成するならば、High Profileの方が高画質になる。
- 動画変換する際に、変換速度が速くなるようにセッティングを煮詰めた場合は、Main Profileの方が高画質になる。
h264の動画サイズ/ビットレートとレベルの関係
H264の画質や動画サイズを指定するにあたり、もう一つの大切な項目「レベルの指定」について。
こちらは、動画サイズに応じてレベルを指定しておけばOK。
Level | 最大マクロブロック | 最大動画ビットレート (VCL) | 解像度例@ フレームレート (ストアされる最大フレーム数) | ||||
---|---|---|---|---|---|---|---|
秒あたり | フレームあたり | BP, XP, MP (kbit/s) | HiP (kbit/s) | Hi10P (kbit/s) | Hi422P, Hi444PP (kbit/s) | ||
1 | 1,485 | 99 | 64 | 80 | 192 | 256 | 128×96@30.9 (8) 176×144@15.0 (4) |
1b | 1,485 | 99 | 128 | 160 | 384 | 512 | 128×96@30.9 (8) 176×144@15.0 (4) |
1.1 | 3,000 | 396 | 192 | 240 | 576 | 768 | 176×144@30.3 (9) 320×240@10.0 (3) 352×288@7.5 (2) |
1.2 | 6,000 | 396 | 384 | 480 | 1,152 | 1,536 | 320×240@20.0 (7) 352×288@15.2 (6) |
1.3 | 11,880 | 396 | 768 | 960 | 2,304 | 3,072 | 320×240@36.0 (7) 352×288@30.0 (6) |
2 | 11,880 | 396 | 2,000 | 2,500 | 6,000 | 8,000 | 320×240@36.0 (7) 352×288@30.0 (6) |
2.1 | 19,800 | 792 | 4,000 | 5,000 | 12,000 | 16,000 | 352×480@30.0 (7) 352×576@25.0 (6) |
2.2 | 20,250 | 1,620 | 4,000 | 5,000 | 12,000 | 16,000 | 352×480@30.7(10) 352×576@25.6 (7) 720×480@15.0 (6) 720×576@12.5 (5) |
3 | 40,500 | 1,620 | 10,000 | 12,500 | 30,000 | 40,000 | 352×480@61.4 (12) 352×576@51.1 (10) 720×480@30.0 (6) 720×576@25.0 (5) |
3.1 | 108,000 | 3,600 | 14,000 | 17,500 | 42,000 | 56,000 | 720×480@80.0 (13) 720×576@66.7 (11) 1280×720@30.0 (5) |
3.2 | 216,000 | 5,120 | 20,000 | 25,000 | 60,000 | 80,000 | 1,280×720@60.0 (5) 1,280×1,024@42.2 (4) |
4 | 245,760 | 8,192 | 20,000 | 25,000 | 60,000 | 80,000 | 1,280×720@68.3 (9) 1,920×1,080@30.1 (4) 2,048×1,024@30.0 (4) |
4.1 | 245,760 | 8,192 | 50,000 | 62,500 | 150,000 | 200,000 | 1,280×720@68.3 (9) 1,920×1,080@30.1 (4) 2,048×1,024@30.0 (4) |
4.2 | 522,240 | 8,704 | 50,000 | 62,500 | 150,000 | 200,000 | 1,920×1,080@64.0 (4) 2,048×1,080@60.0 (4) |
5 | 589,824 | 22,080 | 135,000 | 168,750 | 405,000 | 540,000 | 1,920×1,080@72.3 (13) 2,048×1,024@72.0 (13) 2,048×1,080@67.8 (12) 2,560×1,920@30.7 (5) 3,680×1,536@26.7 (5) |
5.1 | 983,040 | 36,864 | 240,000 | 300,000 | 720,000 | 960,000 | 1,920×1,080@120.5 (16) 4,096×2,048@30.0 (5) 4,096×2,304@26.7 (5) |
あとがき
High ProfileはHD動画用。SD画質の動画をHigh Profileで作成する意味は殆ど無い。
High Profileで高詳細な動画を作ろうと思ったらそれなりに時間のかかるエンコ設定が必要。
この二つは覚えておこう。
h264の動画エンコで、「High Profileにしたい」ってこだわっているんだけど、それと同時に「変換速度を少しでも速くしたい」って各パラメータを必死で弄っている人って結構多い気がする。この辺サクっと割り切ってMain Profileで動画作成すると、案外簡単に「高速エンコできて、高詳細で容量の小さい動画」を作成できる設定が見つける事ができる。
って言うか「そこまで高速エンコ設定にするならMain Profile使いなよ」って場合が非常に多い。
再生負荷とのバランスを気をつけないとダメなんだけど、HD画質の動画を作成する場合でも、Main Profileは結構使えますよ。ってなお話でした。
関連事項:2012年1月追記
上で書いた内容は、かなり大雑把で良い加減なものです。
関連した話題で他サイトの本格的なものとしては、
・猫科研究所さんの[x264でp4x4を使用しない方がよい理由]
・まるも研究所さんの[ダイアリー2007-6 x264 [8] --partitions]
などのマクロブロックに関する考察が非常に面白いです。(リンク先ではマクロブロック=MBと略語表記されている)
とりあえず私は、SD画質(Level3.0)以下ならば、p4x4オプションを有効にしてさらに高画質設定にしてエンコードする事も可能かな、と思っています。
SD以下の小さな画像とHD画質の大きな画像では、適切なマクロブロックの大きさが異なるのは事実その通り。あと読み進めていくと、最近のx264エンコーダーの --preset slower 以上では、p4x4が再び採用されているっぽい記述あり。
う~む、2008年時点でp4x4が見直されていたとは。
(最近、と言いつつもリンク先情報は2008年のもの。また私はMedium以上の設定でエンコする事は殆ど無いのでp4x4についての知識は皆無でした。 )