AviSynth 2.6系 をMT化

更新履歴 [ 全て表示戻す ]
2018.07.21: AviSynth 2.6.0 用のMTに内容を更新

2014.07.09: 誤字脱字の修正
2009.03.06: 初出 (AviSynth 2.5.7、MT ver0.7)


このページは長い間 AviSynth 2.5系の情報を掲載していたが、AviSynth 2.6系の MT化手順 に内容を更新する事にした。(古い内容はこちらに移動)

3~4年もの間 情報収集していなかったため、以下に書くことはすべて今更なコトばかりかもしれない。また既に古くなっている情報もあるかもしれない。
(派生版の Avisynth+ などについては、勉強しようかスルーしようかすら悩んでいる所)

AviSynth 2.6系 の MT ファイル入手

ダウンロード

補足情報

インストール手順

インストールはこれで完了。

スポンサー リンク

ここから Avisynth 2.6 MT の注意事項

2.5.7 や 2.5.8 でバージョンアップを止めていたユーザーや、Avisynth 2.5.7 用のMT を利用していたユーザーは注意。色々と変わっている。

古いプラグインに注意

  • プラグインフォルダに予期しない古いdllバージョンがないことを確認しておく。
    • バージョン2012.04.03以降のプラグインのフォルダは、そのDLLの依存関係を検索する。
    • 過去system32フォルダにインストールする必要のあったプラグインも、pluginsフォルダに移動することが可能。
    • ただし、プラグインフォルダから 古いdllが見つかると、奇妙なエラーが発生する場合がある。

AviSynth 2.6系 と 2.5系の違いにについて

AviSynth 2.6系 のMTは、SetMTMode() コマンドのみ利用可能。
2.5系で利用できた「mt() コマンド」が使えないので注意。

※具体例

mt("LanczosResize(1280,720)",4) ・・・・ 利用できない
mt("""BicubicResize(1280,720)""",4) ・・・・ 利用できない
-------
SetMTMode(2,4)
BicubicResize(1280,720) ・・・・ 利用可能


あと、SetMTMode() のパラメータも2.5系の頃と異なるので注意

SetMTMode のパラメータについて

SetMTMode(N,M)
 N・・・・ MTのモード (主に1~3を利用する)
 M・・・・ スレッド数を指定する (0=AUTO)

SetMTModeコマンドは、AvisynthをMTモードに切り替えるもの。
Avisynth 2.6 MT - Doom9's Forum の該当部分を読んでみるのだが、分かりにくい上に 2.5系の頃とかなり異なるように思える。

SetMTMode(1)

  • distributor () など、このモード用に設計されたフィルタのみで利用可能。
  • Avisynthからの保護はない
  • script 内の call 1つごとに1つのフィルタ インスタンス

SetMTMode(3)

  • ソースフィルタで使用するモード。
  • Avisynthは出力要求を監視する。
  • script 内の call 1つごとに1つのフィルタ インスタンス
  • モード5も同様な動作をするがオーバーキルなので避けるべき

SetMTMode(2)

  • 残りの部分に使用する。
  • script の call それぞれで N(スレッド数)のインスタンスが生成される。

スレッド数について

  • スレッド数を 0 (AUTO) にすると、(恐らくだが) 自動でそのPC環境での最大数のスレッドが割り当てられると思われる。
  • 当PCの環境では、スレッド数が極端に多くなってもあまり高速化せず、CPU使用率の負担だけが高くなっていった。
  • 逆に速度が落ちるようなケースも見受けられたため、利用するソースの種類やサイズ、フィルタによってスレッド数は随時調整する必要があると思われる。

AviSynth 2.6 の MT、個人的なメモ

AviSynth 2.5系 の MT に慣れ過ぎていると、以下でつまづくので注意。
注意事項は赤文字で記してある。

サンプルスクリプト

LoadPlugin("E:\AviSynth\plugins\DGDecode.dll")
LoadPlugin("E:\AviSynth\plugins\warpsharp.dll")
LoadPlugin("E:\AviSynth\plugins\ffms2.dll")
# ffms2.dll をロードしなければ、MPEG2Sourceの読み込みがエラーになる (手元の環境では Simple x264_launcher のみで発生)

SetMemoryMax(1024)
SetMTMode(3,4)
MPEG2Source("hogehoge.d2v")
# ソース読み込みをMT化するには SetMTMode (3) を使う必要がある。
# ファイル読み込みは、3~4スレッド化が一番高速だった
# スレッド数を過剰に増やしても、多くの場合 CPU使用率が増えるだけで処理速度は上がらない

SetMTMode(3,10)
BicubicResize(1280,720,0,0.75)
# SetMTModeは (3)、(2) どちらでも動作した。
# SetMTMode (2) の方が高速に動作した。

SetMTMode(2,10)
TemporalSoften(2,6,12,10,2)
# TemporalSoften に SetMTMode(3)を使うと、微妙に結果が異なる&容量が増えた
return last

上記スクリプトのメモ書き

  • MT使ってても速度が出ないなあ・・・・と思ったら、ソース読み込み前にSetMTMode(3) が必要だった。
  • 今回の場合、ソース読み込み前のSetMTMode(3)は スレッド数3~4で十分。
    それ以上スレッド数を上げても、CPU負荷が増えるだけで速度は上がらなかった。恐らくソースが変われば最適なスレッド数は変わる。
  • BicubicResize
    • リサイズなどの軽い処理はコア数1.5倍くらいのスレッド数が一番高速となるように感じたが、今回はスレッド数2~24で速度は変わらなかった。
      ※ TemporalSoftenを加えた場合はスレッド数4~24で速度は変わらなかった。
      ※ スレッド数2は僅かに速度が出なかった
  • TemporalSoften
    • SetMTMode(2) と SetMTMode(3)でファイルサイズが異なる結果となった。SetMTMode(2)の方が本来の値を返していると感じた (ただし厳密なチェックはしていない)
    • こちらもスレッド数を変化させても、速度・ファイル容量ともに変化はなかった (1スレッドでも速度落ちない)。
  • その他
    • 変換中、上記条件いずれもCPU利用率は50%前後。
      恐らく読み込み速度が律速になっており、スレッド数を変更しても速度が変わらないと思われる。途中でスレッド数は変更できないのかも?まだそこまで調べていないのでよく分からない。
    • 現在の環境 では、プラグイン「ffms2.dll」を読み込まないと  (Simple x264_launcherのみ) MPEG2Source が読み込みエラーを起こす。
    • VirtualDubModなど、他のツールは「ffms2.dll」なしでも読み込みOK

その他メモ (ハイパースレッドについて)

  • MT 0.7 はHTT未対応だった。
    AviSynth 2.5.7 + MT 0.7 + Core i7 920 の頃は、ハイパースレッド有効にするとエンコーダーがかなりの確率で強制終了した。
  • 今回、AviSynth 2.6.0 + MT (20150220)  + Ryzen 2700X 環境にて、 ハイパースレッド有効にしても問題なく動作している。
    ※ただし今回はインタレ解除系や3Dノイズ除去系のフィルタはまだほとんど試していない

とりあえず ここまで分かった状態でしばらく使ってみて、気になるコトがあったら再び調べてみようと思う。このページの情報は以上。

あとがき

最後に。私事になるが、私は AviSynth 2.5系 を本当に長い間使っていた。私の場合 Simple x264_launcher が利用できれば 2.5系でも特に不満はなかったのだ。

  • AviSynth 2.6系は、2~3年前にインストールはしたものの、ロクに環境構築せず放っていた。このため、私の AviSynth 2.6 は、MT化した AviSynth 2.5系 と比較し全く速度が出ない状態だった。
  • この速度低下には、「2018年6月にPCを新調しベンチを行い、旧PCにて2012年頃に実行したベンチと比較を行う」まで、全く気が付いていなかった。(というか、この2~3年動画エンコほとんどできなかった)
  • で、あれこれ思い返してみると、AviSynth 2.6系に移行した際に、細かい詰めは一切行っていなかった事を思い出した。

このような経緯があり、今回の更新に至った次第。