トップ → 動画作成およびエンコード関連 → h.264 Bフレーム設定に関する覚書
h.264 Bフレーム設定に関する覚書
(追記 2012-10-26)
IvyBridge世代(HD Graphics 4000搭載CPU)
でようやくインテル内臓GPUの再生支援バグが改善されたそうです。
ただこの問題が完全になくなるのは当分先の話になる気がします。
設定の中でも重要度が比較的高いと言われるBフレームの設定についてメモ。
Bフレームは圧縮率に関わる項目です。
そもそもh.264/AVCは、Iフレーム、Pフレーム、Bフレームという三種類のフレームから成り立っています。
Iフレーム(キーフレーム)は完全な1枚絵。画質は一番良いが、サイズも一番大きい。
Iフレームが多いほど高画質、低圧縮率な動画ということになる。
シーク(早送り&巻き戻し)の基準となるフレーム。
Pフレームは直前のIフレームから予測して作られるフレーム。
基準となるIフレームから変化した部分"だけ"をデータとして記録しており、
IにPを重ねることで次のフレームとして表示する。
このためIフレームよりサイズが小さく、組み込むことで動画の圧縮率が上がる。
Bフレームは直前と直後のI、Pフレームを参照して作られるフレーム。
前のフレームと後のフレームの差分だけをデータとして記録している。
必要最低限のデータしか持たず、最もサイズが小さい。
つまり、Bフレームが多いほど圧縮率が上がります。
これがh264の高い圧縮効率に関わる要素の一つということです。
■設定項目
・最大Bフレーム連続数(--bframes)
Bフレームを最大何枚まで連続して挿入して良いかの設定。
初期値3、範囲0~16。0でBフレームを使用しない。
・適応的Bフレーム挿入(--b-adapt)
最大連続数の範囲で、Bフレームに適するフレームか否かを自動で判別する。
Bフレームに適さないものはPフレームとして処理する。
無効(0)にすると常にBフレーム連続数で設定した枚数を連続して使う。
完全(2)は簡易(1)より正確な判定を行うが、Bフレーム連続数が多いほど遅くなる。
残りの項目はデフォルトから変える必要がないので割愛。
■調整した際の影響、推奨値の検討
まず、Bフレームを使うならb-adaptは完全にするのが望ましいです。むしろ必須レベル。
無効にすると、動きの多いシーンでも表現力の低いBフレームが機械的に入れられるため、画質も下がります。
これを無効にするのはbframes0の時だけでいいです。
完全にしてBフレームを増やしていくと、画質面ではプラスに働きます。
変わらない可能性もありますが、それでも画質を維持しつつ圧縮率を上げられると考えて下さい。
適正値から上げても下げても結果的に劣化する、と言われたりしてましたが、
Bフレーム挿入を完全にさえしていれば、どれだけ増やしても劣化はしないはず。
(しても人間では知覚できないレベル)
また、エンコード負荷もbframesの値に応じて1passの時間が増える…という程度なので、
オプション類の中でも費用対効果は高い方です。
デメリットとして、上げれば上げるほど再生側の負荷が増加し、互換性が低下します。
有名な話として、bframesが4以上だと、
IntelのLGA1156ソケット系のGPU再生支援で映像が乱れることがあります。
もっともこれは回避法があるので、3より増やすかどうかは投稿者の判断に委ねられてる状況です。
PS3では3より増やすと問題が発生するらしいですが、未確認。
また、動きの多い動画よりは少ない動画の方が効果が高くなります。
「動きが多い=Bフレーム入れすぎると劣化する→あまり入れるな」
とBフレーム挿入で判断されるので。
ニコ動まとめwikiでのbframesの推奨値は3~5。
互換性や効果から考えるとbframesは3が最も無難ではあるかもしれません。
アップロード前提の場合、そこまで動きが激しくなければ有効値は6くらいまででしょうか。
SD解像度の30fpsだと、6より増やしても効果は期待できません。
…が、これが60fpsとかそれ以上のフレームレートだと、bframesの伸び代は若干増えます。
60fpsでIntelのGPU支援バグとかを気にしないなら、個人的に6以上をオススメしたい。
場合によっては12も有効かもしれません。13以上はさすがに趣味の領域という感じ。
結論。
アップロード&PC視聴が目的で面倒が嫌なら、やはりBフレーム連続数は3が安定。
ニコ動の標準解像度で30fps以内なら、上げるとしても6まで。
60fps以上の動画とかなら6以上も視野に入れる。その場合も有効値はせいぜい12くらいまで。
ちなみにbframesは3の倍数が望ましいという話があったのでそうしてます(参考)
ゲーム動画とか、そこまで高画質が要求されないジャンルなら3推奨。
上げるとしたらまず3→6ですが、
それによるメリットとデメリットが釣り合ってるかどうかは…ソースにもよりますがなんとも。
9以上はガチで高画質を狙うためのもの、12から先は実験目的用…という感覚です。
ここまでこだわりたい人は、出力ログとかでBフレームの挿入結果をチェックしてみて下さい。
consecutive B-frames とか。
IvyBridge世代(HD Graphics 4000搭載CPU)
でようやくインテル内臓GPUの再生支援バグが改善されたそうです。
ただこの問題が完全になくなるのは当分先の話になる気がします。
設定の中でも重要度が比較的高いと言われるBフレームの設定についてメモ。
Bフレームは圧縮率に関わる項目です。
そもそもh.264/AVCは、Iフレーム、Pフレーム、Bフレームという三種類のフレームから成り立っています。
Iフレーム(キーフレーム)は完全な1枚絵。画質は一番良いが、サイズも一番大きい。
Iフレームが多いほど高画質、低圧縮率な動画ということになる。
シーク(早送り&巻き戻し)の基準となるフレーム。
Pフレームは直前のIフレームから予測して作られるフレーム。
基準となるIフレームから変化した部分"だけ"をデータとして記録しており、
IにPを重ねることで次のフレームとして表示する。
このためIフレームよりサイズが小さく、組み込むことで動画の圧縮率が上がる。
Bフレームは直前と直後のI、Pフレームを参照して作られるフレーム。
前のフレームと後のフレームの差分だけをデータとして記録している。
必要最低限のデータしか持たず、最もサイズが小さい。
つまり、Bフレームが多いほど圧縮率が上がります。
これがh264の高い圧縮効率に関わる要素の一つということです。
■設定項目
・最大Bフレーム連続数(--bframes)
Bフレームを最大何枚まで連続して挿入して良いかの設定。
初期値3、範囲0~16。0でBフレームを使用しない。
・適応的Bフレーム挿入(--b-adapt)
最大連続数の範囲で、Bフレームに適するフレームか否かを自動で判別する。
Bフレームに適さないものはPフレームとして処理する。
無効(0)にすると常にBフレーム連続数で設定した枚数を連続して使う。
完全(2)は簡易(1)より正確な判定を行うが、Bフレーム連続数が多いほど遅くなる。
残りの項目はデフォルトから変える必要がないので割愛。
■調整した際の影響、推奨値の検討
まず、Bフレームを使うならb-adaptは完全にするのが望ましいです。むしろ必須レベル。
無効にすると、動きの多いシーンでも表現力の低いBフレームが機械的に入れられるため、画質も下がります。
これを無効にするのはbframes0の時だけでいいです。
完全にしてBフレームを増やしていくと、画質面ではプラスに働きます。
変わらない可能性もありますが、それでも画質を維持しつつ圧縮率を上げられると考えて下さい。
適正値から上げても下げても結果的に劣化する、と言われたりしてましたが、
Bフレーム挿入を完全にさえしていれば、どれだけ増やしても劣化はしないはず。
(しても人間では知覚できないレベル)
また、エンコード負荷もbframesの値に応じて1passの時間が増える…という程度なので、
オプション類の中でも費用対効果は高い方です。
デメリットとして、上げれば上げるほど再生側の負荷が増加し、互換性が低下します。
有名な話として、bframesが4以上だと、
IntelのLGA1156ソケット系のGPU再生支援で映像が乱れることがあります。
もっともこれは回避法があるので、3より増やすかどうかは投稿者の判断に委ねられてる状況です。
PS3では3より増やすと問題が発生するらしいですが、未確認。
また、動きの多い動画よりは少ない動画の方が効果が高くなります。
「動きが多い=Bフレーム入れすぎると劣化する→あまり入れるな」
とBフレーム挿入で判断されるので。
ニコ動まとめwikiでのbframesの推奨値は3~5。
互換性や効果から考えるとbframesは3が最も無難ではあるかもしれません。
アップロード前提の場合、そこまで動きが激しくなければ有効値は6くらいまででしょうか。
SD解像度の30fpsだと、6より増やしても効果は期待できません。
…が、これが60fpsとかそれ以上のフレームレートだと、bframesの伸び代は若干増えます。
60fpsでIntelのGPU支援バグとかを気にしないなら、個人的に6以上をオススメしたい。
場合によっては12も有効かもしれません。13以上はさすがに趣味の領域という感じ。
結論。
アップロード&PC視聴が目的で面倒が嫌なら、やはりBフレーム連続数は3が安定。
ニコ動の標準解像度で30fps以内なら、上げるとしても6まで。
60fps以上の動画とかなら6以上も視野に入れる。その場合も有効値はせいぜい12くらいまで。
ちなみにbframesは3の倍数が望ましいという話があったのでそうしてます(参考)
ゲーム動画とか、そこまで高画質が要求されないジャンルなら3推奨。
上げるとしたらまず3→6ですが、
それによるメリットとデメリットが釣り合ってるかどうかは…ソースにもよりますがなんとも。
9以上はガチで高画質を狙うためのもの、12から先は実験目的用…という感覚です。
ここまでこだわりたい人は、出力ログとかでBフレームの挿入結果をチェックしてみて下さい。
consecutive B-frames とか。
- 12/17/21:00
- 動画作成およびエンコード関連
- CM:(1)
- TB:(0)
このコメントは管理者の承認待ちです
2016/07/02(土) 14:38:53 |
|
#[ 編集]
- トラックバックURLはこちら
- http://chilicore.blog46.fc2.com/tb.php/37-fcc3571e