「ICZ さんからの抜粋です。


2005/02/12

x264 - H264/AVC encoder

※最新版は少し設定項目が違います。 

Config
 
Single Pass Bitrate 1パスVBR?

 

Single Pass - Quantizer 量子化行列ベースでの圧縮です。

Single Pass-QuantizerがDivXでいうトコロのQB(品質)でこの値が20で従来のDivXと同程度の画質で容量3割(Bフレームなし)〜5割(Bフレーム有り)減です。

20を基準に±5かな、実用的なのは。25までいくと20の半分くらいまで容量減りますが、画質は厳しいです。 ちなみに数値が高いほど高圧縮です。

 

Multipass MultipassはFirstpassが1パス目、Nth.passで1パス目の結果を元にビットレートを最適化して配分します。

Upgrade statsfileにチェックで2パス目の情報も記録でき、それを元にさらに最適化した3パス目のエンコードも可能です。これを積み重ねるとビットレートの配分がより効率よくなります。4パス以上は 人間の目では画質の差がわかないと思いますが。

あとMultipassモードを使う時の注意として1パス目で設定していたMax B-framesの数値を2パス目以降で変えてエンコードしようとするとエラーで落ちます。ログを見るとI、B、Pフレームの割り振りがちゃんと書いてあり、それと辻褄が合わなくてエラーが出るのだと思われます。で、エラーが出て落ちた場合、解析用のログファイルが壊れているので壊れてしまったnパス目のログファイルを削除しないと延々とエラーで落ちることになります。 それとログファイルを設定した場所がなにげに以前と変わってたりする事があるのもエラーの原因です。1パス目からやりなおすなら 無問題な事ですが。

 

自分の場合、マルチパスでエンコードする時のビットレートの目安はAdvancedでMax B-framesを1、B-frames prediction modeをSpatialに設定して、SPQ(Single Pass Quantizer) 20でエンコード。その容量 から9割あたりまでが高画質モード。7割あたりがギリギリラインとしています。7割あたりを狙う場合はAdvancedの設定を高圧縮化設定に変えてチャレンジです。

100kbpsかわると雰囲気がガラっとかわります。

 

 

Advance
 
CABAC Context-based Adaptive Binary Arithmetic Coding の略

H.264の特徴の一つ、高圧縮化の為の技術です。普通はONです。

 

Deblocking filter プラス方向にするほど画像がノッペリし、マイナス方向に入れると細部を潰さないように圧縮します。低レートで行くならプラス、高レートで高画質を狙うなら切るかマイナス。0がバランスよいと思います。

Strengthが強さでThresholdが閾値(敷居値)です。そのまんまです。このフィルターをNRと例えるなら、閾値はノイズ判定で強さはノイズをすり潰す強度って感じ。最初は両方同じ数値に設定して±6段階のフィルターと見たほうが理解しやすいかも。

 

Max B-frames 増やすと容量対画質がよくなりますが、今のところ2以上は暗い画面でのフェードが破綻しやすく、ブロック化して見苦しくなります。 また、増やしすぎると画質低下及び容量増になってしまうので1か2か3まで。映像が動かないソースだと増やすだけ圧縮率が高くなりそうですが 。

どんな映像にも対応出来る無難な設定は1だと思います。

 

B-frames prediction mode デフォルトでTemporal(3D)ですが、このままだと同様に暗い画面でのフェードが前フレームに引きずらるような形でブロック化して見苦しくなります。Spatial(2D)ではそういう現象が少ないです。 それ以外のシーンだと画像の安定感でTemporalがSpatialより極微小に上に感じます。Bフレームを2以上増やすならSpatialよりTemporalが安定します。

イメージとして3DNR式か2DNR式か、みたいな感じ。

Spatialが無難かな。

More Encord Settings MaxがIフレームを最大間隔でどれくらいで入れるか、Minが最小でどれくらいの間隔で入れるか。

Maxを大きくすると、Iフレームを入れない間隔が大きくなります。Iフレームが入らないとシークや編集が大変になります。シークや編集はどうでもいいからビットレートを押さえたいならこの値を大きく、再生時にサーチを頻繁にしたいなら押さえると良いでしょう。普通はデフォルトで十分なハズです。

Minを大きくすると、シーンチェンジが連続するシーンがあった時にもIフレームを入れずに行こうとします。小さくするとシーンチェンジが連続する個所でIフレームをどんどん入れようとします。ビットレートを押さえたいならココを大きく、ビットレートを十分に使って画質をよくしたいならココを小さくすると良いです。ビットレートを十分に使って画質を良くする目的なら1〜5くらいが良いと思います。というか1でしょうね、その場合。

FouCCはよほどの理由が無いなら弄らないほうが良いです。
Retecontrol

 

動画全体のビットレート配分を設定するところ。

画質と容量に直結するのはB-flames reductionで、容量を押さえたい時はB-flames reductionを上げたらいいです。低ビットレートなのにココの圧縮率が低いままだとIフレームやPフレームの画質がBフレームに引張られて低下します。それに連動するのですが、綺麗な所は綺麗なのに時々汚いシーンがあるなぁという時は、ビットレート配分が極端になってたりするのでKeyframeboostとBitrate variabilityの配分を考えます。

基本的にデフォルト値で問題無いと思います。
 

Keyframeboost キーフレームをどれだけ割り振るか。シーンチェンジ検出の補助かな。
B-flames reduction Bフレームでどれだけ圧縮を強くするか。
Bitrate variability 最大ビットレートと最小ビットレートの振幅幅を どの程度にするか。

 

Macroblock Partitions 一枚の絵をどれだけの精度(マスの大きさ)で検索してビットレートを配分するか設定するところ。

数字が大きいと大雑把に検索して、数字が小さいと細かく検索します。

数字が大きいものだけチェックする、もしくは全部外すと大雑把に検索するので細かい所で見るとちょっと雑ですが、一枚絵全体としてはバランスがとれてます。バランスは上で緻密さは低

数字が小さい物だけチェックすると細かい所は緻密になってますが全体としてみると緻密なところとそうでないとこの差が大きくなります。バランスは低で緻密さは大

数字が大きのと小さいのをチェックすると、全体のバランスをとりつつ、緻密なところは緻密に なりますが、緻密さを保とうとする方が強くややバランスは劣ります。そして、検索が高精度になる分エンコードに時間がかかります。バランスは中 の上で緻密さは大。

チェックを付けるほどブロック単位での画素やビットレート配分が正確になりパッと見の画質がビシッとしますが、その分、ビットレートがいらないと判断される個所と必要と判断された個所の画質差が大きくなり、シーンによってはアンバランスさを見出すかもしれません。ここも暗所のフェードが厳しくなる一因となります。

ここはチェックの数だけエンコードが遅くなり、チェックの数だけ2Dのビットレート配分が良くなり、容量も極わずかに減ります。が前述のアンバランスさの一因にもなります。難しいトコロです。やってみて自分が気に入る設定を試すしかないです。

ちなみにここを弄ったとしての変化は10000が9941ぐらいになる程度。圧縮が重いと感じたら外し、外して気に入らない画質だったら付け足して行けば良い、位の感じでいいとおもいます。

十分なビットレートを配分して高画質を狙うなら全部チェックで問題なし。画像が破綻しだすかどうかギリギリのラインまでビットレートを下げた場合に吟味すると良いでしょう。

 

 
  他にループフィルタとかあるはずですが、何故か設定個所ないですね。OFFにする意味がないのですでにONとして組み込まれてるのかな。
 
 このコーデックは、画像が破綻しそうになる前にまず色が薄くなっていきます。限界まで薄くなると破綻していきます。そこでBフレームの圧縮率を高めるとまた破綻しなくなり、画質が持ち直します。そこからさらに破綻するギリギリまで圧縮率を落とすと、一枚絵の中でびしっとする個所とぼやけている個所が出てきます。そこでMacroblock Partitionsのチェックを外して行くと全体的にバランスがとれたぼやけ具合になります。さらに落としていくとモスキートが出だすので、Deblocking filterを全開にします。またちょっと持ち直します。その状態でエンコードすると今度はフレーム事に綺麗なシーンとそうではないシーンが出て来ます。そこでKeyframeboostとBitrate variabilityを調整して動画としてバランスが取れているように調整します。さらにビットレートを落としていくと画像が破綻してくるので Max B-framesの数値を上げ、B-frames prediction modeをtemporalにしてBフレームの脈動を押さえつつビットレートを稼ぎに行きます。そこまで調整して破綻し出すとそれはコーデックの限界という事になります。※これは調整の一例でしかないので方法は前後出来ます。

というように設定全てが画質に繋がります。ちなみにBフレームのトコが1番響きます。

 

 なおこれは、H.264の技術的な知識が無い状態で、5秒程度のサンプルを設定かえてエンコードし、その変化した映像と容量とマルチパス用ログの内容を見て書いた感想なので、各項目の説明がH.264の仕様として正しいのかは自信無し。

 



「動画関連リンク集」から抜粋

ビデオ圧縮コーデック「H.264/AVC」より

マルチパス方式でエンコード出来たり、Bフレームを使える用になったのでさらに使い勝手と容量対画質の向上が望めるようになりました。

Single Pass-QuantizerがQB(品質)でこの値が20前後で従来のDivXと同程度の画質で容量3割(Bフレームなし)〜5割(Bフレーム有り)減です。

MultipassはFirstpassが1パス目、Nth.passで1パス目の結果を元にビットレートを最適化して配分します。じつはUpgrade statsfileにチェックで2パス目の情報も記録でき、さらにそれを元にさらに最適化した3パス目のエンコードも可能です。これを積み重ねるとビットレートの配分がより効率よくなります。3〜4パス以上は画質かわならいと思いますが。

あとMultipassモードを使う時の注意として1パス目で設定していたMax B-framesの数値を2パス目以降で変えてエンコードしようとするとエラーで落ちます。ログを見るとI、B、Pフレームの割り振りがちゃんと書いてあり、それと辻褄が合わなくてエラーが出るのだと思われます。で、エラーが出て落ちた場合、解析用のログファイルが壊れているので壊れてしまったnパス目のログファイルを削除しないと延々とエラーで落ちることになります。 それとログファイルを設定した場所がなにげに以前と変わってたりする事があるのもエラーの原因です。1パス目からやりなおすなら 無問題な事ですが。

 

自分が試した中で特に気になったところはAdvancedタブの中のMax B-framesと B-frames prediction mode。

1 Max B-framesは増やすと容量対画質がよくなりますが、今のところ2以上は暗い画面でのフェードが破綻しやすく、ブロック化して見苦しくなります。 かつ、増やしすぎると画質低下及び容量増になってしまうので1か2か3まで。無難は1です。

2 B-frames prediction modeは、デフォルトでTemporal(3D)ですが、このままだと同様に暗い画面でのフェードがブロック化して見苦しくなります。Spatial(2D)のほうがそういう 現象が少ないです。 それ以外のシーンだと画像の安定感でTemporalがSpatialより極微小に上に感じます。Bフレームを2以上増やすならSpatialよりTemporalが安定します。

3 Single Pass-Quantizer 20で試す限りBフレーム有りとBフレーム無しではDivX4.12のQBで100MのものがBフレーム無しで70M、Bフレーム有りで50M。画質はDivX4.12のそれと同程度以上。

4 かつ、Bフレーム1とBフレーム2での容量差は3パーセント以下、B-frames prediction modeがTemporalとSpatialではTemporalは容量が極々微小にSpatialに劣ります。

5 かつ、MultipassモードでSingle Pass-Quantizer 20と同程度の容量に圧縮した時の画質はBフレーム有りと無しでほとんど見分けつかない、ので、3の結果よりBフレーム有り版はさらに25パーセントほど容量を落としても現在の画質を維持できるはず。

という結果から

Max B-frames 1
B-frames prediction mode Spatial

を基本設定としてオススメします。

Single Pass-Quantizer を使うなら20前後で様子を見て決めるとよいかと。

 

Deblocking filterはプラス方向にするほど画像がノッペリし、マイナス方向に入れると細部を潰さないように圧縮します。低レートで行くならプラス、高レートで高画質を狙うなら切るかマイナス。

RetecontrolではKeyframeboostがキーフレームをどれだけ割り振るか、B-flames reductionはBフレームでどれだけ圧縮を効かすか、Bitrate variabilityは最大ビットレートと最小ビットレートの振幅幅をきつくするか、でしょうか。とりあえずはデフォルトのままでいいとおもいます。

この中で特に画質と容量に直結するのはB-flames reductionで、容量を押さえたい時はBitrate variabilityを上げたらいいです。低ビットレートなのにココの圧縮率が低いままだとIフレームやPフレームの画質がBフレームに引張られて低下します。それに連動するのですが、綺麗な所は綺麗なのに時々汚いシーンがあるなぁという時は、ビットレート配分が上手くいってなかったりするのでKeyframeboostとBitrate variabilityの配分を考えます。

Macroblock Partitionsはチェックを付けるほどブロック単位での画素やビットレート配分が正確になりパッと見の画質がビシッとしますが、その分、ビットレートがいらないと判断される個所と必要と判断された個所の画質差が大きくなり、シーンによってはアンバランスさを見出すかもしれません。ここも暗所のフェードが厳しくなる一因です。

ここはチェックの数だけエンコードが遅くなり、チェックの数だけ2Dのビットレート配分が良くなり、容量も極わずかに減ります。が前述のアンバランスさの一因にもなります。難しいトコロです。やってみて自分が気に入る設定を試すしかないです。

ちなみにここを弄ったとしての変化は10000が9941ぐらいになる程度。圧縮が重いと感じたら外し、外して気に入らない画質だったら付け足して行けば良い、位の感じでいいとおもいます。

 

ちなみに、全ては実際に試して変化した映像を見て自分が感じた事なので理論的なところで正確でない可能性が。そういうのでよければ参考にどうぞ、程度な感じ。

なお、エンコードは可能ですが、デコードは出来ない様子。デコードにはffdshowが必要ぽい。

とりあえず2005/02/07版での話。