AviSynthのぺーじ/演算子を使ったスクリプト 1

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

演算子を使ったスクリプトの一例

 前回、演算子について説明をしましたが、あれでは具体的な使い方まではわからないですよね。

 そこで、今回はもう少し具体的に、演算子の使い方を解説したいと思います。

 素材として使用するのは・・・

hanten_colorbar.png

 毎度おなじみの反転カラーバーです。

 ちなみに、私は別にカラーバーが好きというわけでもなければ、反転マニアでもありません(笑)

 このスクリプトを使うのもおそらくあと2回程度だと思いますので、もうしばらくおつきあいください。

 さて、これまではColorBarsフィルタの引数(widthheight)を、直接、数値で指定してきました。

 これを演算子を使って、画像の横幅の値から高さの値を自動的に算出するようにしてみます。画像の横幅の値は、従来通り、自分で指定することになりますが、高さはスクリプトの側で勝手に計算してくれます。

 その際、画像の縦横比(幅:高さ)が、つねに4:3になるようにしてみましょう。

 まず、画像横幅を表す変数をwidth、高さを表す変数をheightと名付けることにします。

 widthには、仮に320という数値を代入しておきます。

width = 320

 そしてColorBarsフィルタの引数widthには、変数widthをあてはめます。

ColorBars(width, ...)

 これで「width =」で指定した数値が引数widthに代入される(つまりカラーバーの横幅になる)ことになります。

 ただし厳密に言うと、変数widthと引数widthは別物になります。実際には、次のように引数widthに変数widthを代入している形になります。

ColorBars(width = width, ...)

 全然違う名前にしたほうがわかりやすかったかもしれませんね(汗)

 さて、次は高さを決めます。画像の縦横比が4:3になるようにするのですから、高さの変数heightは次のように表すことができます。

height = (width*3)/4(または(width/4)*3)

 x : y = 4 : 3 -> 4y = 3x -> y = 3x÷4、というような感じで計算したものです。小学校だか中学校だかの頃に、「比の内側を掛けたものと外側を掛けたものは等しい」みたいなことを習ったような遠〜い記憶があります(笑)

 ここまで解説することもないかもしれませんが、懇切丁寧がモットーのスクリプト入門なので、たとえ小学校に行ってない猫でもわかるようにやりますよ(パクリ)。

 ちなみに・・・

height = (width*3)/4(または(width/4)*3)

 このときの(カッコ)は、計算の優先順位を表すものです。(カッコ)の中から先に計算するってやつですね。

 すでにお気づきの方もおられるかもしれませんが、この場合、(カッコ)があってもなくても計算結果は同じです。単に見た目でわかりやすくするために付けただけだったりします。

 ところが、AviSynth2.53よりも前のバージョンでは、式を右から左へと計算するような仕様になっているため、予期せぬ結果になる恐れがあります。

 たとえば次のようなケースです。

x = 240/4/5

 本来なら、240/4(240÷4)で60、60/2(60÷2)で30となるはずのところが、右から左へと計算していくと、4/5(4÷5)で0.8、240/0.8(240÷0.8)で300になってしまいます。

 AviSynth2.5.3でこのバグ(?)は修正された模様ですが、念のため、特にそれ以前のバージョンを使用する場合は、計算の優先順位を示すために(カッコ)をつけるようにしたほうが安全でしょう。

 さてさて、heightの求め方が決まったところで、これをColorBarsフィルタの引数heightのところに代入します。

ColorBars(width, height)

 これでwidthの値さえ自分で指定すれば、heightは自動的にwidthの4分の3になるように計算されて、幅がwidth、高さがheightのカラーバーが生成されます。

 ここで、これまでに考えたスクリプトを、いったんまとめておきましょう。次のようなスクリプトになります。

operand1.png

 まず1行目で変数widthを指定します。この値は自分で自由に指定することができます。例では仮に320としています。

 2行目で、1行目で指定したwidthをもとにheightを計算します。

 3行目でColorBarsの引数としてwidthheightを代入しています。

 4行目はこれまでと同じです。

 FlipVertical必要ないじゃん。

 いや、まあ、そうなんですけどね(マニアだから・・・笑)

 それはさておいて、これを実行するとどうなるでしょうか。

flipvertical2.png

 width = 320ですから、

 height = (320*3)/4  height = 240

 よって、320x240サイズの反転カラーバーができます。

operand2.png

widthの値を240にしてみました。

operand2_colorbar.png

 height = (240*3)/4  height = 180

 240x180の反転カラーバーになりました。

 この程度だったら、素直に「ColorBars(240, 180)」としたほうが早いような気もします(笑)

 前にも書きましたが、自分で関数を作るときには、演算子を使ったこのような記述の仕方というのは重要になってきますので、一応、覚えておいて損はないと思います。

 ところで、このスクリプトにはある問題点があります。

 そのあたりの話から、次回、もう少しだけ演算子を使ったスクリプトの例を紹介したいと思います。

最終更新日 2003年12月6日

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