AviSynthのぺーじ/プリセット2:プリセットを使った関数
これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや AviSynth 公式サイトを参考にすることをおすすめします。AviSynth Wiki の AviSynth入門なども活用してください。
関数化の方針 †
プリセットを使った関数の例として、次のような関数を考えてみました。
[関数の概要]
- 関数名
- EasyResize
- 関数の概要
- リサイズ用関数。幅と高さを指定してリサイズする以外に、プリセットで規定された解像度から選択することも可能にする。
- 関数化の方針
- リサイズフィルタにはLanczosResizeを使用。
- 引数はclip, width, heightとpresetとする。
- preset省略時は、widthとheightで指定した値でリサイズ。
- presetで、VCD、SVCDなど、よく使われるサイズを指定できるようにする。
- 該当するpresetがない時は、エラーが出るようにする。
以上のことをふまえて、まず、引数リストを考えます。
function EasyResize(clip clip, int "width", int "height", string "preset") { ... }
widthとheightは、直接、幅と高さを指定する時に使います。int型です。
presetは、プリセット用の引数です。SelectByStringフィルタの引数s(search string)に代入しますので、string型とします。
プリセット案 †
次に、SelectByStringの書式に従って、プリセット部分を考えていきます。
SelectByString(string s, string key1, value1 [, string key2, value2 [, ...]] [, "else"])
SelectByStringの引数s(search string)には、上で述べたようにEasyResize関数の引数presetをあてはめます。
次に、「string key1, value1[, string key2, value2 [, ...]]」の部分を考えます。
keyNとvalueNは2つ1組で、埋め込みたいプリセットの分だけ設定します。keyNはプリセットの名前、valueNはフィルタの設定です。
SelectByStringでは、presetとkey1が一致すればvalue1を返し、presetとkey2が一致すればvalue2を返し・・・というように機能するんでしたね。
N | keyN | valueN |
---|---|---|
1 | "default" | "LanczosResize(clip, width, height)" |
2 | "VGA" | "LanczosResize(clip, 640, 480)" |
3 | "QVGA" | "LanczosResize(clip, 320, 240)" |
4 | "VCD" | "LanczosResize(clip, 352, 240)" |
5 | "SVCD" | "LanczosResize(clip, 480, 480)" |
6 | "HalfD1" | "LanczosResize(clip, 352, 480)" |
VGA、QVGA、VCD、SVCD、HalfD1の5つに、デフォルト(default)を加えた6つのプリセット案を考えました。
defaultは、他の5つのプリセットを使わない時用の設定です。
関数に次の一行を付け加えておくことで、preset省略時はpreset="default"を指定したのと同じになるようにすることができます。
preset = default(preset, "default")
これで、presetを指定しなかった(省略した)場合に、preset="default"(key1)となり、widthとheightの値でリサイズ(value1)します。
このプリセット案を、SelectByStringの書式にあてはめて記述すると、次のようになります。
s = SelectByString(preset, \ "default", "LanczosResize(clip, width, height)", \ "VGA", "LanczosResize(clip, 640, 480)", \ "QVGA", "LanczosResize(clip, 320, 240)", \ "VCD", "LanczosResize(clip, 352, 240)", \ "SVCD", "LanczosResize(clip, 480, 480)", \ "HalfD1", "LanczosResize(clip, 352, 480)", \ else = "")
最後のelseは、該当するプリセットがなかった場合に返す値の設定です(省略可)。
ここでは、""を返すように設定しました。これを利用して、タイプミスがあった場合に、エラーを返すようにします。
最終更新日 2004年8月31日