x264cliの --longhelp はプログラマさん向けのもくじで、符号化理論の根から枝葉に向けて落ちて行く構成になっているようです。しかし、詳細はソース嫁というカンジで、これだけではなにがどういうケースで役に立つかは解りにくいと思います。
Zero 1氏がまとまったガイドを用意されているので訳してみました。
原文は Encoding H.264 using the x264 Command Line Interface ですが、rev.400番台のsharktooth版のままのようで、一部古い記述が残っており、また実際とは挙動が異なる部分もあるかと思います。訳文には可能な限り手を入れましたが、自分はマカーでめんこでらーなので保証の限りではありません。x264cliユーザの方は、下記も合わせてお読み下さい。
*オプション名、デフォルト値、指定範囲は以下に準拠しています。
$ x264 --longhelp
x264 core:55 svn-663
Syntax: x264 [options] -o outfile infile [widthxheight]
Infile can be raw YUV 4:2:0 (in which case resolution is required),
or YUV4MPEG 4:2:0 (*.y4m),
or AVI or Avisynth if compiled with AVIS support (no).
Outfile type is selected by filename
.264 -> Raw bytestream
.mkv -> Matroska
.mp4 -> MP4 if compiled with GPAC support (no)
一般的なオプションを表示
全てのオプションを表示
IDR, I, P, Bなどのフレームタイプ決定に関わるオプション群。 2/マルチパスの場合、これらはほぼ1stで決まる。
最大GOP(Group Of Pictures)サイズ。新しいIDRが強制挿入され、次のGOPが始まる前に連続するフレーム数の上限を指定する。XviDの "Maximum I-frame Interval" に相当するだろう。経験的に10秒分のフレーム数を指定してシーク単位にする人が多い。PAL @ 25 fps なら --keyint 250、NTSC @ 23.976 fps ならちょっと丸めて --keyint 240だ。一般的にGOPは--keyintの指定値を超えない限りは場面転換で始まる。だからこのスイッチを弄る価値があるのは、映像に場面転換や大きな変化が無いなが~い素材だけだ(AMVではそういうのはまず無い)。
*AMV:アニメ・ミュージック・ビデオ。全体的にこのガイドアニメ寄り。
最小GOP(Group Of Pictures)サイズ。新しいIDRが強制挿入され、次のGOPが始まる前に連続するフレーム数の下限を指定する。--min-keyintの値より短い間隔で場面転換があったら、x264は場面転換をIフレームとしてエンコードし、新しいGOPを開始しない。
範囲:1~100
追加的なIフレームを挿入する際の閾値。高くするとたくさん入るが、不必要に入ってbitが無駄になるかもしれない。例えば場面転換と言うほどでもない画面の変化など。低くするとIの挿入頻度が減るが、やりすぎると --keyint 指定値への依存度が上がって適正箇所にIが入らない。例えば場面転換に非常に大きいPフレームが入るなど(Pは先行するIかPが無いとデコードできない)。
高速だがやや不正確な場面転換検出。マルチスレッドを指定した際は自動で切り替わる。
範囲:0~16
適正範囲:3~4。--no-b-adapt使用時は0か1。
I・Pフレームの間に入るBフレームの最大連続数。
Xvidや他のMPEGエンコーダでBフレームには慣れている人は多いと思う。Xvid でこれに相当するオプションは"Max consecutive B-VOPs"。Bフレームは非常に符号化効率が良いが、たくさん使う程デコード負荷が上がる事に注意。
このオプションは適応的Bフレーム挿入をdisableにする。一般的にはオフはお奨めできない。デフォルトではx264がどこにどれだけのBフレームを使うか自動で決める。最大で何枚使うかは--bframesで決まる。
範囲: -100~100
適正範囲:0(デフォルト)
適応的Bフレームの挿入頻度に影響。高いほどBフレームを沢山使う。上限は--bframesで指定した値。低いほどたくさん間引く。Xvid でのB-VOP sensitivityに相当。-100から+100までのスライダがあると思えば良いだろう。-方向がBを減らし、+方向がBを沢山使う。推奨はデフォルトの0(またはスクリプトに書かない)。というのはB使用を強制すると画質が悪くなる事があるからだ。特に暗い領域やフレームで多い。
一部のBフレームを参照フレームに使えるようにする。他のフレームがBを参照できるようになるので符号化効率があがる。2枚以上のBフレームが必要で、デコーダー・ラグが2になる事がある。この機能はデフォルトではオフ。コマンドラインに --b-pyramid と追加すると使えるようになる。
CABACオフ(CAVLCになる)。
CABACはエントロピー符号化で、マクロブロック情報を扱うもの。
マクロブロックのヘッダ、テクスチャ、モーションベクトルといった情報をロスレスにビットストリームに圧縮する。ビットレートにして約10%の削減が可能で、アニメではもっと期待出来る。そのかわりエンコード・デコードとも負荷が増えるが、画質に影響しない事を考えると10%はとても魅力的だ。
範囲:1(複数参照オフ)~16
実用範囲:~4(15より上は非対応デコーダ有り)
参照フレームの数を指定。
これにより、P/Bフレームの予測に使う参照フレームを、デコード済みフレームをさかのぼって選べるようになる(指定した枚数まで)。
高くすると一定ポイントまで圧縮効率があがる。これは原理的にアニメに非常に効果的だ。というのは、キャラクタが喋る時に口だけが同じような動きを繰り返してあとは変化しない場面、とか、風になびく髪のように同じ動きがループするような場面はよくあるから。
インループ・デブロッキングのオフ。-f, --deblockの項参照。
デブロック・フィルタのパラメータ。AlphaC0 と Beta。
通常、インループ・デブロッキングは圧縮効率、ひいては画質の向上になる。効果が気に入らない時は単に値を下げると良い。このオプションのねらいは、Xvidのハイモーション箇所で見られたようなブロックノイズのスムーシングだ。AlphaC0 は強度、Betaは閾値。デフォルトの0:0は最適値として考えられたものだが、Sharktoothによればアニメは3:3が良いとの事。短いクリップをいくつか用意して実験すると良いだろう。
1passとか2passとかcrfとかABRとかCBRとかそうゆうの。
平均ビットレートで使うビットレートの指定。単位はキロビット/second ( kbps )。
特定のファイルサイズに収めたければ2パスを推奨。画質と特定のファイルサイズを両立できる。概ね1分以下の短いクリップでは3パスが有効かもしれない。x264の--bitrateは本質的にABR(平均ビットレート)だ。ストリーミング以外にCBR(固定ビットレート)を使う理由はあまり無いが、使う場合は--vbv-maxrateも調整すること。
Constant Rate Factor。名目上のQPに基づく1パス ABR。
*Zero1氏原文では整数指定だが、今回元にしたrev. 663では<float>、少数。
*x264cli --longhelpでは 画質ベースのVBR (名目上の QP) と表記しているが、Zero1氏原文および Handbrake wikiでは Constant Rate Factor(*レート係数固定*) と表記。いずれにせよx264ではまず使い物にならない--qp(画質固定1パス、QP固定1パスなど)の代替物として登場したもの。
ローカルビットレートの最大値。単位はkbits/second。
CBRモードを起動して、VBVバッファサイズを指定する(kbit)
VBVバッファ占有率の初期値。
x264が使う最小quantizerの指定。
高いquantizerを使ってもあまり見た目が変わらない場面でbitの浪費を抑える。XviDで最小quantizerを2にするようなものだが、H.264との量子化スケーリングの違いを忘れない事。
x264が使う最大quantizerの指定。
quantizerが自分の好みより高くなるフレームがあったらこれでキャップをかけることができる。一般的にx264のレートコントロールはとても優秀で、キチガイじみて高い/低い量子化値を使う事はあまりない。
ABRにおけるビットレートの逸脱許容範囲。1.0より大きくするとファイルサイズが目標より大きくなる事がある。同様に1.0より小さくすると目標より小さくなる事がある。
I-Pフレーム間のquantizer換算係数。
1.00でPとIに同じquantizerを使う。これは推奨しない。bitの無駄に等しいからだ。素材のAMV(*アニメ・ミュージック・ビデオ*)があまりBフレームを生成しないようだったら1.40より高くしても良いだろう。Pフレームの画質を落とす事になるが(その程度は--ipratioの指定値による)、その代わりハイ・モーション・エリアなどで画質のバラツキやブロックノイズが減り、安定する。
*ハイ・モーション・エリア:動きの多い部分。