あらためて言うまでもありませんが、AviSynthは動画編集用のスクリプト言語です。
スクリプトを記述することによって、ソースを読み込んだり、フィルタをかけたりします。このため、パラメータの指定の仕方がわかりづらかったり、使い勝手がよくないと感じることが、しばしばあります。
これはスクリプトゆえに生じ弊害とであると言えるでしょう。
しかし一方で、スクリプトだからこその柔軟性(自由度の高さ)もあります。
使いにくいと感じるフィルタがあれば、自分が使いやすいようにカスタマイズして関数化することができるのです。
これが「関数をつくる理由」のその2、フィルタのカスタマイズです。
あるフィルタを例に、具体的に見ていきましょう。
スクリプトを記述することによって、ソースを読み込んだり、フィルタをかけたりします。このため、パラメータの指定の仕方がわかりづらかったり、使い勝手がよくないと感じることが、しばしばあります。
これはスクリプトゆえに生じ弊害とであると言えるでしょう。
しかし一方で、スクリプトだからこその柔軟性(自由度の高さ)もあります。
使いにくいと感じるフィルタがあれば、自分が使いやすいようにカスタマイズして関数化することができるのです。
これが「関数をつくる理由」のその2、フィルタのカスタマイズです。
あるフィルタを例に、具体的に見ていきましょう。
Cropというフィルタがあります。
Crop(クロップ)は「縁を切り落とす」という意味の英語で、Cropフィルタは画像端の黒縁や、ビデオテープからキャプチャした際に入る画面下端のノイズなど、不要な部分を切り落とすために使用します。AviSynth内蔵のフィルタです。
Cropフィルタの使い方については、チュートリアルで説明していますので、そちらを参考にしてください。
さて私は、このCropフィルタを使っていて、少々「使いづらい」と感じました。
マニュアルを見ると、Cropの書式は、次のようになっています(※)。
Crop(クロップ)は「縁を切り落とす」という意味の英語で、Cropフィルタは画像端の黒縁や、ビデオテープからキャプチャした際に入る画面下端のノイズなど、不要な部分を切り落とすために使用します。AviSynth内蔵のフィルタです。
Cropフィルタの使い方については、チュートリアルで説明していますので、そちらを参考にしてください。
さて私は、このCropフィルタを使っていて、少々「使いづらい」と感じました。
マニュアルを見ると、Cropの書式は、次のようになっています(※)。
Crop(clip clip, int left, int top, int width, int height) Crop(clip clip, int left, int top, int -right, int -bottom) |
ご覧のように、Cropフィルタには2種類の書式があります。
※AviSynth2.5.3からalignパラメータが追加されましたが、ここでは話が複雑になるので省略します。alignパラメータについては、チュートリアルで簡単にですが説明していますので、そちらを参考にしてください。
※AviSynth2.5.3からalignパラメータが追加されましたが、ここでは話が複雑になるので省略します。alignパラメータについては、チュートリアルで簡単にですが説明していますので、そちらを参考にしてください。
Crop(clip clip, int left, int top, int width, int height) |
これはAviSynthのすべてのバージョンで共通して使える書式です。
![](./img/script/crop1.png)
図のピンク色の部分がCropする範囲を表しています。
この方法では、引数leftで左端のクロップ幅を、引数topで上端のクロップ幅を指定します。これはわかりやすいと思います。
残りの2つの引数、widthはクロップ後の画像の幅を、heightはクロップ後の画像の高さを指定します。
右端のクロップ幅と下端のクロップ幅は直接指定することができません。
例えば、右端にクロップしたい領域があるとします(図のrightの部分)。
このとき、rightの幅を決定するためには、leftとwidthから計算して調整する必要があります。
これは少し面倒です。
![](./img/script/crop1.png)
図のピンク色の部分がCropする範囲を表しています。
この方法では、引数leftで左端のクロップ幅を、引数topで上端のクロップ幅を指定します。これはわかりやすいと思います。
残りの2つの引数、widthはクロップ後の画像の幅を、heightはクロップ後の画像の高さを指定します。
右端のクロップ幅と下端のクロップ幅は直接指定することができません。
例えば、右端にクロップしたい領域があるとします(図のrightの部分)。
このとき、rightの幅を決定するためには、leftとwidthから計算して調整する必要があります。
これは少し面倒です。
Crop(clip clip, int left, int top, int -right, int -bottom) |
こちらはAviSynth2.0.1から追加された書式で、上下左右の各クロップ幅をそれぞれ指定することができます。
ただし右端と下端は、それぞれ-rightと-bottomのように、負の符号を付けて指定します。
これは、書式1と区別するための措置であると考えられます。負の符号を付けないと、-rightはwidth、-bottomはheightと解釈されます。
書式2は、書式1に比べると、わかりやすいようにも思えます。
しかし私は、負の符号を付けなければいけないことや、「左, 上, 右, 下」という指定順序が、直感的にわかりづらいと感じました。
以上のことから、私のCropフィルタに対する不満(というよりも、「ここが直れば、もっと使いやすいのに・・・」と思ったこと)をまとめると、次の3点になります。
ただし右端と下端は、それぞれ-rightと-bottomのように、負の符号を付けて指定します。
これは、書式1と区別するための措置であると考えられます。負の符号を付けないと、-rightはwidth、-bottomはheightと解釈されます。
書式2は、書式1に比べると、わかりやすいようにも思えます。
しかし私は、負の符号を付けなければいけないことや、「左, 上, 右, 下」という指定順序が、直感的にわかりづらいと感じました。
以上のことから、私のCropフィルタに対する不満(というよりも、「ここが直れば、もっと使いやすいのに・・・」と思ったこと)をまとめると、次の3点になります。
|
さて、これからが本番です。
上で挙げた3つの不満、これを元に、そしてこれを解消するべく、関数を作っていきます。
しかし、すでに説明が長くなってしまいましたので、具体的な関数の作成方法については、次回、行うこととします。
上で挙げた3つの不満、これを元に、そしてこれを解消するべく、関数を作っていきます。
しかし、すでに説明が長くなってしまいましたので、具体的な関数の作成方法については、次回、行うこととします。
前のページ | 次のページ |