AviSynthのぺーじ/return文の補足とクイズの答え
これは、かつて「にーやんのAviSynthのぺーじ」として公開されていたものを転載したものです。内容は古く、間違いも含まれている可能性があります。より正確で新しい情報を知りたい場合は、AviSynth 付属のヘルプや AviSynth 公式サイトを参考にすることをおすすめします。AviSynth Wiki の AviSynth入門なども活用してください。
return文のうしろにreturn文? †
return文について少し補足をしておきたいと思います。
return文はAviSynthの文法でも紹介したように、AviSynthにおける記述方法の一つです。
returnは「返す(戻す)」という意味で、「return 式」で式(の結果=ビデオクリップ)を返す(戻す)ということを表しました。そして、return文によって返された(戻された)ビデオクリップがVirtualDubModなどのアプリケーションへ渡されるんでしたね。
たとえば、こちらのスクリプトをVirtualDubModで開くと、320x240のカラーバーが表示されます。
「ColorBars(320, 240)」はColorBarsフィルタを実行する式を表すとともに、その結果としてのビデオクリップも表しました。
ですから、「return ColorBars(320, 240)」で320x240サイズのカラーバーが作成され、そして表示されたのです。
では、return文のあとにスクリプトを記述した場合はどうなるでしょうか?
たとえば先程のスクリプトにつづけて、もうひとつreturn文を追加してみます。
この場合、最初のreturn文ですでに戻り値(return value)が宣言されていますので、2行目のreturn文は無視されます。
return last †
もう一つreturn文に関するお話を。
それはreturn lastは必要かということです。
とりあえず「おまじない」みたいにつけとけ!とか言ってた人もいましたね。
・・・私です(笑)
で、結論から言うと、「return lastがなくても大丈夫なことが多い」ということになります。
カラーバーの時の話を思い出してください。
return lastは書いていませんが、このスクリプトを実行すれば、ちゃんと反転カラーバーが表示されましたね。
このように変数指定が省略されている場合は、自動的に特別な変数lastが割り当てられるのでした。
つまり、上のスクリプトは、こちらのスクリプトと同様の処理を行っていることになります。
ただし、この場合、return lastは必要です。
なぜなら、ビデオクリップは変数に代入されたまま放置プレイ(なんていい加減な表現なんだ!)されているからです。
実際、実行してみると、このようなエラーが出ました。
つまり、変数を指定している場合は、ちゃんとreturn文で戻してやらないといけないということになります。
それはlast以外の変数を指定したときも同様です。
左の例では変数clipが使われているので、return clipで戻します。
ちなみにreturn clipの後にreturn lastを付け加えても、すでにreturn clipで戻り値が指定されているのでreturn lastは意味を持ちません。
何でもかんでも最後にreturn lastを書けばいいというものではないということですね。
じゃあ、にーやんのサンプルスクリプトにreturn lastが書いてあるのはなぜ?
おまじないです(笑)
クイズの答え †
さて、それではクイズの答え合わせです!
ここにたどり着くまで長かったよ・・・_| ̄|○(笑)
すでに問題を忘れてしまった人もいると思うので、まず問題から確認してみることにしましょう。
[ 問題 ]
左のスクリプトのreturnのうしろには何が入るでしょうか?答えは2つ。
では、答えの一つ目。
[ 答え1 ] video
return videoでvideoを戻します。
二行目を見てもらえばわかるように、videoとはlast.FlipVertical()のことです(videoに代入されている)ので、つまりこの場合、反転カラーバーを戻すことになります。
二つ目。
[ 答え2 ] last
return lastでlastを戻します。
lastは一行目で指定されている変数ですので、通常のカラーバーを戻すことになります。
この場合、二行目は無視されます。
みなさん、わかりましたか?
スクリプト入門第2章「はじめてのスクリプト」はこれで終わりです。
スクリプトのすべて・・・とは言いませんが、これからAviSynthスクリプトをやっていく上で必要となる基本的な事柄は、ある程度、紹介することができたのではないかと思います。
さて次回からは、これまでの内容をふまえて、もう少し発展的な内容に踏み込んで行こうかと思います。
といっても、心配はいりません。
これまで通り、なるべくわかりやすくやっていきますので。
ていうか、わかりやすいのかな?こっちが心配だ(^^;
最終更新日 2003年12月23日