AviSynthのぺーじ/ラッパー関数とデフォルト値の設定

これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや AviSynth 公式サイトを参考にすることをおすすめします。AviSynth WikiAviSynth入門なども活用してください。

ラッパー関数

 前回作成したEasyClipping関数では、実際には、関数内部でCropフィルタを実行していました。外見はEasyClipping関数ですが、中身はCropフィルタです。

 このように、中にフィルタを包む(Wrap)ような関数を、ラッパー関数(Wrapper Function)といいます。

 ラッパー関数は、設定する必要のないパラメータをオプション化するためにデフォルト値を埋め込んだり、プリセット(あらかじめ設定されたパラメータのサンプル)を使えるようにしたりします。

 詳しくは、AviSynth.orgのページを参考にしてください。

デフォルト値の設定

 上で述べたように、ラッパー関数では、自分なりのデフォルト値を埋め込むことが可能です。そこで、EasyClipping関数でも、デフォルト値を設定してみることにしましょう。

 例えば、xという引数(変数)のデフォルト値は、次のように記述して設定します。

x = default(x, y)

 これは、次の省略形(shorthand)です。

x = defined(x) ? x : y

 三項演算子が使われていますね。これは、「xと定義されたらx、そうでなければyを、xに代入する」ということを表しています。

 では、「default(x, y)」を使って、EasyClipping関数の引数rightのデフォルト値を設定してみましょう。

right = default(right, 8)

 このようになります。

 この場合、rightが定義(指定)されていればその値を、定義されていなければ8を、rightに代入することになります。

EasyClipping(0, 0, 8)

 例えば、EasyClipping関数を使うときに、このように記述したとします。このとき、rightは指定されていませんので、デフォルト値のright=8が使われます。

EasyClipping(0, 0, 8, 8)

 つまり、このように記述した場合と同じ結果になるというわけです。

 同様に、top, bottom, leftのデフォルト値も設定してみましょう。

function EasyClipping(clip clip, int top, int bottom, int left, int right )
{
#//--- デフォルト値の設定 ---//
top = default(top, 0)
bottom = default(bottom, 0)
left = default(left, 8)
right = default(right, 8)
#//--- widthとheightを求める ---//
width = Width(clip) - (left + right)
height = Height(clip) - (top + bottom)
#//--- Cropフィルタ(書式1) ---//
clip = Crop(clip, left, top, width, height)
#//--- return文 ---//
return clip
}

 それぞれ、top=0, bottom=0, left=8, right=8をデフォルト値に設定してみました。

ColorBars(720, 480)
EasyClipping()

 ただし、この状態で上のスクリプトを実行すると、エラーが出てしまいます。

args_error.png

 「Invalid arguments to function "EasyClipping"(関数"EasyClipping"に不正な引数)」というエラーです。

 じつは、引数リストの書き方に原因があります。引数を省略した場合にデフォルト値を適用するためには、引数リストの書き方を変更しなければなりません。

 次回へつづく。

最終更新日 2004年8月4日

最終更新日時: 2014-03-12 (水) 23:37:06 (1990d)