AviSynthPlugins のバックアップソース(No.6)

**プラグイン [#f54be8df]

これらの関数を用いて、AviSynthに外部プラグインを追加することができます。これらのプラグインの多くは、''とっても''役に立ちます!

 LoadPlugin(string filename [, ...])

LoadPluginは、1つ以上の外部プラグインを読み込みます。これらのプラグインは、AviSynth外部プラグイン・インターフェイスを使用していなければなりません。これに関しては、[[FilterSDK]]において、いくつかの予備のドキュメントが入手可能です。

 LoadVirtualDubPlugin(string filename, string filtername, int preroll)

LoadVirtualDubPluginは、VirtualDub向けに書かれたプラグインを読み込みます。"filename"は、.vdfファイルの名前です。この関数を呼び出した後、AviSynthにおいて、そのフィルタは"filtername"として知られるでしょう。VirtualDubフィルタは、RGB32のみをサポートしています。いくつかのフィルタの出力は、前のフレームに依存しています。それらのフレームを得るために、prerollは、少なくとも、フィルタがバッファをいっぱいにし、そして/または、内部変数を更新するために、前処理(pre-process)するのに必要なフレーム数に設定されるべきです。

多くのVirtualDubプラグイン用の便利なAviSynth風インターフェイスが、vdub_filters.avsというファイルで利用できます。vdub_filters.avsは、いくつかのAviSynthのディストリビューションやShareFunctionsのセクションに含まれています。それを使用するためには、ファイルの一番上にある変数VirtualDub_plugin_directoryを、あなたのVirtualDubプラグイン・ディレクトリに向くように編集し、そのファイルを(ScriptFunctionsにある[[Import]]を使って)あなたのスクリプトの中にインポートしてください。

 LoadVFAPIPlugin(string filename, string filtername)

LoadVFAPIPluginによって、VFAPIプラグインを利用できるようになります。VFAPIプラグインはTMPGEncのインポートプラグインでもありますが、TMPGのサポートは、今のところ、バギーなようです。

前述のコマンドは依然として存在しますが、AviSynthのv2.06から、AviSynthが使用するプラグイン・ディレクトリを明示することが出来るようになりました。すべてのプラグイン、ネイティブなAviSynthプラグインとVirtualDubプラグイン(VFAPIについては確かではない)を、このディレクトリに置くことによって、これらのコマンドは不要の長物と化します。GordianKnotのようなAviSynthを利用するほとんどのアプリケーションは、この変更を反映するような更新がなされておらず、自動的に生成される.avsファイルから、これらの関数が削除されるべきであるということに注意してください。

 LoadCPlugin(string filename [, ...])

C-プラグインは、LoadCPluginを使って読み込まれなければなりません。アドバイス: クラッシュを避けるために、このプラグインは、自動プラグイン読み込み用ディレクトリの外に置いてください。[[[ディスカッション]:http://forum.doom9.org/showthread.php?s=&threadid=58840]] [[[AVISynth C API (by kevina20723)]:http://kevin.atkinson.dhs.org/avisynth_c/]]

**オートロードされるプラグインと関数名の優先度 v2 [#d4bf64b8]

すべてのプラグインとユーザー定義関数や(グローバル)変数が書かれたスクリプトファイルを、拡張子.AVSと.DLLのあらゆるファイルが、スタートアップ時にロードされ、アンロードされ、そして、スクリプトが必要とする時に動的にロードされる、そのようなディレクトリに置くことが可能です。

このディレクトリに置かれるスクリプトは、関数の定義やグローバル変数だけを含むべきであり、メインの処理を行う部門を含むべきではありません(さもなければ、おかしなエラーが起こるかもしれません)。また、そのディレクトリに他のファイルを置くことも勧められません。

そのディレクトリは、レジストリに登録されています(レジストリキーは、v2.5で変更されました)。パスを設定するために、次の行を含む.REGファイルをダブルクリックして実行することができます(もちろん、あなたの実際のパスを書き入れてください):

 REGEDIT4
 
 [HKEY_LOCAL_MACHINE\SOFTWARE\Avisynth]
 "PluginDir2_5"="c:\\program files\\avisynth\\plugins"

関数名の優先順位は、次のとおりです:

+ユーザー定義関数(つねに最も高い優先度を持ちます)
+プラグイン関数(内蔵関数より高い優先度を持ちます - 内蔵関数をオーバーライドするでしょう)
+内蔵関数

それらのグループの内部で、最終的にロードされる関数が優先します。そのため、ネームスペース(namespace)の衝突におけるエラーはありません。

**オートロードされるプラグインと衝突する関数名 v2.55 [#k8da2d4c]

v2.55から、DLLName_function()のサポートが開始されました。問題は、2つのプラグインが同じ名前を付けられた異なる関数を持っているということにあります。必要とされる方の関数を呼び出すために、DLLName_function()のサポートが追加されました。オートローディングされたプラグインのみに動作します。LoadPluginで読み込まれたプラグインのために、追加の名前を自動生成することはありません。

いくつかのサンプル:

 # decomb510.dllからfielddeinterlaceを使用
 AviSource("D:\captures\jewel.avi")
 decomb510_fielddeinterlace(blend=false)

オート・プラグイン・ディレクトリの中にmpeg2dec.dllとmpeg2dec3.dllの2つのプラグインがあり、なおかつ、mpeg2dec.dllを使ってd2vファイルをロードしたい場合(YUY2で出力します):

 # mpeg2dec.dllからmpeg2sourceを使用
 mpeg2dec_mpeg2source("F:\From_hell\from_hell.d2v")

 # mpeg2dec3.dllからmpeg2sourceを使用
 mpeg2dec3_mpeg2source("F:\From_hell\from_hell.d2v")

[[[FAQ #3.4] :http://www.avisynth.org/index.php?page=Section+3%3A+Filters%2C+plugins+and+colorspaces#q3.4]] と[[[FAQ #3.5]:http://www.avisynth.org/index.php?page=Section+3%3A+Filters%2C+plugins+and+colorspaces#q3.5]]では、ダウンロードすることのできる、巨大なAviSynthプラグイン選集を見つけることができます。(([[外部プラグイン]]のページも参照。))

#hr
註: このページは、http://www.avisynth.org/AviSynthPluginsの日本語訳です。