x264guiExの上限設定 (まとめ)
x264guiExの
・自動マルチパス
・上限付き品質基準VBR(crf)
には、上限ファイルサイズ・上限ビットレートを指定して、エンコ時にその上限にあわせたエンコードができる。
今回の記事は、いままで書いてきたこのへんに関する記事のまとめみたいなもんで特に新しいことはないです。まあ自動マルチパス・上限確認付きcrfの両方をまとめて書いておきたい、というだけ。
続きに、いろいろと。
設定方法
設定方法は、x264guiExの設定画面で、

まず
・自動マルチパス
・上限確認付き 品質基準VBR
を選択し、

その後表示される
・上限ファイルサイズ(映像 + 音声)
・上限ビットレート(映像 + 音声)
に上限の値を入れる、という順番で設定する。
大雑把なモードの説明
・自動マルチパスモード
まず音声エンコをして、エンコ後の音声のファイルサイズを確認し、映像の目標ビットレートを適切か判断する。
設定された目標ビットレートで上限設定を満たせそうであればそのまま、上限設定を満たせなさそうならいい感じにビットレートを自動で調整して、マルチパスエンコード。
その後、上限を確認して、上限を上回っていれば、さらに自動でビットレートを調整して、映像の自動マルチパスエンコか音声の再エンコで上限以内になるよう調整する。
・上限確認付き 品質基準VBR (crf)
まず設定されたcrfでエンコードして、上限を確認。
上限を上回っていれば、自動でビットレートを調整して、映像の自動マルチパスエンコか音声の再エンコで上限以内になるよう調整する。
図にまとめるとこんな感じ。

どちらのモードでも上限確認をして、
・上限を少し上回った場合
→ 音声の再エンコで調整
・上限を大幅に上回った場合
→ 映像の再エンコで調整
通常、音声のほうがビットレートが小さく、音声で調整出来る範囲は限定的。なので大幅に上回ってしまった場合は、時間がかかっても映像側で調整する必要がある。
ビットレートの自動計算
上限設定からビットレートを自動的に計算する場合には、上限ぎりぎりの値ではなく、ぎりぎりから少し削った「余裕をもった」値を設定するようにしている。これは、x264の2passエンコード結果が、どうしても設定値から多少ずれる場合があるので、ぎりぎりを設定すると上限を上回ってしまい再エンコ…みたいなことが頻繁に起こりかねないため。
この「余裕」の量は、x264guiExの設定画面右上にある、「その他の設定」の「自動マルチパス」タブから設定できる。

デフォルトは「6」。値を小さくすると余裕が小さくなり、ぎりぎりを狙える代わりに再エンコが多発して時間がかかるかもしれない。
具体的な動作例 (自動マルチパス)
自動マルチパスモードでは、まず音声エンコを行う。
--------------------------------------
[S:\test_bitrate2.mp4] (1 / 2 pass)
--------------------------------------
auo [info]: 自動マルチパスでの上限のチェックを行う場合は、
音声エンコードを先に行います。
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
次に、エンコし終わった音声ファイルサイズを確認して、目標ビットレートのままでは上限を上回りそうなら、自動的にビットレートを調整する。この調整では、ある程度ゆとりをもってできるだけ再エンコが必要無いようにする。
auo [warning]: 上限ビットレートの設定を守るには、
指定された目標ビットレートは大きすぎます。
auo [warning]: 目標ビットレートを 550 kbps -> 529 kbpsに変更します。
このあと、1pass目のエンコに続き、2pass目のエンコ。
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 529 --pass 1 --stats "S:\test_bitrate2.stats" ~(中略)~ -o "S:\test_bitrate2.mp4" "-"
~(中略)~
--------------------------------------
[S:\test_bitrate2.mp4] (2 / 2 pass)
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 529 --pass 3 --stats "S:\test_bitrate2.stats" ~(中略)~ -o "S:\test_bitrate2.mp4" "-"
2pass目が終了すると、上限の確認を行う。上限を下回っていれば、
auo [info]: 出力ファイルサイズ 17.05 MB,
ファイルビットレート 633.25 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
と出て終了。
逆に上回ってしまった場合には、
auo [warning]: 出力ファイルサイズ 17.74 MB,
ファイルビットレート 659.04 kbps
auo [warning]: 上限ファイルビットレート 656.00 kbps を上回ってしまいました。
auo [warning]: 音声目標ビットレートを 124 kbpsに変更し、再エンコードを行います。
この例では、上限ビットレートを約3kbps上回ってしまった。この場合、上回った量が比較的小さいので、音声のビットレートを少し下げて再エンコすることで、調整しようとする。
--------------------------------------
[S:\test_bitrate2.mp4]
--------------------------------------
auo [info]: NeroAacEnc で音声エンコードを行います。 AAC-LC ビットレート指定, 124kbps, 2pass
auo [info]: L-SMASH remuxer でmuxを行います。映像: on, 音声: on, tc:off, 拡張モード:なし
auo [info]: 出力ファイルサイズ 17.64 MB, ファイルビットレート 655.07 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
再び上限を確認し、下回っていたので終了。
図にすると、

もちろん、上限を大幅に上回る場合は、音声ではなく、映像の方の目標ビットレートを少し下げて再エンコすることで調整する。
具体的な動作例 (上限確認付き品質基準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秒
ここまで行けば終了。
この流れは、図にすると

こんな感じ。
上限確認付き 品質基準VBR モードでは、上限を上回ってしまう場合は派手に上回ることが多いので、音声での再調整はできずに上に書いたような自動マルチパスを使った再調整になると思う。
上限を上回らなければ、1度しかエンコせずに済むので、さくっと終わらせ、また過剰にビットレートが上がってしまうのを防ぐことができる。
使いどころ
どちらも、ファイルサイズ・ビットレートの制限がある状況で使う。まあニコ動用エンコとか。
・上限確認付き 品質基準VBR (crf)
上限はあるのだけど、そこそこの画質でも上限をこえることはきっとないだろうな~という状況で使う。
具体的にはニコ動プレミアム会員で、時間の短い時間の動画、あるいは容量を喰わなそうな動画をエンコする場合。
短い動画であれば、十分な画質でエンコするにしても上限の100MBも必要ないことは多く、自動マルチパスモードだと100MBに合わせようとするため無駄に容量のでかい動画を作ることになってしまう。そういう時に、1passでさくっと、良い感じの品質を持った適切なビットレートの動画を作れる。
・自動マルチパスモード
上限が割と厳しく、画質を維持しようとすると上限を超えてしまいそうなときに使う。
具体的には、ニコ動の一般会員の場合とか、ニコ動のエコノミー回避用動画(一般・プレミアム関係なく)とか。
この場合、上限が厳しいので、限られた容量をめいいっぱい使って、できるだけ画質を維持したい。そのためにはやはり2passエンコードが必要…ということになる。
まあニコ動用エンコの場合は、プリセットを使うといいんじゃないかな…と思う。

クリックで拡大
ニコ動のプレミアム・一般について、通常版とエコノミー回避設定。
ニコ動のプレミアムの短い動画用が上限確認付き品質基準VBR(crf)モード、その他が自動マルチパスモード。
Flash Player用に必要な設定はほとんどやってるはず。さすがにインループ・デブロックフィルタを切るのはやってない。さすがに圧縮率が低下するんで。他にも問題があれば教えていただければと思います。
というかFlash Playerも問題の起こりやすいDXVAとかデフォルトにしなければいいのに…と思うけど。
その他x264guiExに関する記事のまとめとか。
x264guiExの導入>
・自動マルチパス
・上限付き品質基準VBR(crf)
には、上限ファイルサイズ・上限ビットレートを指定して、エンコ時にその上限にあわせたエンコードができる。
今回の記事は、いままで書いてきたこのへんに関する記事のまとめみたいなもんで特に新しいことはないです。まあ自動マルチパス・上限確認付きcrfの両方をまとめて書いておきたい、というだけ。
続きに、いろいろと。
設定方法
設定方法は、x264guiExの設定画面で、

まず
・自動マルチパス
・上限確認付き 品質基準VBR
を選択し、

その後表示される
・上限ファイルサイズ(映像 + 音声)
・上限ビットレート(映像 + 音声)
に上限の値を入れる、という順番で設定する。
大雑把なモードの説明
・自動マルチパスモード
まず音声エンコをして、エンコ後の音声のファイルサイズを確認し、映像の目標ビットレートを適切か判断する。
設定された目標ビットレートで上限設定を満たせそうであればそのまま、上限設定を満たせなさそうならいい感じにビットレートを自動で調整して、マルチパスエンコード。
その後、上限を確認して、上限を上回っていれば、さらに自動でビットレートを調整して、映像の自動マルチパスエンコか音声の再エンコで上限以内になるよう調整する。
・上限確認付き 品質基準VBR (crf)
まず設定されたcrfでエンコードして、上限を確認。
上限を上回っていれば、自動でビットレートを調整して、映像の自動マルチパスエンコか音声の再エンコで上限以内になるよう調整する。
図にまとめるとこんな感じ。

どちらのモードでも上限確認をして、
・上限を少し上回った場合
→ 音声の再エンコで調整
・上限を大幅に上回った場合
→ 映像の再エンコで調整
通常、音声のほうがビットレートが小さく、音声で調整出来る範囲は限定的。なので大幅に上回ってしまった場合は、時間がかかっても映像側で調整する必要がある。
ビットレートの自動計算
上限設定からビットレートを自動的に計算する場合には、上限ぎりぎりの値ではなく、ぎりぎりから少し削った「余裕をもった」値を設定するようにしている。これは、x264の2passエンコード結果が、どうしても設定値から多少ずれる場合があるので、ぎりぎりを設定すると上限を上回ってしまい再エンコ…みたいなことが頻繁に起こりかねないため。
この「余裕」の量は、x264guiExの設定画面右上にある、「その他の設定」の「自動マルチパス」タブから設定できる。

デフォルトは「6」。値を小さくすると余裕が小さくなり、ぎりぎりを狙える代わりに再エンコが多発して時間がかかるかもしれない。
具体的な動作例 (自動マルチパス)
自動マルチパスモードでは、まず音声エンコを行う。
--------------------------------------
[S:\test_bitrate2.mp4] (1 / 2 pass)
--------------------------------------
auo [info]: 自動マルチパスでの上限のチェックを行う場合は、
音声エンコードを先に行います。
auo [info]: NeroAacEnc で音声エンコードを行います。
AAC-LC ビットレート指定, 128kbps, 2pass
次に、エンコし終わった音声ファイルサイズを確認して、目標ビットレートのままでは上限を上回りそうなら、自動的にビットレートを調整する。この調整では、ある程度ゆとりをもってできるだけ再エンコが必要無いようにする。
auo [warning]: 上限ビットレートの設定を守るには、
指定された目標ビットレートは大きすぎます。
auo [warning]: 目標ビットレートを 550 kbps -> 529 kbpsに変更します。
このあと、1pass目のエンコに続き、2pass目のエンコ。
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 529 --pass 1 --stats "S:\test_bitrate2.stats" ~(中略)~ -o "S:\test_bitrate2.mp4" "-"
~(中略)~
--------------------------------------
[S:\test_bitrate2.mp4] (2 / 2 pass)
--------------------------------------
auo [info]: converting YUY2 -> nv12p, using SSE2
auo [info]: x264 options...
--preset slow --bitrate 529 --pass 3 --stats "S:\test_bitrate2.stats" ~(中略)~ -o "S:\test_bitrate2.mp4" "-"
2pass目が終了すると、上限の確認を行う。上限を下回っていれば、
auo [info]: 出力ファイルサイズ 17.05 MB,
ファイルビットレート 633.25 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
と出て終了。
逆に上回ってしまった場合には、
auo [warning]: 出力ファイルサイズ 17.74 MB,
ファイルビットレート 659.04 kbps
auo [warning]: 上限ファイルビットレート 656.00 kbps を上回ってしまいました。
auo [warning]: 音声目標ビットレートを 124 kbpsに変更し、再エンコードを行います。
この例では、上限ビットレートを約3kbps上回ってしまった。この場合、上回った量が比較的小さいので、音声のビットレートを少し下げて再エンコすることで、調整しようとする。
--------------------------------------
[S:\test_bitrate2.mp4]
--------------------------------------
auo [info]: NeroAacEnc で音声エンコードを行います。 AAC-LC ビットレート指定, 124kbps, 2pass
auo [info]: L-SMASH remuxer でmuxを行います。映像: on, 音声: on, tc:off, 拡張モード:なし
auo [info]: 出力ファイルサイズ 17.64 MB, ファイルビットレート 655.07 kbps
auo [info]: 指定された上限を下回っていることを確認しました。
再び上限を確認し、下回っていたので終了。
図にすると、

もちろん、上限を大幅に上回る場合は、音声ではなく、映像の方の目標ビットレートを少し下げて再エンコすることで調整する。
具体的な動作例 (上限確認付き品質基準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秒
ここまで行けば終了。
この流れは、図にすると

こんな感じ。
上限確認付き 品質基準VBR モードでは、上限を上回ってしまう場合は派手に上回ることが多いので、音声での再調整はできずに上に書いたような自動マルチパスを使った再調整になると思う。
上限を上回らなければ、1度しかエンコせずに済むので、さくっと終わらせ、また過剰にビットレートが上がってしまうのを防ぐことができる。
使いどころ
どちらも、ファイルサイズ・ビットレートの制限がある状況で使う。まあニコ動用エンコとか。
・上限確認付き 品質基準VBR (crf)
上限はあるのだけど、そこそこの画質でも上限をこえることはきっとないだろうな~という状況で使う。
具体的にはニコ動プレミアム会員で、時間の短い時間の動画、あるいは容量を喰わなそうな動画をエンコする場合。
短い動画であれば、十分な画質でエンコするにしても上限の100MBも必要ないことは多く、自動マルチパスモードだと100MBに合わせようとするため無駄に容量のでかい動画を作ることになってしまう。そういう時に、1passでさくっと、良い感じの品質を持った適切なビットレートの動画を作れる。
・自動マルチパスモード
上限が割と厳しく、画質を維持しようとすると上限を超えてしまいそうなときに使う。
具体的には、ニコ動の一般会員の場合とか、ニコ動のエコノミー回避用動画(一般・プレミアム関係なく)とか。
この場合、上限が厳しいので、限られた容量をめいいっぱい使って、できるだけ画質を維持したい。そのためにはやはり2passエンコードが必要…ということになる。
まあニコ動用エンコの場合は、プリセットを使うといいんじゃないかな…と思う。

クリックで拡大
ニコ動のプレミアム・一般について、通常版とエコノミー回避設定。
ニコ動のプレミアムの短い動画用が上限確認付き品質基準VBR(crf)モード、その他が自動マルチパスモード。
Flash Player用に必要な設定はほとんどやってるはず。さすがにインループ・デブロックフィルタを切るのはやってない。さすがに圧縮率が低下するんで。他にも問題があれば教えていただければと思います。
というかFlash Playerも問題の起こりやすいDXVAとかデフォルトにしなければいいのに…と思うけど。
その他x264guiExに関する記事のまとめとか。
x264guiExの導入>
スポンサーサイト