上限確認付き品質基準VBR(crf)の詳細
x264guiEx 1.70での自動マルチパス関係の機能の拡張について、もうちょっと詳細。
まず、1.70で追加した、上限確認付き品質基準VBR(crf)だけの図。
これについて、具体的にどうなるのか、続きに書いておいた。
上限確認付き品質基準VBR(crf)を選ぶと、まず設定されたcrfでエンコードを行う。
--------------------------------------
[S:\test_crf.mp4]
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --crf 26 ~(中略)~ -o "S:\test_crf.mp4" "-"
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
で、crfでのエンコードが終わると、上限を確認する。上限ファイルサイズ100MBと設定したとすると、100MB以内に収まっていれば、
auo [info]: 出力ファイルサイズ 89.45 MB,
ファイルビットレート 1389.34 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
auo [info]: 総エンコード時間 : 0時間 3分35.7秒
と出て、終了。
もう少しcrfを下げ、画質をあげようとしてみると、そのままでは100MBをオーバーしてしまう。
--------------------------------------
[S:\test_crf2.mp4]
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --crf 25.5 ~(中略)~ -o "S:\test_crf2.mp4" "-"
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
~(中略)~
auo [warning]: 出力ファイルサイズ 102.61 MB,
ファイルビットレート 1593.72 kbps
auo [warning]: 上限ファイルサイズ 100.00 MB を上回ってしまいました。
で、こんなかんじでcrfでのエンコードが終わって、上限を上回ってしまった場合は、自動的に自動マルチパスモードに移行する。目標ビットレートは上限設定から自動的に計算。
--------------------------------------
[S:\test_crf2.mp4] (1 / 2 pass)
--------------------------------------
auo [warning]: 目標ビットレートを 1423 kbpsに設定します。
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 1423 --pass 1 --stats "S:\test_crf2.stats"
~(中略)~ -o "nul" "-"
~(中略)~
--------------------------------------
[S:\test_crf2.mp4] (2 / 2 pass)
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 1423 --pass 3 --stats "S:\test_crf2.stats" ~(中略)~ -o "S:\test_crf2.mp4" "-"
~(中略)~
auo [info]: 出力ファイルサイズ 99.72 MB,
ファイルビットレート 1548.91 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
auo [info]: 総エンコード時間 : 0時間 7分44.1秒
ここまで行けば終了。
この流れは、図にすると
こんな感じ。
x264guiEx 1.70では、音声によるビットレート再調整も行えるようにしたけど、上限確認付き品質基準VBR(crf)で上限をオーバーする場合はたいてい上限を大幅に上回ってしまう。そのため、音声での再調整はできずに上に書いたような自動マルチパスを使った再調整になると思う。
(音声のビットレートはそもそも小さいことが多く、音声側による調整には限界がある。)
ニコ動プレミアム用の動画を作る場合、現在上限は100MB。3分とかの短い動画ならcrfでオーバーすることはほとんどなく、crfでぱぱっとやってしまうのがいいんじゃないかなと思う。
プリセットの方は6分以内のほうを「上限確認付き品質基準VBR(crf)」、6分以上を「自動マルチパス」で作ってあるけど…まあエンコ対象によって結構違うので、6分というのはおおまかな値。
まず、1.70で追加した、上限確認付き品質基準VBR(crf)だけの図。
これについて、具体的にどうなるのか、続きに書いておいた。
上限確認付き品質基準VBR(crf)を選ぶと、まず設定されたcrfでエンコードを行う。
--------------------------------------
[S:\test_crf.mp4]
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --crf 26 ~(中略)~ -o "S:\test_crf.mp4" "-"
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
で、crfでのエンコードが終わると、上限を確認する。上限ファイルサイズ100MBと設定したとすると、100MB以内に収まっていれば、
auo [info]: 出力ファイルサイズ 89.45 MB,
ファイルビットレート 1389.34 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
auo [info]: 総エンコード時間 : 0時間 3分35.7秒
と出て、終了。
もう少しcrfを下げ、画質をあげようとしてみると、そのままでは100MBをオーバーしてしまう。
--------------------------------------
[S:\test_crf2.mp4]
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --crf 25.5 ~(中略)~ -o "S:\test_crf2.mp4" "-"
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
~(中略)~
auo [warning]: 出力ファイルサイズ 102.61 MB,
ファイルビットレート 1593.72 kbps
auo [warning]: 上限ファイルサイズ 100.00 MB を上回ってしまいました。
で、こんなかんじでcrfでのエンコードが終わって、上限を上回ってしまった場合は、自動的に自動マルチパスモードに移行する。目標ビットレートは上限設定から自動的に計算。
--------------------------------------
[S:\test_crf2.mp4] (1 / 2 pass)
--------------------------------------
auo [warning]: 目標ビットレートを 1423 kbpsに設定します。
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 1423 --pass 1 --stats "S:\test_crf2.stats"
~(中略)~ -o "nul" "-"
~(中略)~
--------------------------------------
[S:\test_crf2.mp4] (2 / 2 pass)
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 1423 --pass 3 --stats "S:\test_crf2.stats" ~(中略)~ -o "S:\test_crf2.mp4" "-"
~(中略)~
auo [info]: 出力ファイルサイズ 99.72 MB,
ファイルビットレート 1548.91 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
auo [info]: 総エンコード時間 : 0時間 7分44.1秒
ここまで行けば終了。
この流れは、図にすると
こんな感じ。
x264guiEx 1.70では、音声によるビットレート再調整も行えるようにしたけど、上限確認付き品質基準VBR(crf)で上限をオーバーする場合はたいてい上限を大幅に上回ってしまう。そのため、音声での再調整はできずに上に書いたような自動マルチパスを使った再調整になると思う。
(音声のビットレートはそもそも小さいことが多く、音声側による調整には限界がある。)
ニコ動プレミアム用の動画を作る場合、現在上限は100MB。3分とかの短い動画ならcrfでオーバーすることはほとんどなく、crfでぱぱっとやってしまうのがいいんじゃないかなと思う。
プリセットの方は6分以内のほうを「上限確認付き品質基準VBR(crf)」、6分以上を「自動マルチパス」で作ってあるけど…まあエンコ対象によって結構違うので、6分というのはおおまかな値。