Project N: 024 - 文字雨(Animateフィルタを使う)
関数化することによって、1 行で文字の縦書き(みたいなの)が可能になりました。
しかし、これだけでは不十分です。なぜなら、縦書き文字列を動かす(動いているように見せる)ためには、以下のように一部のパラメータの値を変化させたコマンドを、いちいち書かなければならないからです。
# Import("tategaki.avs") # インポートする場合
bg = BlankClip(width=320, height=240)
bg.tategaki(4, 0, 0, 0, "A", "B", "C", "D", "E")
tategaki(4, 10, 1, 1, "A", "B", "C", "D", "E")
tategaki(4, 20, 2, 2, "A", "B", "C", "D", "E")
return last
上のスクリプトをよく見ると、使っている関数は自作の tategaki 関数だけで、y, start, end の 3 つの値だけが一定の割合で変化していることがわかります。
AviSynth には、このようにパラメータが連続的に変化する同一のフィルタ(関数)を評価するメタフィルタがあります。それは、Animate フィルタです。
Animate フィルタの書式と引数
Animate(clip clip, int start_frame, int end_frame, string filtername, start_args, end_args)
- start_frame: 開始フレーム。
- end_frame: 終了フレーム。
- filtername: 評価するフィルタ(または関数)。
- start_args: start_frame 時の filtername の引数。
- end_args: end_frame 時の filtername の引数。
start_frame と end_frame の中間のフレームでは、引数は補間されます。
Animate フィルタを使ってみる

start_frame と end_frame のときに、それぞれ上の図の位置に文字が来るようにしてみます。このとき、start_frame では y = 0、end_frame では y = 170 です。
# Import("tategaki.avs") # インポートする場合
bg = BlankClip(width=320, height=240)
Animate(bg, 0, 29, "tategaki", 4,0,0,0,"A","B","C","D","E", 4,170,29,29,"A","B","C","D","E")
return last
start_frame = 0, end_frame = 29 とすると、スクリプトは上記のようになります。
Animate(0, 29, "tategaki", bg,4,0,0,0,"A","B","C","D","E", bg,4,170,29,29,"A","B","C","D","E")
Animate フィルタは、このように記述することもできます。
サンプル動画
上記のスクリプトを、MPEG-1 形式の動画に変換してみました(30 フレーム以降をカットし、音声なしにしてあります)。
文字が上から下へと移動していると思います。ようやく形が見えてきました。
スポンサード リンク
Permalink | AviSynth::My Project | No Comment | No TrackBack | Edit
writeback message: Ready to post a comment.
- [Preview]ボタンをクリックすると、コメント内容をプレビューすることができます(JavaScript使用)。
- スパム対策としてリファラチェックを行っています。セキュリティソフトの設定でリファラを無効にしていると投稿できません。
- エントリの内容と無関係と思われるコメントやトラックバックは削除されます。
- 当ブログへの言及リンクがないトラックバックはブロックされます。



