先日、低周波成分保護フィルタとスムージングフィルタを組み合わせた「疑似モスキートNRフィルタ」を紹介しましたが、従来よりあった本家スムージングフィルタにSIMD命令(SSE2やSSSE3)で改良を施した「スムージングフィルタSIMD」が一週間前、BeanのAviUtlプラグイン置き場さんで公開されました。

使用してみたところ、体感できるほど処理は速くなっているのですが、実際にどの程度高速化したのか明確な数値を採るため処理ベンチマークを行ってみました。

SSSE3版で2.5倍、SSE2版も約2.4倍の高速化を達成
テストは「スムージングフィルタSIMD」のみの処理速度と、低周波成分保護フィルタを組み合わせた「疑似モスキートNR」処理の2種で行い、それぞれ同様のソース条件でSSSE3版、SSE2版、本家版を実行。2種の処理ともに本家フィルタを大幅に凌ぐ処理速度を発揮し、SSSE3版にいたっては約2.5倍ほど高速になっています。

  • テストソースとその環境
  • 1フレームの1440x1080/YUY2映像をAviSynthで読み込み、それを4,000フレームに増やしつつAvisynth Script File ReaderにてAviUtlに渡します。出力はNULL出力プラグインで行い、ファイル入出力ともにストレージへの実アクセスによるオーバーヘッドをほぼ無くしています。映像の複雑さや時間軸(動き等)で処理速度が大きく変動するフィルタではないため、このようにしました。

    なお、この入出力処理における基本スループット(フィルタ全OFF。ストリームコピーではない)は約336fpsです。

  • PC構成とテストフィルタ
  • CPU : Intel Core i5-2500K 3.7GHz(TBによる周波数変動を無効化するため100MHz×37倍に固定)
    Memory : DDR3-1333 4GB×2(8GB)
    OS : Windows7 Professional 64bit
    AviUtl 0.99j
    スムージングフィルタVer0.3(本家)
    スムージングフィルタSIMD v0.3b(SSE2/SSSE3版同梱)

    テスト結果は以下のとおりです。

     

    【テスト結果】スムージングフィルタのみ
    処理に費やした時間から速度をフレームレートとして算出。本家スムージングフィルタは約34fps程ですが、スムージングフィルタSIMDはSSE2/SSSE3版双方ともに80fpsを超える圧倒的な処理速度を見せつけました。この速度差は、本家フィルタの約2.5倍前後に達します。

    また、CPUのロードアベレージも本家・SIMD版ともに殆ど同じことから、積極的にSIMD化した効果が出ているといえそうです。

    スムージングフィルタ(本家) 34.453fps  
    スムージングフィルタSIMD(SSE2) 83.682fps  
    スムージングフィルタSIMD(SSSE3) 86.207fps  
      高速 →
    若干ですがSSSE3版のほうが速いため、Intel Core2以降またはXeon 5100シリーズ以降のプロセッサをお持ちの方は、SSSE3版を使用したほうがちょっぴり幸せかもしれませんが(ほんの数%程度ですが)、AMD系CPUはSSSE3非対応ですので、自ずとSSE2版を使うことになるでしょう。

    なお、近日リリース予定のコードネームBulldozerコアプロセッサ(FX-8150など)はSSSE3/SSE4.x/AVX命令対応となっています。

     

    【テスト結果】スムージングフィルタ+低周波成分保護フィルタ
    低周波成分保護フィルタの処理が入るため、フィルタ単体よりも速度は低下しますが、それでも本家フィルタのみで処理をした場合の2倍近くも速く、疑似モスキートNRとしてフィルタリングしてもあまり重く感じないレベルに改善されています。

    スムージングフィルタ(本家) 29.585fps  
    スムージングフィルタSIMD(SSE2) 60.150fps  
    スムージングフィルタSIMD(SSSE3) 61.924fps  
      高速 →
    実際には、他のフィルタや後段のエンコーダがCPUリソースを奪い合うため、本家とSIMD版の速度差は多少縮まると思いますが、データを受けて処理を終えるまでの時間が短い(処理が速い)に越したことはないため、スムージングフィルタ単体や疑似モスキートNRを利用している人には嬉しいSIMD化・改良といえそうです。

  • リンク
  • スムージングフィルタ(がらくたハウスのがらくた置き場:本家)
    スムージングフィルタSIMD(BeanのAviUtlプラグイン置き場)
    低周波成分保護フィルタ (スキマ産業)

    1件のコメント

    1. 初めまして、動画編集の勉強中にここにたどり着いた者です。

      今回の記事についてではなく、前サイトの09/06/04について質問があるのですが、ログの方にはコメント出来ないのでここに書きました。
      場違いでしたら削除をお願いします。

      「◇C.YUY2ソース(BT.709)→AviUtlのBT.709色域入力→AviUtlのBT.601色域出力→YUY2(BT.601)保存」についてなのですが、これはリサイズして縦719以下にする場合は問題ないのでしょうか?(調べたところSD解像度ではBT.601を使うとあったため)

      それとも、縦719以下にリサイズするにしてもソースがBT.709の場合は「◇B.YUY2ソース(BT.709)→AviUtlのBT.709色域入力→AviUtlのBT.709色域出力→YUY2(BT.709)保存」が正解なのでしょうか?

      色域について調べてもいまいち理解できないところがあり、質問させていただきました。
      もしよろしければお答えをお願いします。

      勉強中
    2. 勉強中さんはじめまして。

      以前の記事にコメント欄がないのはこちらの不備ですので、ここでも結構です。

      AviUtlの色域入力についてですが

       ・「Aviutlの入力色域は入力ソースの色域を指定」
       ・「AviUtlの出力色域は出力ファイル(映像)の色域を指定」

      と分けて考えると良いかもしれません。

      例えば入力ソースがBT.709であれば、AviUtlの入力色域もBT.709にします。このとき、出力解像度を意識する必要はまったくありません。

      出力色域は、一部アプリケーションが縦720以上でBT.709、縦719以下でBT.601判定する点を考慮し──

       ・出力解像度が縦719以下(SD映像など)であれば「AviUtlの出力色域をBT.601」
       ・出力解像度が縦720以上であれば「AviUtlの出力色域をBT.709」

      にセットしておくのが無難でしょうか。

      勉強中さんの質問からすると、どうやら縦719以下(SDクラス)の解像度で出力されるようですので、AviUtlの設定は入力BT.709、出力BT.601で良いかと思われます。

      ———-
       ここからは補足ですので読み飛ばしていただいて結構ですが、色域は解像度で決められているわけでないため、HD映像ソースだからBT.709、SD映像ソースだからBT.601と決めつけられない部分があります(ややこしいのですが)。

      日本の地デジ放送についても解像度に関係なくBT.709であったり(HDだけでなくSD送信(*1)もBT.709)、ゲーム等の映像をPV3やPV4でキャプチャした映像は解像度に関係なくBT.601になります。

      この辺りは、放送規格(ARIB)やコーデックの仕様を把握しておくことで対処できますので、勉強中さんがご自身で「どういう機器(またはコーデック)でどの映像を扱っているのか」という点さえ把握されていれば問題ないと思います。

      不明な点がありましたら、遠慮無くご質問ください~。

      (*1)
      ARIB STD-B32 2.5版 第1部-第5章(5.2)「低解像度映像サービス6における映像符号化パラメータの制約条件」より
      http://www.arib.or.jp/english/html/overview/doc/2-STD-B32v2_5.pdf

      POP
    3. わかりやすい解答ありがとうございます。
      補足にある地デジからのエンコで悩んでおりました。

      動画関連でも特に色調空間(と言うか色の扱い全部)について知識不足でして、現在勉強中です。

      POPさんの書く記事は全体的にわかりやすくてすごく助かっています。
      今の私には少しレベルが高いことが多いですが…

      それでは、重ねてですがありがとうございました。
      これからの記事も楽しみにしています。

      勉強中

    コメントは受け付けていません。