AviSynth+の開発版(マルチスレッド動作)を使う

AviSynth+にはマルチスレッドで動作できる開発版が存在します。フィルタを多く使う場合、高速化するかもしれないので、興味がある方は導入してみてはいかがでしょう?

更新履歴

2016/7/25 内容をr1847からr2085に更新

2017/2/23 SetFilterMTMode変更

2018/4/10 内容をr2664に更新

最近更新が激しいようなので、内容がすぐ陳腐化してしまうかもしれません。ご注意ください。16bit/32bit等他の新機能についてはもう少し落ち着いてからにします。。。

AviSynth+開発版のインストール

基本的にpinterf氏のGithubを確認すれば最新版は追っかけられると思います

ダウンロード

Github – pinterf

Githubにて公開されています。

with-vc-redistとなっているものは、おそらくVisual Studio 2017のライブラリ同梱版と思われます。インストールしてない方はそちらをDLしましょう。

MT-filesonlyとなっているものはバイナリのみでインストーラーがありません。古いバージョンから手動でアップデートしたい方向けです。

インストール

インストーラーの方は安定版と同じように指示に従ってすすめるだけでよいでしょう。

以下はMT-filesonly向けの解説

64bitOSを使っている方は、AviSynth.dllを

32bit版(x86)は “C:\Windows\SysWOW64” に、

64bit版(x64)は “C:\Windows\System32” に、

それぞれ移動(上書き)してください。SysWOW64が32bit、System32が64bitです。逆にしないように注意してくださいね

32bitOSを使っている方はAviSynth.dllを”C:\Windows\System32″に移動(上書き)してください

1399

DirectShowSource.dllは、32bit版はPlugins+フォルダに、64bit版はPlugins64+フォルダにそれぞれ上書きしてください

他のプラグインの差し替え

Chikuzenさんが公開されていたプラグインや、nnedi3を差し替える必要があるかもしれません。詳しくはChikuzenさんのブログをご覧ください

外部リンク : Ch’s barn – いろいろ更新

nnedi3については、Doom9の該当スレッドをご覧ください

AviSynth.dllを差し替えたあとに、AviSynthが一切使えない(AvsPmodが開きすらしない)場合、プラグインが原因のようです。DirectShowSourceも古いのをそのまま使おうとすると起動できないようです

AviSynth+開発版の機能

開発版では様々な機能拡張が実装されています

  • マルチスレッドモード搭載
  • スクリプト関数拡張
  • 内蔵フィルタの一部高ビット深度対応

主なところはこんなところでしょうか。ひとまずマルチスレッドモードに絞って解説します

マルチスレッドで動かす

AviSynth2.6MTなど、以前に存在したAviSynthのマルチスレッド版では、MT()やSetMTMode()を使ってマルチスレッドで動かしていましたが、AviSynth+ではSetFilterMTMode()を使って、冒頭にあらかじめ使うフィルタのMTモードを宣言することでマルチスレッドの設定をします

MTモードの宣言

宣言は

または

このように行います。1 = MT_NICE_FILTER, 2 = MT_MULTI_INSTANCE, 3 = MT_SERIALIZED, 4 = MT_SPECIAL_MT です

例えばavsの冒頭に

と記述しておけばこのスクリプト内でのremovegrain()はすべてモード1(MT_NICE_FILTER)で動いてくれます

MTモードの設定のみを記述したavsiファイルを用意しておけば、それをインポートするだけで設定が完了します

以前のSetMTModeと違ってスクリプト内でころころモードを変える必要がないのでお手軽ですし、外部スクリプトも書き直すことなく簡単にMTで動かせます。管理も楽で非常に便利です

ちなみに

このように記述すると、全てのフィルタがモード3(MT_SERIALIZED)に設定されます

このように記述すると、removegrainはモード1、その他の関数はモード2に設定されます

なお、一部のプラグイン(さきほど紹介したDoom9のnnedi3など)は宣言しなくても自動で登録してくれるようです

MTモードの確認

気になるのはたくさんあるフィルタのそれぞれの正しいモードはいくつなの?ということですよね。AviSynth.nl から飛べるPadにまとめられています。Help filling MT modes のところにある、”AviSynth+ MT modes”をクリックして確認してください。“here”の方は編集したい人向けなので、ただ見るだけの人は飛ばないように!

条件によって最適なものが変わるものがあるので、Pad内に注釈があるものはよく読んでおきましょう。本体やプラグインが更新されると最適なモードが変わる場合があります。更新する場合はチェックしましょう。例えば、Ditherだったら、1.24までと1.25以降では設定が変わります。古いのを使っている人はこれを機会に更新しておきましょう

MTモードの有効化

SetFilterMTModeを設定するだけでは、まだマルチスレッドで動作しません。 return last の直前に Prefetch(n) を入れることで有効になります。nはスレッド数のようですが、CPUのスレッド数の半分程度にすると良いようです

サンプル

サンプルスクリプト

MTの設定を別のファイルにわける場合は

このようなavsiファイルを用意しておいて

インポートすることでMTで動かすことができます。Sample1とSample2は同じ動きをするようになります。これでTIVTC24P2や外部スクリプトのLSFmodもMTで動くようになります

今の私のSetFilterMTMode

かなりうさんくさいところが多いので絶対に信用しないで下さい。前述のpadでも訂正が入ることがあるようなので最適なモードを見つけるのは難しそうです。速いけどクラッシュしたり、一部乱れたりすることもあるようなので速さで信用しないようにしましょう

masktools2, rgtools, nnedi3など、自動登録してくれるバージョンを使っているものは宣言していません

古いものだと自動登録してくれなかったり、最適化されていなかったりするので、プラグインはしっかり新しいものを探すようにしましょう