ニコニコ動画 x264cliを使用したH.264エンコードについて (2010/01/16版)

ニコニコ動画には、H.264(形式)でエンコードした動画をアップロードできます。…というわけで適当にエンコード設定のまとめ。あまりにも適当すぎて残念すぎる。

ここではタイトル通り、x264cliを使用したエンコードについて記述します。
また、AAC音声のエンコード、および映像と音声の結合についても記述します。
ここで扱うツールとバッチファイルのセットはこちら

目次

x264の設定(動画のエンコード)
Nero AAC コーデックの設定(音声のエンコード)
MP4Boxの設定(映像と音声の結合)
ツールとバッチファイルのセット
­

x264の設定(動画のエンコード)

x264cliを使うにはAviSynthが必要です。
AviSynthの解説サイト

x264cliは細かなエンコード設定が可能なだけに、膨大な数のオプションがあります。これを全て把握するのは大変です。
というわけで、ここでは主なオプションだけを解説することにします。

x264.exe --output "(出力するファイル名).mp4" "(入力するファイル名).avs"

これは何があっても必要です。
そして、オプションを次々と積んでいきます。
以下はそのオプションの一覧と解説です。
飛ばして使用例を見たい方はこちら

オプション[デフォルト値](値の範囲)解説
--bitrate ビットレートおよび2パスエンコードに関する設定をします。
--bitrateは、ビットレートを指定します。単位はkbpsです。動画の長さや音声のビットレートに合わせて、SMILEVIDEOの制限に引っかからない範囲で指定してください。

--passは、2パスエンコードを行う場合に必要です。1パス目は1を、2パス目(最後のパス)は2を指定します。
1パス目は、2パス目に比べて高速な(手を抜いた)設定が自動的に使われます。
ただし、GOP(I/P/Bフレームの配置)はすべてのパスで共通のものが使われます。
1パス目で高速な設定を使いたくない場合は、--slow-firstpass オプションを追加してください。

x264cliでは、3パス以上のエンコードが可能です。この場合、1パス目は1を指定し、2パス目以降は3を指定し、最後のパスは2を指定します。
ただし、多くの場合は長い時間と大量の電気を使って100パスエンコードなどをするくらいなら、他のオプションを練る方が効果的です。
--pass(1, 2, 3)
--cqm[flat](flat,jvt) マクロブロックに関する設定をします。
--cqmは、マクロブロックの量子化マトリクスを指定します。flat,jvtのどちらでもかまいません。好みでとしか言えません。

--aq-strengthは、画像の各部分の複雑さに応じてマクロブロックの量子化係数(圧縮度)を調整します。
推奨値は、量子化マトリクスやソースによって異なります。
flatマトリクスを使う場合は、デフォルトの1.0が効果的ですが
jvtマトリクスを使用する場合は0に設定するべきです。
(jvtマトリクスがaq-strength 1.0に近い働きをします)
--aq-strength[1.0](0〜)
--scenecut[40](0〜100) Iフレームに関する設定をします。
--scenecutは、Iフレームをどれくらい積極的に挿入するかを指定します。実写はデフォルトの40でかまいませんが、アニメなどでは60前後を推奨します。

--keyint --min-keyintは、それぞれ最大、最小のIDRフレーム(キーフレーム)間隔を指定します。
(H.264ではIフレームとIDRフレーム(キーフレーム)は微妙に異なります。)

--min-keyintは特にいじる必要はありません。

ただし--keyintは調節が欠かせません。--keyintは小さすぎると容量の無駄になります。しかし大きすぎるとシークがしづらくなったりします。
(ニコニコ動画では、IDRフレーム単位でしかシークを行えません。)
容量に余裕があるときはデフォルトのまま、またはフレームレートの10倍程度、とにかく圧縮したいときは大きな値を指定してください(1000など)。
--keyint[250](1〜)
--min-keyint[25]
(1〜keyintの設定値)
--ref[3](0〜16) 参照フレームに関する設定を行います。
--refは参照フレーム数を指定します。数を大きくすると画質が上がりますがエンコード速度が落ちます。
また、実写では5より大きい値にしてもほとんど効果がありません。アニメなどでも極端に大きな値にした場合の効果は疑問です。
--b-adapt[1](0〜2) Bフレームに関する設定をします。
Bフレームは圧縮効率が高いのが特徴です。

--b-adaptはBフレームの連続数を決める方法を選択します。0は常に--bframesで指定した数だけBフレームを連続させます。1と2は自動的にBフレームの連続数を可変させます。特に理由がない限り2に設定することを推奨します。

--bframesはBフレームの最大連続数を指定します。
--b-adaptを2に設定した場合は5程度で十分です。増やしすぎるとエンコードが遅くなります。
(6以上を設定してもほとんど5フレームまでしか使われません)
--b-adaptを1に設定した場合、実写では3程度を推奨します。アニメなどでは増やしてもかまいません。

--b-pyramidは--bframesを2以上にした場合に使用可能です。Bフレームが他のBフレームを参照できるようにします。--bframesに大きな値を指定した場合に効果を発揮します。 "normal"を指定することを推奨します。"strict"はBlu-ray用の設定です。

--bframesを1以上に設定した場合、映像が1フレーム分遅れます。また、--b-pyramidを有効にした場合は映像が2フレーム分遅れます。エンコードする前に、映像の遅れを相殺するようにavsファイル側で調整してください。GPACの仕様に起因する現象です。
--bframes[3](0〜16)
--b-pyramid[none](none, strict, normal)
--direct[spatial]
(none,spatial,temporal,auto)
(CPUが)エンコードをどれくらい真面目に行うかの設定を行います。
--directはBフレームの圧縮効率を向上させます(詳しい解説は省略)。autoに設定すれば間違いありません。高速でエンコードしたい場合はspatialに。none,temporalはあまりおすすめしません。

--meは動き検出の方法を指定します。圧縮効率に大きく影響します。
dia→最も高速
hex→高速で品質も悪くない
umh→遅いが高品質
esa→非常に遅い、時間の無駄(umhとほとんど品質が変わりません)
tesa→esaよりさらに遅い。(umhと(以下同文))

--psy-rdは圧縮処理において、人の知覚を考慮した調整を行います。ディテールをつぶれにくくする効果があります。
1つ目の数字はレート歪み(ビットレートあたりの画質)最適化処理の調節度合い、2つ目の数字は--trellisに関する調節度合いです。
基本的にはデフォルトの1:0でかまいません。

--submeはサブピクセル動き予測(何それ、でおk)の方法を指定します。デフォルトの7でも十分といえますが、特に高画質にしたいときはさらに大きな値を設定するといいでしょう。(その分遅くなります)
5以下に設定すると--psy-rdが強制的に無効になります。

--trellisはマクロブロックごとに(画像の部分ごとに)画質の微調整をするかどうかを設定します。0で無効、1で最小限の微調整(高速)、2で徹底的な微調整(低速)を行います。

--no-fast-pskipはマクロブロックを省略するかどうかの判定を念入りに行うようにします。有効にすることを推奨します。

--no-dct-decimateは、マクロブロックの量子化後(圧縮後)にさらに情報を削る処理を無効にします。使用することを推奨します。
--me[hex](dia,hex,umh,esa)
--subme[7](1〜10)
--psy-rd[1:0]
--trellis[1](0〜2)
--no-fast-pskip
--no-dct-decimate


­ 以下はオプションの使用例です。1パス目の手抜き(高速化)、各オプションの設定などを確認できます。

600kbps 2パスエンコードの例

1パス目
x264.exe --bitrate 600 --pass 1 --cqm jvt --aq-strength 0 --ref 6 --b-adapt 2 --bframes 5 --b-pyramid normal --no-fast-pskip --no-dct-decimate --level 3.1 --output "(出力するファイル名).mp4" "(入力するファイル名).avs"

2パス目
x264.exe --bitrate 600 --pass 2 --cqm jvt --aq-strength 0 --ref 6 --b-adapt 2 --bframes 5 --b-pyramid normal --direct auto --me umh --subme 10 --trellis 2 --no-fast-pskip --no-dct-decimate --level 3.1 --output "(出力するファイル名).mp4" "(入力するファイル名).avs"

300kbps 2パスエンコード(高速,手抜き)の例

1パス目
x264.exe --bitrate 300 --pass 1 --cqm jvt --aq-strength 0 --b-pyramid normal --no-fast-pskip --no-dct-decimate --level 3.1 --output "(出力するファイル名).mp4" "(入力するファイル名).avs"

2パス目
x264.exe --bitrate 300 --pass 2 --cqm jvt --aq-strength 0 --b-pyramid normal --no-fast-pskip --no-dct-decimate --level 3.1 --output "(出力するファイル名).mp4" "(入力するファイル名).avs" ­

Nero AAC コーデックの設定(音声のエンコード)

まずは、映像に付帯する音声(wavファイル)を取り出す必要があります。
avsファイルからのwavファイルの取り出しはavs2wavで簡単に行えます。
コマンドは

avs2wav.exe "(入力するファイル名).avs" "(出力するファイル名).wav"

です。

wavファイルを取り出したら、今度はNero AAC コーデックでエンコードします。

neroAacEnc.exe -if "(入力するファイル名).wav" -of "(出力するファイル名).mp4"

これにオプションをつけていきます。こちらはx264cliほど多くのオプションはありません。
オプション[デフォルト値](値の範囲)解説
-cbr(32〜448) ビットレートの設定を行います。
-cbrを指定した場合は固定ビットレートでエンコードされます。

-qを指定した場合は可変ビットレートでエンコードされます。-q 0が最も低ビットレートで、-q 1.0が最も高ビットレートです。実際に使用されるビットレートおよび完成するファイルのサイズは、実際にエンコードが完了するまで分かりません。

-brを指定した場合も可変ビットレートでエンコードされます。ただし、平均のビットレートが指定したビットレートになるようにエンコードされます。
後述の -2pass と併用することを推奨します。
-q[0.5](0〜1.0)
-br(32〜448)
-2pass -brを指定した場合に使用可能になります。2パスエンコードを行います。ビットレートの割り当てが適切に行われるようになり、音質が向上します。
-lc AACのプロファイルを指定します。
-lcを指定するとAAC LCとなります。
-heを指定するとHE-AACとなります。
-hev2を指定するとHE-AAC v2となります。

ただし、Nero AAC コーデックは、ビットレートに合わせて自動的にプロファイルを選択するので、特に手動でプロファイルを指定する必要はありません。
-he
-hev2


以下はオプションの使用例です。

128kbps 固定ビットレートの例

neroAacEnc.exe -cbr 128 -if (入力するファイル名).wav" -of "(出力するファイル名).mp4"

128kbps 可変ビットレート 2パスエンコードの例

neroAacEnc.exe -br 128 -2pass -if (入力するファイル名).wav" -of "(出力するファイル名).mp4"

­

MP4Boxの設定(映像と音声の結合)

MP4Boxのオプションについての解説は省略します。

MP4Box.exe -add "(入力する映像ファイル名).mp4" -add "(入力する音声ファイル名).mp4" -new "(出力するファイル名).mp4"

これで、映像と音声が一つのmp4ファイルにまとめられます。
入力するファイル名と出力するファイル名の拡張子が両方ともmp4になっています。この2つのファイル名を同じにしてはいけません。
­

ツールとバッチファイルのセット

以上で紹介したツールと、コマンドの使用例をバッチファイルにしたものをセットにしました。
…ただし、x264とNero AAC コーデックはリンクのみです。
バッチファイルにavsファイルをドラッグドロップすれば、avsファイルと同じ場所に、映像と音声がセットになったmp4ファイルが出力されます。
作成したmp4ファイルはそのままSMILEVIDEOにアップロードできます。
改変するなどして活用してください。
ダウンロードはこちら


トップページに戻る