AviSynthのぺーじ/return文の補足とクイズの答え

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

return文のうしろにreturn文?

 return文について少し補足をしておきたいと思います。

 return文はAviSynthの文法でも紹介したように、AviSynthにおける記述方法の一つです。

 returnは「返す(戻す)」という意味で、「return 式」で式(の結果=ビデオクリップ)を返す(戻す)ということを表しました。そして、return文によって返された(戻された)ビデオクリップがVirtualDubModなどのアプリケーションへ渡されるんでしたね。

colorbars_flip17.png

 たとえば、こちらのスクリプトをVirtualDubModで開くと、320x240のカラーバーが表示されます。

 「ColorBars(320, 240)」はColorBarsフィルタを実行する式を表すとともに、その結果としてのビデオクリップも表しました。

 ですから、「return ColorBars(320, 240)」で320x240サイズのカラーバーが作成され、そして表示されたのです。

 では、return文のあとにスクリプトを記述した場合はどうなるでしょうか?

 たとえば先程のスクリプトにつづけて、もうひとつreturn文を追加してみます。

colorbars_flip18.png

 この場合、最初のreturn文ですでに戻り値(return value)が宣言されていますので、2行目のreturn文は無視されます。

colorbars.png

return last

 もう一つreturn文に関するお話を。

 それはreturn lastは必要かということです。

 とりあえず「おまじない」みたいにつけとけ!とか言ってた人もいましたね。

 ・・・私です(笑)

 で、結論から言うと、「return lastがなくても大丈夫なことが多い」ということになります。

 カラーバーの時の話を思い出してください。

colorbars_flip1.png

 return lastは書いていませんが、このスクリプトを実行すれば、ちゃんと反転カラーバーが表示されましたね。

 このように変数指定が省略されている場合は、自動的に特別な変数lastが割り当てられるのでした。

colorbars_flip10.png

 つまり、上のスクリプトは、こちらのスクリプトと同様の処理を行っていることになります。

 ただし、この場合、return lastは必要です。

colorbars_flip24.png

 なぜなら、ビデオクリップは変数に代入されたまま放置プレイ(なんていい加減な表現なんだ!)されているからです。

error_colorbars_flip16.png

 実際、実行してみると、このようなエラーが出ました。

 つまり、変数を指定している場合は、ちゃんとreturn文で戻してやらないといけないということになります。

colorbars_flip9.png

 それはlast以外の変数を指定したときも同様です。

 左の例では変数clipが使われているので、return clipで戻します。

colorbars_flip25.png

 ちなみにreturn clipの後にreturn lastを付け加えても、すでにreturn clipで戻り値が指定されているのでreturn lastは意味を持ちません。

 何でもかんでも最後にreturn lastを書けばいいというものではないということですね。

 じゃあ、にーやんのサンプルスクリプトにreturn lastが書いてあるのはなぜ?

 おまじないです(笑)

クイズの答え

 さて、それではクイズの答え合わせです!

 ここにたどり着くまで長かったよ・・・_| ̄|○(笑)

 すでに問題を忘れてしまった人もいると思うので、まず問題から確認してみることにしましょう。

colorbars_flip11b.png

[ 問題 ]
左のスクリプトのreturnのうしろには何が入るでしょうか?答えは2つ。

 では、答えの一つ目。

colorbars_flip26.png

[ 答え1 ] video

 return videoでvideoを戻します。

 二行目を見てもらえばわかるように、videoとはlast.FlipVertical()のことです(videoに代入されている)ので、つまりこの場合、反転カラーバーを戻すことになります。

 二つ目。

colorbars_flip23.png

[ 答え2 ] last

 return lastlastを戻します。

 lastは一行目で指定されている変数ですので、通常のカラーバーを戻すことになります。

 この場合、二行目は無視されます。

 みなさん、わかりましたか?

 スクリプト入門第2章「はじめてのスクリプト」はこれで終わりです。

 スクリプトのすべて・・・とは言いませんが、これからAviSynthスクリプトをやっていく上で必要となる基本的な事柄は、ある程度、紹介することができたのではないかと思います。

 さて次回からは、これまでの内容をふまえて、もう少し発展的な内容に踏み込んで行こうかと思います。

 といっても、心配はいりません。

 これまで通り、なるべくわかりやすくやっていきますので。

 ていうか、わかりやすいのかな?こっちが心配だ(^^;

最終更新日 2003年12月23日

最終更新日時: 2014-03-12 (水) 23:36:41 (3697d)