その他のx264のオプション


これまでx264cliのオプションの説明は最低限しかしていなかったので、ここでまとめて知っておいた方が良いと思われるコマンドラインオプションを説明しておきます。

2passエンコードの方法

これまで紹介してきた-qオプションは「固定量子化」を意味します。このオプションは1パス専用です。指定した値に従って品質は固定されますが、最終的なサイズは予想できません。平均ビットレートエンコードしたい場合は-qではなく-Bを指定します。ですが、1回のエンコードでは平均ビットレートが上手く定まらないので2回エンコードすることにより、この問題を解決します。

x264コマンド例

x264.exe --level 4.2 --pass 1 -B 4000 --stats "Movie_2pass.log" -o "Movie.mp4" --threads auto --progress "infile.avs"
x264.exe --level 4.2 --pass 2 -B 4000 --stats "Movie_2pass.log" -o "Movie.mp4" --threads auto --progress "infile.avs"

ポイントは--passオプションを指定することと、-Bオプションで固定のビットレートを指定することです。--passオプションの値の意味は--pass 1がファーストパス、--pass 2がラストパス、--pass 3がNパスになります。3パス以上エンコードしたい場合は、--pass 1 → --pass 3 → --pass 2の順でエンコードする必要があります。--pass 3はログファイルの更新を行いますが、--pass 2はログファイルの更新を行いません。

エンコード回数は2パスで大体狙ったサイズになりますが、もし気に入らない結果になってしまったら3パス、4パスとエンコード回数を増やしてみましょう。

-Bオプションで指定したビットレートの単位はkbpsになります。2回エンコードすることで、最終的に作成されるファイルの平均ビットレートはここで指定したビットレートにかなり近いものになります。また、ビットレートの割り振りもより最適なものになるので、最終的に出来上がるファイルサイズが1パス目とあまり変わらない場合でも画質の向上が期待できます。

--statsオプションはnパスエンコードのログファイルを指定します。このオプションを指定しない場合は"x264_2pass.log"というファイルがデフォルトになります。.logファイルは無ければ自動的に作成されるので、わざわざ自分で用意する必要はありません。

2パスエンコードは動画を狙ったサイズにしたい場合や、より高画質にしたい場合に使用します。

--crfオプション

こちらのオプションは-qオプションに非常に良く似ています。x264のヘルプを見ると、「Quality-based VBR (nominal QP)」とあります。直訳すると品質ベースのVBR(名目上のQP)です。

x264コマンド例

x264.exe --level 4.2 --crf 18 -o "Movie.mp4" --threads auto --progress "infile.avs"

値は-qと同じく、小さい方が品質が良くなります。-bと併用できます。なお、不動小数点も指定できます。
--crfはQP値を変動させます。なので、--qpminや--qpmax、--qpstepといったオプションが有効になります。このオプションを指定すると、ビットレートの変動が-qを指定したときよりもゆるやかになるようです。-qを指定すると、動きが緩やかだとビットレートが極端に低く、動きの激しいシーンだと極端にビットレートが上がったりします。-qは品質を固定しますが、ビットレートの変動が極端過ぎるように感じます。
ある程度ビットレートを安定させたい場合や、動きの少ないシーンでもそれなりにビットレートを割り振りたい場合に--crfを指定すると良いと思います。

Bフレームを指定する

Bフレームとは前後のI、Pフレームを参照する特殊なフレームです。MPEG4では主にIフレーム、PフレームBフレームという3種類のフレームが存在しています。Bフレームを指定しない場合はI、Pフレームしか使用しません。Iフレームは固定の画像で、Pフレームは直前のフレームを参照するフレームです。

x264コマンド例

x264.exe --level 4.2 --crf 18 -b 3 -o "Movie.mp4" --threads auto --progress "infile.avs"

Bフレームは-bオプションで指定します。ここで指定した数字がBフレームの枚数です。上記の例ではBフレームを3枚と指定しているので、フレームの順序はIBBBPとなります。Bフレームは前後のフレームを参照して生成されるフレームなので、この枚数が多いほど容量が縮むことが期待できます。但し、動きの激しい動画でBフレームを多く指定しても逆効果です。

Bフレームは動画の性質に合わせて効果的な枚数を指定する必要があります。どの程度の枚数を指定すれば良いかは経験を積んで知る他にありません。まあ普通の動画ならば2か3を指定しておけばそんなにおかしなことになることは無いと思います。

--cqmオプション

量子化マトリクスを指定します。MPEG2やXviDエンコードしている方にはおなじみだと思います。量子化マトリクスとは何ぞや?というと8x8のマトリクスがあるのですが、これに係数を設定します。マトリクスの意味は何なのかというと、左上が低周波成分で右下が高周波成分になります。多分これだけでは具体的なことがあまりよく分からないと思いますが、特に分からなくてもやっていけます。何故かと言うと、おすすめの量子化マトリクスが既に用意されているからです。初めから用意されているのはflatとjvtの2つですが、おすすめなのがjvtです。これを指定するためのコマンドは下記になります。

x264.exe --level 4.2 --q 20 --cqm jvt -o "Movie.mp4" --threads auto --progress "Infile.avs"

--cqmオプションを指定しない場合は量子化マトリクスはflatになります。flatは全周波数成分に対して一定の係数を指定します。flatよりjvtの方が細部がはっきりしたものになるらしく、普通はこちらを指定します。量子化マトリクスについては別途調べて頂くとより詳しいことが分かると思います。


今後も増えるかも・・・


前回 「MP4ファイルの字幕の付け方
次回 「x264とMP4Boxのヘルプの表示方法


(更新日:2007/12/9)