まるも製作所の茂木氏が久しぶりに「MPEG-2 VIDEO VFAPI Plug-In」を更新し、ver.0.7.1になりました。デコード処理に専用スレッドを割り当て、デコードを大幅に高速化。この度の改良は、Core i7-2600のHTT有効時、x264出力でCPUを使い切れない(MPEG-2のデコードが遅いため、x264側がデータを待つ間CPUに空き時間ができやすい)事への対策を施したものであり、結果として条件次第では DGMPGDec のデコード速度を凌ぐまでに至りました。

では、そのベンチ結果を紹介しましょう。

計測環境
いずれも、Windows7 professional 64bit SP1 RC、Core i5-2500K(定格)。
DDR3 1333 8GB(4GB×2)
AviUtl ver.0.99i8test(マイナス座標不具合修正版)
AviSynth v2.5.8
avs2avi v1.40a
MPEG-2 VIDEO VFAPI Plug-In ver.0.6.55a
MPEG-2 VIDEO VFAPI Plug-In ver.0.7.1
DGMPGDec 1.58

【ベンチマーク】AviUtl編
MPEG-2 VIDEO VFAPI Plug-Inの旧バージョン(ver.0.6.55a)と今回公開された最新版(ver.0.7.1)、そしてDGMPGDecをAviSynthでロードしてAvisynth Script File Readerで読み込む3パターンを試しました。ソースは30分番組のTS(糊代録画で正確には30分25秒)で、読み込んだ映像にフィルタを一切掛けずNULL出力するというベンチマーク。フィルタリングやファイル出力(ストレージへの書き込み)を一切しないため、ほぼデコード速度のみを計測することができます。

セッティング
MPEG-2 VIDEO VFAPI Plug-Inの拡張子を aui に変更し、入力プラグインモードとして動作させます。これによりYUV色空間のまま読み込めるため、VFAPIで発生するYUV→RGB色空間変換を回避し、出来る限りMPEG-2のデコード速度を計測する狙いです。

DGMPGDec ver.1.5.8のデコードオプションスイッチは idct=3, upConv=1 とし、インタレースを維持したままYUY2へピクセルフォーマット変換します。これはAviUtlの入力がYUY2を要求するためで、upConv=0(デフォルト)の後 ConvertToYUY2(interlaced=true) と指定した場合と同様の処理結果をもたらせます。

いずれの設定も、1440x1080(60i)のYUY2でAviUtlに入力されます。

↑MPEG-2 VIDEO Plug-Inのセッティング
↑MPEG-2 VIDEO Plug-Inの入力情報
↑DGMPGDecの入力情報
結果(AviUtl v0.99i8)
MPEG-2 VIDEO Plug-In v0.6.55a 86.7fps  
MPEG-2 VIDEO Plug-In v0.7.1 159.5fps  
DGMPGDec ver.1.58(YUY2) 107.5fps  
  高速 →
MPEG-2 VIDEO VFAPI Plug-In 旧バージョンは DGMPGDec よりも低速であり、後段のフィルタやエンコーダがあくびをかいてCPUが遊んでしまうのも頷ける結果ですが、ver0.7.1は旧バージョン比1.8倍強のデコード速度を叩き出し、DGMPGDecをも大きく上回るパフォーマンスを発揮。処理の重たいフィルタを使ったりエンコーダの設定如何では、CPUが複数の処理を受け持つためベンチマーク結果ほどの速度向上率は見込めないでしょうが、それでも少なからず高速化を実感できると思われます。

また、MPEG-2 VIDEO VFAPI Plug-In 新旧バージョンで、スレッドの扱いにどのような差があるのか処理中のCPUロードアベレージをグラフ化しました。旧バージョン(ver.0.6.55a)は1コアのみを使い切り、他のコアが遊んでいますが、新バージョン(ver.0.7.1)は処理が各コアに分散され、全体的にCPUのロードアベレージが上昇しています(DGMPGDecはMPEG-2 VIDEO VFAPI Plug-In 旧バージョンと似たような挙動であるため割愛)。

↑旧バージョン(ver.0.6.55a)。赤がCPUコアの温度で緑がCPU占有率。
↑新バージョン(ver.0.7.1)。同じく赤がCPUコアの温度で緑がCPU占有率。処理が速いためグラフ(時間長)も短い。

【ベンチマーク】AviSynth編
セッティング
AviSynthでは warpsharpプラグインのLoadAviUtlInputPluginフィルタでMPEG-2 VIDEO VFAPI Plug-In(m2v.aui)をロードします。この際も m2vconf の設定が反映されるため、AviUtlと同様のセッティングを流用します。DGMPGDecの設定も基本的にAviUtlと同じですが、AviSynthオンリーで扱う人はYV12のままロードすることが多いため、YV12のベンチマークは idct=3, upConv=0 としています。

出力はavs2avi(v1.40a)を利用し、null出力にてMPEG-2のデコード速度を計測し、AviUtlと同様に処理時間からフレームレートを算出します。解像度1440x1080(60i)入出力はAviUtlと同条件。

結果(AviSynth v2.5.8)

MPEG-2 VIDEO Plug-In v0.6.55a 134.8fps  
MPEG-2 VIDEO Plug-In v0.7.1 174.4fps  
DGMPGDec ver.1.58(YUY2) 147.4fps  
DGMPGDec ver.1.58(YV12) 173.1fps  
  高速 →
こうして見ると全体的にAviSynthが速く、AviUtlとAviSynthの再エンコード処理における速度差は、MPEG-2のデコード速度も多少なりとは響いていたと言えそうな結果となっています。ここで注目すべきは、MPEG-2 VIDEO VFAPI Plug-In ver.0.7.1の高速化はAviUtlのほうが顕著に表れており、両者のデコード速度差が縮まっていること(AviUtl 159.5fps、AviSynth174.4fpsで速度差が1割もない)。そして、AviSynthにおいても MPEG-2 VIDEO VFAPI Plug-In ver.0.7.1 が DGMPGDecの速度にほぼ並んだこと(DGMPGDecが最も得意とするYV12ダイレクト出力においても、MPEG-2 VIDEO VFAPI Plug-In ver.0.7.1のYUY2出力が速度的に肩を並べた)2点に尽きると思います。

裏を返せば、DGMPGDecのYUY2出力は速度ペナルティが意外に大きく、YV12処理で一貫するならDGMPGDec一択であるものの、何らかの理由でYUY2処理を考慮するならMPEG-2 VIDEO VFAPI Plug-Inのほうがデコードは高速であると言えるでしょう。

総評
純粋なMPEG-2のデコード速度は MPEG-2 VIDEO VFAPI Plug-In ver.0.7.1 がDGMPGDecを一気に追い抜く結果を示しましたが、実際の処理における使い勝手を考慮すると、AACなどの音声をスプリットして書き出せる DGMPGDec のほうが少々便利かな……という点は揺るがない気がします。TV番組などの録画ファイルである場合、MPEG-2 VIDEO VFAPI Plug-In は他のツールで音声を分離してから扱うという手間が生じるため、バッチ処理を工夫しないとその速さを活かせないように思えます(開発意図からしても、音声周りの実装は今のままである可能性が高い)。とはいえ、やはりこのデコード速度は魅力的。

これらの結果から、MPEG-2 VIDEO VFAPI Plug-In でデコードしようかな~と思っている人は、バッチ処理を再検討してみてはいかがでしょうか。

追記:
MPEG-2 VIDEO VFAPI Plug-In ver.0.7.5 あたりで、環境によってはデコード速度が大幅に低下するケースを確認したため、茂木氏に報告し、この件を修正した ver.0.7.5a がリリースされました。記事ほど速度が出ないな……と感じられた場合はバージョンを確認し、ver.0.7.5a へ更新してみるのも手かと思われます。

  • リンク
  • MPEG-2 VIDEO VFAPI Plug-In(まるも製作所)
    AviUtl
    AviSynth

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

    × 2 = 8

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください