これは、かつて「AviSynthのぺーじ」として公開されていたものの "残骸" です。ここに記されている内容には、間違いが含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のドキュメントや AviSynth 公式サイトを参考にすることをおすすめします。私(にーやん)が管理人をつとめる AviSynth Wiki も利用してください。また、このページは、予告なしに削除される可能性もあります。
関数化の方針
 プリセットを使った関数の例として、次のような関数を考えてみました。
[関数の概要]
関数名 EasyResize
関数の概要 リサイズ用関数。幅と高さを指定してリサイズする以外に、プリセットで規定された解像度から選択することも可能にする。
関数化の方針
  • リサイズフィルタにはLanczosResizeを使用。
  • 引数はclip, width, heightとpresetとする。
  • preset省略時は、widthとheightで指定した値でリサイズ。
  • presetで、VCD、SVCDなど、よく使われるサイズを指定できるようにする。
  • 該当するpresetがない時は、エラーが出るようにする。
 以上のことをふまえて、まず、引数リストを考えます。
function EasyResize(clip clip, int "width", int "height", string "preset")
{
...
}
 widthheightは、直接、幅と高さを指定する時に使います。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日
前のページ | 次のページ