2011/10/29

avs2yuvで32bit版Avisynthと64bit版x264を組み合わせてエンコード高速化

64bit版OSで32bit版x264を使用しているのなら、64bit版x264を使用することでエンコードを10%以上高速化(別記事)する事が出来ます。
一応64bitで動作するだけのIntel Pentium 4/Core 2では64bitバイナリでの速度改善は少ないですが、Intel Core i7/i5/i3やAMD Phenom/A/FX 以降のCPUなら十分に速くなります。

ただし、64bit版x264からは32bitのAvisynthを呼び出すことは出来ないので、x264の入力に直接avsファイルを指定する事は出来ません。
64bit版Avisynthなら問題ありませんが、64bitに対応しているフィルタの数が少ない現状では32bit版Avisynthを使用せざるを得ないです。
そこでavs2yuvを使用してAvisynthの処理結果をパイプ経由でx264に渡してやることで、32bit版Avisynthと64bit版x264を同時に使用します。

avs2yuvとx264をそのまま組み合わせてもエンコードは出来ますが、avs2yuvの出力バッファはFullHDのraw出力(YV12で3MB/frame)に対して非常に少ないので以下の方法がお勧めです。
・pipebufを使用してavs2yuv-x264間をバッファしてやる
・出力バッファが増量されたavs2yuvのmod(avs2pipe/avs2pipemod)を使用する

ではavs2yuv(とmod)の使用例を載せます。(16:9/1440x1080/23.97fpsをエンコードした場合)
*avsファイルの"return last"の直前に"ConvertToYV12()"を追記してください。

avs2yuvを使用する場合
"avs2yuv.exe" -raw "input.avs" -o - | "x264.exe" --crf 22 -o "output.mp4" - --input-res 1440x1080 --sar 4:3 --fps 23.976025

avs2yuvをpipbufでバッファして使用する場合
"pipebuf.exe" "avs2yuv.exe" -raw "input.avs" -o - : "x264.exe" --crf 22 -o "output.mp4" - --input-res 1440x1080 --sar 4:3 --fps 23.976025 : 128
*末尾の数字はバッファサイズ(MB)の指定です。

avs2pipeを使用する場合
"avs2pipe.exe" -video "input.avs" | "x264.exe" --crf 22 -o "output.mp4" - --input-res 1440x1080 --sar 4:3 --fps 23.976025

avs2pipemodを使用する場合
"avs2pipemod.exe" -rawvideo "input.avs" | "x264.exe" --crf 22 -o "output.mp4" - --input-res 1440x1080 --sar 4:3 --fps 23.976025


最後にpipebuf.exeの入手先が分かりにくいので記載しておきます。
pipebuf.exeを入手するにはMuldeR's OpenSource Projectsで配布されているx264 Launcherのパッケージをダウンロードすれば同梱されています。

関連記事

エンコード関連記事一覧