お知らせ: にーやんのブログ 2 に移転しました。こちらのブログは、2009 年末までに削除します。

スポンサード リンク

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, 84KB)

上記のスクリプトを、MPEG-1 形式の動画に変換してみました(30 フレーム以降をカットし、音声なしにしてあります)。

文字が上から下へと移動していると思います。ようやく形が見えてきました。

スポンサード リンク

Recent entries from same category
TrackBack ping me at
Trackbacks
[ No TrackBack ]
Comments
[ No Comment ]
Post a comment

writeback message: Ready to post a comment.













Remember the above info?

Preview here...

  • [Preview]ボタンをクリックすると、コメント内容をプレビューすることができます(JavaScript使用)。
  • スパム対策としてリファラチェックを行っています。セキュリティソフトの設定でリファラを無効にしていると投稿できません。
  • エントリの内容と無関係と思われるコメントやトラックバックは削除されます。
  • 当ブログへの言及リンクがないトラックバックはブロックされます。