AviSynthのぺーじ/ラッパー関数とデフォルト値の設定
これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや AviSynth 公式サイトを参考にすることをおすすめします。AviSynth Wiki の AviSynth入門なども活用してください。
ラッパー関数 †
前回作成したEasyClipping関数では、実際には、関数内部でCropフィルタを実行していました。外見はEasyClipping関数ですが、中身はCropフィルタです。
このように、中にフィルタを包む(Wrap)ような関数を、ラッパー関数(Wrapper Function)といいます。
ラッパー関数は、設定する必要のないパラメータをオプション化するためにデフォルト値を埋め込んだり、プリセット(あらかじめ設定されたパラメータのサンプル)を使えるようにしたりします。
詳しくは、AviSynth.orgのページを参考にしてください。
- Wrapper Function
デフォルト値の設定 †
上で述べたように、ラッパー関数では、自分なりのデフォルト値を埋め込むことが可能です。そこで、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()
ただし、この状態で上のスクリプトを実行すると、エラーが出てしまいます。
「Invalid arguments to function "EasyClipping"(関数"EasyClipping"に不正な引数)」というエラーです。
じつは、引数リストの書き方に原因があります。引数を省略した場合にデフォルト値を適用するためには、引数リストの書き方を変更しなければなりません。
次回へつづく。
最終更新日 2004年8月4日