※2007/8/2で抽出すると全件を1ページに読み込みます。
x264cliの--longhelpに比べると、MEncoderのman pageはいくぶんユーザー寄りで、いちど順番に読めばそれなりに使えるようになると思います。x264cliに比べると利用できるオプションが少ないの ですが、省かれているものの大半は実験目的で実用性が薄いもののようです。特に面倒な --sar が自動計算なのは便利です。いや目的次第では困るのかな?
記事タイトルの見方:
オプション名=指定値 [デフォルト値,使用条件] (備考)
*指定値の種類備考:
平均ビットレートの指定。単位kbit/sec (default:off)。
ローカルビットレートは変動するため、非常に短いムービーでは指定値とかけ離れた値になる事がある(ratetol参照)。
このオプションとvbv_maxrateを同時に使うと固定ビットレートになるが、画質は著しく劣化する。
Pフレームに適用するquantizerの指定。
IフレームとBフレームに適用するquantizerはこの値を元に ip_factor と pb_factor が少しずらして決める。
低い数値ほどビットレートは高く、素材画質に忠実。0でロスレス。
H.264の量子化はMPEG-1/2/4とは異なる事に注意:
H.264の量子化パラメータ (QP)は対数尺を用いる。 換算すると概ねH264QP = 12 + 6*log2(MPEGQP)。例えば、MPEGのQP=2 は概ね H.264 の QP=18となる。
固定画質モードのenable。値は画質を指定するもので、概ねQPに近い。
ビットレートベースのモード同様、各フレームごとに複雑さに応じて異なるQPを使う。
2または 3パスモードの指定。
最適なビットレート配分と全体の画質向上の為には2か3パスエンコードを推奨。
1 1st パス
2 2nd パス (または2パスエンコード)
3 Nth パス (3pass エンコードの 2nd と 3rd パス)
1st pass(pass=1)は映像の統計を取ってファイルに書き込む。CPU負荷の高いオプションは使わなくて良いが、デフォルトでonのものは使う事。
2nd pass(pass=2)はstats(統計)ファイルを読み込み、これを基にビットレート配分をコントロールする。
3passモードでの2nd("pass=3"と指定する。タイプミスではない。)は両方を行う。最初に統計を読み込み、上書きする。CPU負荷の高いオプションを除き全てのエンコードオプションが使える。
3rd pass(pass=3)は2nd passと同じだが、2nd passの統計を使用する。CPU負荷の高いオプションを含めて、全てのエンコードオプションが使える。 1st pass はABRでも固定quantizerでも良いが、quantizerを推測する必要がないので、ABRの方が望ましい。
後続のパスはビットレートを指定するABRでなければならない。
高速1st passモード。
2(以上)パスエンコードの1stパスは、取るに足りない、あるいは、最終出力品質に影響しないオプションを切って高速化できる。
Level 1 の1stパス速度は最大2倍。最終出力のグローバルPSNRは等速1stパスと同じ。
Level 2 は最大4倍速。最終出力のグローバルPSNRは概ね +/- 0.05dB。
IDRフレームの最大間隔。
大きい値の方がbitが節約できるので品質が向上するが、シークの精密さと引き換えになる。
MPEG-1/2/4とは違って、H.264はkeyintを大きくしてもDCT driftで苦しむ事が無い。
IDRフレームの最小間隔を指定。
この最小間隔の中にシーンチェンジが含まれた場合、エンコードはIフレームとして行うが、新しいGOPを開始しない。
H.264では、Iフレームは必ずしもclosed GOPに束縛されない。
なぜなら、Pフレームを直前より前のフレームを基に予測しても良いからだ (framerefも参照)。この為に、Iフレームは必ずしもシーク可能では無くなった。
IDRフレームは、後続のPフレームに、自分より前にある全フレームを参照禁止にする。
Iフレーム挿入を決断する際の積極性。
scenecutの値が低いと、このコデックはしばしばkeyint間隔よりも大きな間隔でIフレームを入れてしまう。
scenecutの値が適切なら Iフレームはもっと良い位置に挿入される。
大きすぎる値を使うとIフレームを必要以上に入れてしまい、bitが無駄になる。
-1 は自動シーンカット検出を無効にする。従ってIフレームは、たとえ場面転換があろうとも、keyint frame間隔毎にしか挿入されない。これはオススメできない。なぜなら、この場合に場面転換地点で生成されるPフレームはIフレーム同然にサイズが大きくなるのでビットレートの無駄だし、その上"keyint counter"にもリセットがかからないからだ。
P/Bフレームは予測の際に自分より前のフレームを参照フレームに使う。
H264/AVCでは直前よりも前のフレームを参照フレームに使う事ができる。
このオプションはその際、最大でどのくらい前のフレームを参照フレームとして使えるかを指定するもの。
アニメには効果的だが、実写では6程度を境に効果が急激に低下する。
デコードの速度には影響しないが、必要メモリ量が増える。
デコーダによっては最大15までしか受け付けない。
IとPフレーム間でのBフレームの最大連続数。
bframes=<0-16>で指定された最大Bフレーム数の範囲で、いつ、どれだけの数のBフレームを使うか自動的に決断する。nob_adaptの場合、前述の bframes(デフォルト0)の最大Bフレーム数を使用する。
*このオプションがBは不適切と判断した場合、Pになる。
b_adaptの「決断力」の強さを設定する。高い程沢山のBフレームを使う。
Bフレームを参照フレーム~他のフレームが予測に使う~に使うことを許可する。
例えば、連続したBフレームが3個あるとしよう。
I0 B1 B2 B3 P4
b_pyramidオプション抜きの場合、 BフレームはMPEG-1/2/4と同じパターンに従う。つまりこれらは
I0 P4 B1 B2 B3
の順番で符号化され、全てのBフレームは I0 とP4 をベースに予測される。
b_pyramidオプション有りの場合、これらは
I0 P4 B2 B1 B3
の順番で符号化される。B2は上記と同じだが、B1は I0 と B2 を、B3 は B2 と P4 をベースに予測される。
この結果、速度低下抜きで圧縮率が僅かに向上する。
しかしながら、このオプションはまだ実験段階だ。:チューニングは未熟で必ずしも効果があるとは限らない。
オプションのbframesは2以上でなければならない。
デメリット:increases decoding delay to 2 frames.
第一のパラメータは AlphaC0 (default: 0)。これはH.264のイン-ループ・デブロッキング・フィルタの閾値。
まず、このパラメータの値に従ってデブロックを使うか否かを決める。次に、このパラメータはフィルタを適用するエッジ部分の差の閾値に影響する。プラスの値にする事でブロックノイズが減るが、スミアが増える。
第二のパラメータはBeta (default: 0)。これはディテイルの閾値に影響する。
非常にディテイルの細かいブロックにはフィルタを掛けない。というのはこのフィルタが使うスムージングはブロックノイズよりも目立つからだ。
このフィルタはデフォルト値でほとんど常に最良の結果になるので、そのまま弄らないか微調整にとどめるのがベストだ。しかし素材になんとかしたいほどのブロックノイズやノイズがあるなら、少し強めにしても良いだろう。
*スミア:絵をこすったような滲み。細かいディテイルが潰れる。
エンコード、デコードとも多少遅くなるが、ビットレートは10~15%下がる。
デコードの速度を求めるので無い限り、オフにしない方が良い。
*Context-Adaptive Binary Arithmetic Coding = 適応2進法算術符号化
quantizerの最小値。10-30が適正範囲のようだ。
quantizerの最大値。
フレーム間でquantizerが増加/減少し得る最大値。
平均ビットレートにおける変動幅の許容値(特定の単位は無い)。
推奨値:1~4。
時間軸に沿ってビットレートがどのように変動し得るかの指定。
低い値はビットレート変化を押さえる。映像のストリーミング品質を向上し、コデックが複雑な場面に対応する能力を減らす。
高い値はビットレート変化を増やす。複雑な場面への対応能力を向上し、ビデオのストリーミングでの信頼性を減らす。
0% に指定すると、CBRになる。100% では場面の複雑さに応じて激しくビットレートが変化する (完璧な CQP または"quantizer curve compression")。
ローカルビットレートの最大値。単位はkbits/second。
*x264は1passでもストリームを平均化区間に分割してABRを行う。ローカルビットレートとは、この平均化区間内のビットレートと思われる。
vbv_maxrateで使う平均化区間。単位kbits。vbv_maxrateを使うときは必ず指定する事。
イニシャルでのバッファ占有率。vbv_bufsizeの係数。
I-Pフレーム間のquantizer換算係数。
Pフレーム-Bフレーム間のquantizer換算係数。
quantizerの圧縮。低い数値にするとビットレートの変動幅が低くなる。=画質の変動幅が大きくなる。
高い数値にするとquantizerの変動幅が低くなる。=画質の変動幅が小さくなる。
*「x264コデックでのエンコード」では、0.7-0.8を使う人が多いとしている。
curve compressionの前にQPのバラツキを抑止。
curve compression[※1]の前に、予測されたフレームの複雑さに時間軸ぼかしフィルタ[※2]をかける。
低い数値にすると、必要に応じてquantizer値は急激に変化する。
高い数値は急激な変化を許さず、なだらかな変化しか許さない。
cplx_blurはIフレームが後続のPフレームに近い画質になる事を保証する。そして複雑なフレームと単純なフレームが交互にあっても~例えばfpsの低いアニメーションなど~、不安定なquantizerを適用してビットを無駄にしない。
[※1]:意味不明
[※2]: Temporal blur。映像を直接ボカすのではなく、適用するquantizer値を平均化する、という程の意味だろう。
curve compressionの後にQPのバラツキを抑止。
curve compression[※1]の後に、フレームの複雑さを見積もって時間軸ぼかしフィルタ[※2]をかける。
低い数値にすると、必要に応じてquantizer値は急激に変化する。
高い数値は急激な変化を許さず、なだらかな変化しか許さない。
cplx_blurも参照。
特定のパート(エンディングやクレジットなど)を指定して画質を調節する。
各ゾーンは
<start-frame>,<end-frame>,<option>
option では以下が指定できる。
q=<0-51>:quantizer
b=<0.01-100.0>:ビットレート乗数
NOTE:ここで指定したquantizer値は厳格に強制されるわけではない。レートコントロールの計画段階に影響するだけで、オーバーフロウ補償やqp_min/qp_maxの適用対象から外れる事は無い。