x264 エンコード実験 --weightp 2
r1788でx264はchroma-weightpに対応…ということで、実際どんくらい効果あんの? ということで実験してみた。重み付け予測ということはとりあえず、フェードとかに強くなるらしいよ?
x264gui 改造版 r1804+347
・x264,x264_L-SMASHの更新。
109.1790+345 -> 110.1804+347
・guiで色について(--colormatrixとか)の設定をしたときに、コマンドの表示がおかしかった問題を修正。
今回も設定ファイルに互換性がありません…
ダウンロード>>
109.1790+345 -> 110.1804+347
・guiで色について(--colormatrixとか)の設定をしたときに、コマンドの表示がおかしかった問題を修正。
今回も設定ファイルに互換性がありません…
ダウンロード>>
FAWCheckについて
私が勝手にくっつけたFAWCheckなる機能について、どういうことをやってるのかちょっと詳しめな説明。
そもそもFakeAACWaveとは、AACをwavに偽装して、wavとして読み込んでカットしたりできるようにするもの。FAW.exeのGUIなし版がfawcl.exe。
たとえば、
aac -> [FAW.exe] -> 偽装wav -> [Aviutlでカット編集(CMカットとか)] -> カットされた偽装wav -> [FAW.exe] -> カットされたaac
のように使用し、音声をエンコードすることなくカット編集ができる。
(2011.01.04追記)
FAWには一般的な1/1サイズと、もうひとつ1/2サイズってのがあって、1/2サイズは16bitwavではなく、8bitwavで偽装されている。この1/2サイズを使う場合、Aviutl内部は16bitwavなので、16bit->8bit変換をしてやらなければならない。x264guiEx 0.12からこの16bit->8bit変換を行って1/2サイズFAWも扱えるようにした。(もっとも、0.12はバグ持ちなので使えるのは0.13からなるが)
偽装wavはAviutlで出力する際にはきちんとFAW.exeで処理する必要があるけども、たまに設定を間違えて、普通のwavをFAW.exeで処理しようとしてしまい止まったり、逆に偽装wavをneroでエンコードしてしまいおかしなことになったり、ということになってorz
そこで、音声の設定は常に普通のwav用のものにしておき、偽装wavのときには自動的にFAW.exe(fawcl.exe)を使用するようにできないか、と思ってFAWCheckを作ってみた。
・パスの指定
FAW.exe(fawcl.exe)のパスは、外部エンコーダのリストにあるものを使うので、FAWCheckをオンにするには、一度外部エンコーダのところのFAW.exe(fawcl.exe)のパスを正しく指定しておく。指定した後で、外部エンコーダの選択を普通のwavの時の設定(たとえばneroaacencとか)に戻しておく。一度指定してあればおk。
・ファイル出力時の動作
FAWCheckをオンにしておくと、音声のエンコードを開始する前に、まずFakeAACWave(偽装wav)かどうかの判定し、
偽装wavでない(普通のwavだ)、と判定された場合、guiの設定通りに音声エンコードを実行。
偽装wavである、と判定されたときは、guiで設定された音声エンコードの方法を無視して、FAW.exe(fawcl.exe)で音声を処理する。
というふうになる。
つぎに、どうやって判定しているかという話。
そもそもFakeAACWaveとは、AACをwavに偽装して、wavとして読み込んでカットしたりできるようにするもの。FAW.exeのGUIなし版がfawcl.exe。
たとえば、
aac -> [FAW.exe] -> 偽装wav -> [Aviutlでカット編集(CMカットとか)] -> カットされた偽装wav -> [FAW.exe] -> カットされたaac
のように使用し、音声をエンコードすることなくカット編集ができる。
(2011.01.04追記)
FAWには一般的な1/1サイズと、もうひとつ1/2サイズってのがあって、1/2サイズは16bitwavではなく、8bitwavで偽装されている。この1/2サイズを使う場合、Aviutl内部は16bitwavなので、16bit->8bit変換をしてやらなければならない。x264guiEx 0.12からこの16bit->8bit変換を行って1/2サイズFAWも扱えるようにした。(もっとも、0.12はバグ持ちなので使えるのは0.13からなるが)
偽装wavはAviutlで出力する際にはきちんとFAW.exeで処理する必要があるけども、たまに設定を間違えて、普通のwavをFAW.exeで処理しようとしてしまい止まったり、逆に偽装wavをneroでエンコードしてしまいおかしなことになったり、ということになってorz
そこで、音声の設定は常に普通のwav用のものにしておき、偽装wavのときには自動的にFAW.exe(fawcl.exe)を使用するようにできないか、と思ってFAWCheckを作ってみた。
・パスの指定
FAW.exe(fawcl.exe)のパスは、外部エンコーダのリストにあるものを使うので、FAWCheckをオンにするには、一度外部エンコーダのところのFAW.exe(fawcl.exe)のパスを正しく指定しておく。指定した後で、外部エンコーダの選択を普通のwavの時の設定(たとえばneroaacencとか)に戻しておく。一度指定してあればおk。
・ファイル出力時の動作
FAWCheckをオンにしておくと、音声のエンコードを開始する前に、まずFakeAACWave(偽装wav)かどうかの判定し、
偽装wavでない(普通のwavだ)、と判定された場合、guiの設定通りに音声エンコードを実行。
偽装wavである、と判定されたときは、guiで設定された音声エンコードの方法を無視して、FAW.exe(fawcl.exe)で音声を処理する。
というふうになる。
つぎに、どうやって判定しているかという話。
x264afs.exe r1790+345
auo同様、x264afs.exeもtimecodeが怪しいのを修正しとかんといかんと思ったので更新。自動フィールドシフト使用時にカクカクする(ことがあった)問題が改善される。
実は昨日r1788+345でビルドしたんだけど、バグがあるらしい…と聞いて公開はやめといた。
ダウンロード>>
さて、イカ娘でも見るか。
実は昨日r1788+345でビルドしたんだけど、バグがあるらしい…と聞いて公開はやめといた。
ダウンロード>>
さて、イカ娘でも見るか。
x264gui 改造版 r1790+345
・x264の更新。
r1788では、chroma weightp で画像が壊れることが
あったらしく、その修正のよう。
・guiでスレッド数に2桁の値を指定できるようにした。
まあ、基本的には 0 のままにして
--thread auto でいいとは思うけど。
(自動的にCPUの論理コア数×1.5になる、
これがちょうどいいらしい)
・改造版r1788では、コンパイルをミスったのかx264audioからqtaacが使えなくなっていた。すみません。
r1790ではテストしたところ大丈夫。
今回も設定ファイルの互換性がないようです…orz
ダウンロード>>
r1788では、chroma weightp で画像が壊れることが
あったらしく、その修正のよう。
・guiでスレッド数に2桁の値を指定できるようにした。
まあ、基本的には 0 のままにして
--thread auto でいいとは思うけど。
(自動的にCPUの論理コア数×1.5になる、
これがちょうどいいらしい)
・改造版r1788では、コンパイルをミスったのかx264audioからqtaacが使えなくなっていた。すみません。
r1790ではテストしたところ大丈夫。
今回も設定ファイルの互換性がないようです…orz
ダウンロード>>
x264gui 改造版 r1788+344v2
r14xx以降、自動フィールドシフト使用時に怪しいtimecodeを
吐き続けていた問題をやっと解決。
疲れた…
ダウンロード>>
かなりいろいろと試行錯誤してみたが、結局は実に簡単なところだった…orz
細かいこと言うと、gui/x264auo.c の 1050-1051行目、
second_largest_pts = largest_pts;
largest_pts = pic.i_pts;
をドロップ時はしてはいけないっていう、ただそれだけ。
これをやってしまっていたため、1038行目からの
if( pic.i_pts <= largest_pts )
{
//(...コメントアウト部 中略...)
pic.i_pts = largest_pts + ticks_per_frame;
}
が不必要に動いてしまって、timecodeが壊れる原因となっていた。
同じ動画をエンコードしたときのtimecodeの比較。
自動フィールドシフトでは、24fps化を指定している。
そのため、1000ms/23.976fps = 41.7..ms/frame
なわけだが…
比較のエクセルファイル>>
吐き続けていた問題をやっと解決。
疲れた…
ダウンロード>>
かなりいろいろと試行錯誤してみたが、結局は実に簡単なところだった…orz
細かいこと言うと、gui/x264auo.c の 1050-1051行目、
second_largest_pts = largest_pts;
largest_pts = pic.i_pts;
をドロップ時はしてはいけないっていう、ただそれだけ。
これをやってしまっていたため、1038行目からの
if( pic.i_pts <= largest_pts )
{
//(...コメントアウト部 中略...)
pic.i_pts = largest_pts + ticks_per_frame;
}
が不必要に動いてしまって、timecodeが壊れる原因となっていた。
同じ動画をエンコードしたときのtimecodeの比較。
自動フィールドシフトでは、24fps化を指定している。
そのため、1000ms/23.976fps = 41.7..ms/frame
なわけだが…
比較のエクセルファイル>>
x264gui 改造版 r1788+344
変更点は…
・x264, x264_L-SMASHの更新
r1772 -> r1788の更新のほとんどはHigh-depth Encodingについてなので、x264gui.auoには関係ない…と思いきや、実はchroma weighted predictionが実現したようでこれが重要かもしれない。
・コメントにあったご指摘より。iniのプロファイルから読み込んだ時に、--preset, --tune, --profile の項目についてもguiに反映するようにした。たとえばiniのプロセットに--profile mainと書いてあるのにguiに反映されないのは不自然な気がするので、改善してみた。
・guiのプロファイル(H.264のprofileを設定する項目)を上位制限項目として適用するようにした。
たとえば、プロファイルでmainとなっていれば、8x8dctを指定しても、自動的に8x8dctを解除するようになる。x264.exe では --profile main とか --profile baseline とかすると、それによって制限されるので、gui.auoでも制限がかかるようにした。そのほうが自然だと思う。high指定で制限がかからないので、制限をかけたくない場合はhighで。
・iniに Lame mp3, ffmpeg ac3 の設定を追加。
やってみたかっただけ。特に意味はない。
・iniのx264のプロファイルを微修正。
高画質でも --ref 8 もいらんでしょという反省。
・いくつかのコンボボックスの内容について、x264の構造体から値をロードするようにした。
これは私が楽をするため。使用上の変化なし。ただ、色についてのコンボボックスのあたり(colormatrixとか)で、表示の順番が変わった。
r1772+326 -> r1788+334r1772+336 -> r1788+344では設定ファイルの互換性はありません。
(追記)十の位間違えてた
ダウンロード>>
・x264, x264_L-SMASHの更新
r1772 -> r1788の更新のほとんどはHigh-depth Encodingについてなので、x264gui.auoには関係ない…と思いきや、実はchroma weighted predictionが実現したようでこれが重要かもしれない。
・コメントにあったご指摘より。iniのプロファイルから読み込んだ時に、--preset, --tune, --profile の項目についてもguiに反映するようにした。たとえばiniのプロセットに--profile mainと書いてあるのにguiに反映されないのは不自然な気がするので、改善してみた。
・guiのプロファイル(H.264のprofileを設定する項目)を上位制限項目として適用するようにした。
たとえば、プロファイルでmainとなっていれば、8x8dctを指定しても、自動的に8x8dctを解除するようになる。x264.exe では --profile main とか --profile baseline とかすると、それによって制限されるので、gui.auoでも制限がかかるようにした。そのほうが自然だと思う。high指定で制限がかからないので、制限をかけたくない場合はhighで。
・iniに Lame mp3, ffmpeg ac3 の設定を追加。
やってみたかっただけ。特に意味はない。
・iniのx264のプロファイルを微修正。
高画質でも --ref 8 もいらんでしょという反省。
・いくつかのコンボボックスの内容について、x264の構造体から値をロードするようにした。
これは私が楽をするため。使用上の変化なし。ただ、色についてのコンボボックスのあたり(colormatrixとか)で、表示の順番が変わった。
(追記)十の位間違えてた
ダウンロード>>
x264gui 改造版 r1772+336
変更点は…
・ADTS-AAC + --ademuxer lavf で12秒長くなる問題が解決されたようなのでFAWのときの例外処理を廃止。
・iniにqtaacenc.exe用の設定を追加してみた。
外部muxer(mp4boxとか)でmuxしたい人でqtaacを使いたい人は、qtaacenc.exeでエンコードするといいかも。
qtaacenc.exeはこちら
ダウンロード>>
ところで…
x264.exeを使用して自動フィールドシフトもできるAviutl出力プラグインをYan氏が作ったそうです。Aviutl総合スレにある。x264 for Aviutlというらしい。素晴らしい。ちょっと使ってみる。x64なx264も使えれば…
・ADTS-AAC + --ademuxer lavf で12秒長くなる問題が解決されたようなのでFAWのときの例外処理を廃止。
・iniにqtaacenc.exe用の設定を追加してみた。
外部muxer(mp4boxとか)でmuxしたい人でqtaacを使いたい人は、qtaacenc.exeでエンコードするといいかも。
qtaacenc.exeはこちら
ダウンロード>>
ところで…
x264.exeを使用して自動フィールドシフトもできるAviutl出力プラグインをYan氏が作ったそうです。Aviutl総合スレにある。x264 for Aviutlというらしい。素晴らしい。ちょっと使ってみる。x64なx264も使えれば…