avsからy4mで出力するツールが一気に増えてしまったので、ここらへんで整理してみようかと思う。
まずavs2yuvを使うならどれがいいのか?
avs2yuvは本家(pengvado版)、kemuri-_9版、MasterNobody版、そして筆者のものの4種類がありますが、一番のオススメはMasterNobody氏の最新版です。
スピードや出力自体はどれもたいして変わりませんが、終了時、及びエラー時の処理が一番丁寧に行われています。
加えてバイナリのサイズも一番小さく、筆者版のように追加で必要なランタイムもありません。
さらにavisynthMTを使っている場合は自動でavsの最後にDistributor()を追加するようにもなっています。
おまけにmingw用のコードなので、LinuxやMacでも簡単にクロスコンパイル出来ます。
ついでに言えば、64bit用バイナリも同梱されています。
avs2yuvを使うなら、多分これが一番いいでしょう。
では他のツールも含めた場合ならどれがいいのか?
とりあえず使用目的が32bitのavisynthの出力をpipeで64bitのx264に渡すこと、もしくはwineでavisynthを使うことなら、現状ではavs2pipemodが一番いいです。
理由は単純に一番速いから。
avs2yuvの現在配布されているバイナリすべて、そしてavs2pipe-0.0.3は、ファイル書き込み用バッファを512Byteしか持っていません(stdio.hで定義されている値をそのまま使っています)。
非圧縮フォーマットであるy4mにとって、これはいささか少なすぎます。
ffmpegに至っては、avs2yuvよりもさらに遅い上にオプションがやたら長くなります。
ffmpeg -v 0 -i foo.avs -pix_fmt yuv420p -vcodec rawvideo -an -f yuv4mpegpipe - | x264 - --demuxer y4m ...
一方avs2pipemodは、以前書いたように書き込み用バッファを拡張しています(20110703版の時点では256KiByte)。
これにより発生するスピード差は次のようなベンチマークをしてみれば一目瞭然です。
#!/bin/bash echo ColorBars\(1280,720,\"YV12\"\).Trim\(0,4999\) > ./ColorBars.avs #avs2yuvとavs2pipemodで同じavs(5000フレーム)をそれぞれ5回ずつ回してみる。 #avs2yuvはMasterNobody版を使用 for i in {1..5}; do avs2yuv ./ColorBars.avs -o - | x264 - --demuxer y4m --preset ultrafast -o /dev/null done for i in {1..5}; do avs2pipemod -y4mp ./ColorBars.avs | x264 - --demuxer y4m --preset ultrafast -o /dev/null doneさて、自分の環境での結果は以下の通りでした。
avs2yuv avs2pipemod 1st 213.04fps 276.53fps 2nd 211.18fps 273.69fps 3rd 213.53fps 275.32fps 4th 213.69fps 276.53fps 5th 213.07fps 276.59fps avg 212.90fps 275.73fps実際のエンコードにおいてはこんなに軽いavsを使うことはないでしょうし、x264の設定もずっと重くなりますから、差はかなり縮まるでしょう。
しかし、avs2pipemodがavs2yuvよりも遅くなることは、まずありえない話です。
0 件のコメント:
コメントを投稿