avsfilter用定義ファイルの作成方法

以下の記事は、管理人の以前のホームページ内のコンテンツ「にーやんのAviSynthのぺーじ」で公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。

注意

以下の方法は、warpsharpプラグイン付属のサンプルやnullinfoさんのavsf_packを参考に作成したものです。

実際にいくつかのフィルタを使って動作確認しましたが、フィルタの種類によっては、うまく動かないかもしれません。

また、設定を間違えると、AviUtlやVirtualDubが強制終了してしまう可能性もあります。

もし以下の方法を参考にavsfilter用定義ファイルを作成する場合、これらの点に注意した上で、自らの責任において実行してください。

テンプレート

avsfilter用定義ファイルをより簡単に作成するためのテンプレートを用意しました。

下の枠で囲まれた部分をメモ帳などのテキストエディタにコピーし、適当な名前(例:sample.auf.avsなど)を付けて保存してください。

#//--- 1.外部ファイルの読み込み ---//
#<!--- 内部フィルタ使用時 / オートローディング時 --->
info = ""
#<!--- プラグインのパス(手動読み込み時) --->
#info = LoadPlugin("パス\warpsharp.dll")
#<!--- 関数定義ファイルのパス(手動読み込み時) --->
#info = Import("パス\avsf_func.avsi")

#//--- 2.フィルタ名(アプリ上での表記) ---//
filt = AvisynthFilters("AddBorders", info)

#//--- 3.VirtualDubでRGB32未対応 / AviUtlでYUY2未対応のフィルタ使用時 ---//
#<!--- YUY2に対応しているフィルタの場合 --->
#func = filt.AddFunction("ConvertToYUY2", hidden = true)
#<!--- YV12に対応しているフィルタの場合 --->
#func = filt.AddFunction("ConvertToYV12", hidden = true)

#//--- 4.関数名(実行するフィルタの名前) ---//
func = filt.AddFunction("AddBorders")

#//--- 5.パラメータ指定 ---//
#===============================================================================#
#<!--- Int型 --->
#func.AddTrack("引数名", デフォルト値, 下限, 上限)
#<!--- Float型 --->
#func.AddTrack("引数名", デフォルト値, Int下限, Int上限, Float下限, Float上限)
#<!--- String型 --->
#func.AddArray("引数名", デフォルト値, "プリセット0", "プリセット1", ...)
#<!--- Bool型 --->
#func.AddCheck("引数名", デフォルト値, false, true)
#<!--- 値の定義(設定時に表示されません) --->
#func.AddValue(値)
#===============================================================================#

###### パラメータ指定サンプル(AddBordersの場合) #####
func.AddTrack("左", 0, 0, 512)
func.AddTrack("上", 0, 0, 512)
func.AddTrack("右", 0, 0, 512)
func.AddTrack("下", 0, 0, 512)
func.AddValue($000000)

#//--- 6.3を有効にした場合 ---//
#<!--- VirtualDubの場合 --->
#func = filt.AddFunction("ConvertToRGB32", hidden = true)
#<!--- AviUtlの場合 --->
#func = filt.AddFunction("ConvertToYUY2", hidden = true)

#//--- 7.おわり ---//
return filt

次に、このテンプレートを使ったavsfilter用定義ファイルの作成方法を見ていきましょう。

作成手順

1.外部ファイルの読み込み

#<!--- 内部フィルタ使用時 / オートローディング時 --->
info = ""

AviSynth内蔵のフィルタを使う場合や、オートローディングで外部プラグインや関数定義ファイル(*.avsi)を読み込む場合は、このように設定します。

二重引用符("")の中には何も記述しません。

テンプレートでは、この方法がデフォルトで有効になっています。もし内部フィルタを使わない時やオートローディングを利用しない時は、行の先頭に#を付けてコメントアウト(無効化)するなどしてください。

#<!--- プラグインのパス(手動読み込み時) --->
info = LoadPlugin("パス\warpsharp.dll")

外部プラグインを手動で読み込む場合の記述例です。

通常のAVSファイルと同様に、LoadPluginフィルタで読み込みます。パスは自分の環境に合わせて記述してください。

テンプレートではコメントアウトしてありますので、有効にするためには行先頭の#を削除してください。

#<!--- 関数定義ファイルのパス(手動読み込み時) --->
info = Import("パス\avsf_func.avsi")

ユーザー定義関数の定義ファイルを手動で読み込む場は、Importフィルタを使います。

こちらもテンプレートではコメントアウトしてありますので、有効にするためには行先頭の#を削除してください。

2.フィルタ名の指定

#//--- 2.フィルタ名(アプリ上での表記) ---//
filt = AvisynthFilters("AddBorders", info)

赤い字の部分をavsfilterで使用するフィルタの名前に書き換えてください(テンプレートではAddBordersになっています)。

ただし、ここで指定するのは、AviUtlやVirtualDub上のフィルタメニューで表示される名前になります。

実際に使用するフィルタの名前である必要はありません。

たとえば、テンプレートの赤字の部分を、次のように書き換えたとします。

filt = AvisynthFilters("avsf_AddBorders", info)

すると、フィルタメニューには、フィルタ自身の名前ではなく、ここで指定した名前が表示されます(図はVirtualDubのもの)。

avsfilter_filtername.png

3.VirtualDubでRGB32未対応またはAviUtlでYUY2未対応のフィルタを使用する時

VirtualDubでRGB32に対応していないフィルタや、AviUtlでYUY2に対応していないフィルタを使用する場合は、ここで色空間を変換する必要があります。

#//--- 3.VirtualDubでRGB32未対応 / AviUtlでYUY2未対応のフィルタ使用時 ---//
#<!--- YUY2に対応しているフィルタの場合 --->
func = filt.AddFunction("ConvertToYUY2", hidden = true)
]]

ConvertToYUY2フィルタでYUY2に変換します。

AddFunctionによりavsfilterで利用するフィルタを追加することができますが、「hidden = true」で隠し属性となり、フィルタ設定画面には表示されません。

AviUtlでYUY2に対応しているフィルタを使用する場合は必要ありません。

#pre{{
#<!--- YV12に対応しているフィルタの場合 --->
func = filt.AddFunction("ConvertToYV12", hidden = true)

ConvertToYV12フィルタでYV12に変換します。

なお、ここで色空間を変換した場合、「作業手順 6」で色空間を戻す必要があります。

4.関数名の設定

#//--- 4.関数名(実行するフィルタの名前) ---//
func = filt.AddFunction("AddBorders")

「作業手順 3」でも紹介したAddFunctionで、実際にavsfilterで利用したいフィルタの名前を指定します(例はAddBordersフィルタ)。

ここでは、AVSスクリプト内でフィルタを呼び出すときに使う名前で指定します。「作業手順 2」のように好きな名前を付けていいわけではありません。

warpsharpプラグインのKenKunNRフィルタを例に考えてみましょう。

KenKunNRフィルタを使用したい時、AVSスクリプトには、次のように記述することになります(数値は一例)。

KenKunNR(256, 2, 20)

この時の紫色の部分((カッコ)の前の部分)が、ここで指定する名前になります。

func = filt.AddFunction("KenKunNR")

このように記述します。

5.パラメータ指定

次に、フィルタのパラメータに関する設定を行います。

パラメータの種類(データ型)によって設定の仕方は異なりますが、パラメータの名前やデフォルト値などを指定します。

種類別にまとめると、次のようになります。

#===============================================================================#
#<!--- Int型 --->
#func.AddTrack("引数名", デフォルト値, 下限, 上限)
#<!--- Float型 --->
#func.AddTrack("引数名", デフォルト値, Int下限, Int上限, Float下限, Float上限)
#<!--- String型 --->
#func.AddArray("引数名", デフォルト値(0), "プリセット1", "プリセット2", ...)
#<!--- Bool型 --->
#func.AddCheck("引数名", デフォルト値, false, true)
#<!--- 値の定義(設定時に表示されません) --->
#func.AddValue(値)
#===============================================================================#

Int型やString型というのは、パラメータがどのような種類のものであるか(整数や文字列など)を示すものです。詳しくは、AviSynthのヘルプを参考にしてください。

具体例をあげながら、種類別に指定方法を見ていくことにしましょう。

(1)Int型

#<!--- Int型 --->
#func.AddTrack("引数名", デフォルト値, 下限, 上限)

左から順に「パラメータの名前(引数名)」 -> 「デフォルト値」 -> 「最小値」 -> 「最大値」となります。

「パラメータの名前」は、二重引用符("")で囲む形で記述してください。ただし、必ずしもマニュアルに書かれている通りの名前である必要はありません。

「デフォルト値」「最小値」「最大値」についても、必ずしも各フィルタごとに規定されている正確な値である必要はありません。

ただし、「最小値」「最大値」に関しては、あまり小さすぎたり、大きすぎたりすると、フィルタ設定時にエラーが出るかもしれません。

func.AddTrack("左", 0, 0, 512)

これは、AddBordersフィルタのleftパラメータの設定例です。

この例のように、パラメータの名前に漢字を使用することも可能です。

実際の設定画面では、次のように表示されます。

avsfilter_int.png

Int型のパラメータは、スライドバーを動かすことで値を調節します(図はVirtualDubのもの)。

(2)Float型

#<!--- Float型 --->
#func.AddTrack("引数名", デフォルト値, Int下限, Int上限, Float下限, Float上限)
func.AddTrack("閾値", 0, -100, 150, -1.00, 1.50)

この場合、設定画面のスライドバーは-100〜150までの範囲で調節可能となりますが(AviUtl)、内部的には-1.00〜-1.50(設定画面上の数値の1/100)で処理されます。

avsfilter_float_auf.png

AviUtlの場合、Int下限〜Int上限で指定した範囲の数値で設定します。

ただし、内部的にはFloat型の値に変換されて、適用されます。

avsfilter_float.png

VirtualDubでは、小数で表示されます。

(3)String型

#<!--- String型 --->
#func.AddArray("引数名", デフォルト値, "プリセット0", "プリセット1", ...)

String型のデフォルト値は、プリセットを番号で指定します。

左から順に、0, 1, 2,...となります。

func.AddArray("levels", 0, "", "TV->PC", "PC->TV")

この場合、プリセットは左から順に"", "TV->PC", "PC->TV"となっていますが、これをデフォルト値で指定するときは、それぞれ0, 1, 2という数字で指定することになります。

上の例では、デフォルト値=0となっていますので、""がデフォルト値として割り当てられることになります。

avsfilter_string_auf.png

AviUtlでは、スライドバーでプリセットを選択します。

avsfilter_string.png

VirtualDub(Mod)では、プルダウンメニューから選択します。

(4)Bool型

#<!--- Bool型 --->
#func.AddCheck("引数名", デフォルト値, false, true)
func.AddCheck("Analyze", false, false, true)
avsfilter_bool.png

Bool型の引数は、設定画面ではチェックボックスで表現されます。

 チェックを入れると真(true)、外すと偽(false)となります。

(5)AddValue(値の定義)

#<!--- 値の定義(設定時に表示されません) --->
#func.AddValue(値)

これは、あらかじめ値を設定する場合に使用します。

avsfilterの設定画面では表示されませんが、クリップボードにコピーしたスクリプトの中には、ここで指定した値も挿入されています。

設定の必要のない引数や、avsfilterでは設定しづらい引数などに使うといいかもしれません。

テンプレートでは、AddBordersフィルタのcolorパラメータを$000000(黒)と定義しています。

func.AddValue($000000)

6. 3を有効にした場合

3.で色空間を変更した場合のみ、こちらも有効にします。

#//--- 6.3を有効にした場合 ---//
#<!--- VirtualDubの場合 --->
#func = filt.AddFunction("ConvertToRGB32", hidden = true)
#<!--- AviUtlの場合 --->
#func = filt.AddFunction("ConvertToYUY2", hidden = true)

7.おわり

#//--- 7.おわり ---//
return filt

最終更新日 2004年7月11日

最終更新日時: 2014-03-11 (火) 03:49:51 (3693d)