Project N: 022 - 文字雨(文字の落下)
文字を上から下に移動させるには、どうすればいいのでしょうか。Subtitle フィルタの書式を思い出してみましょう。
Subtitle(clip clip, string text, int x, int y, int first_frame, int last_frame, string font, int size, int text_color, int halo_color, int align, int spc)
この中で、文字の位置に関係する引数は、x と y の 2 つです。このうち、縦方向の座標を指定する y を変化させれば、何とかなりそうです(本当か?)。文字の表示開始フレームと表示終了フレームを表す first_frame と last_frame も指定する必要があるでしょう。
BlankClip(width=320, height=240)
Subtitle("A", 4,0, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("A", 4,10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("A", 4,20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("A", 4,30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("A", 4,40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
return last
とりあえず、このような感じで書いてみました。A という文字を、0 フレームから 4 フレームまでの 各 1 フレームずつ、位置を変えて表示します。y の値が 10 ずつ増えていることに注目してください。

このように、文字が上から下へ落下しているように見える・・・はずです。パラパラマンガの要領ですね。
ただし、まだこの段階では、フレーム数が少なく、文字の表示時間も短いため、動画再生プレイヤーで再生しても、ほとんど真っ黒けの動画でしかないでしょうけれど。
では次に、もう少し文字数を増やしてみます。A, B, C, D, E の 5 文字を縦にならべて、同じように移動させます。
BlankClip(width=320, height=240)
# 0 フレーム
Subtitle("A", 4,0, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("B", 4,13, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("C", 4,26, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("D", 4,39, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("E", 4,52, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
# 1 フレーム
Subtitle("A", 4,0+10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("B", 4,13+10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("C", 4,26+10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("D", 4,39+10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("E", 4,52+10, 1,1, "Courier NEW", 18, $6FE47A, $11B301)
# 2 フレーム
Subtitle("A", 4,0+20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("B", 4,13+20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("C", 4,26+20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("D", 4,39+20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("E", 4,52+20, 2,2, "Courier NEW", 18, $6FE47A, $11B301)
# 3 フレーム
Subtitle("A", 4,0+30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("B", 4,13+30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("C", 4,26+30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("D", 4,39+30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("E", 4,52+30, 3,3, "Courier NEW", 18, $6FE47A, $11B301)
# 4 フレーム
Subtitle("A", 4,0+40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("B", 4,13+40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("C", 4,26+40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("D", 4,39+40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
Subtitle("E", 4,52+40, 4,4, "Courier NEW", 18, $6FE47A, $11B301)
return last
あらかじめ、A から E の各文字の間隔が一定になるように、y の値を調整しておきます。こうすることで、縦書きのようになります。そして、最初のスクリプトと同じように、y の値を一定の割合で増加させます。+n の部分がそれです。

このように、5 文字が連結した状態で落下する(しているように見える)と思います。
ただし、見てわかるように、このスクリプトは実用的ではありません。4 フレーム目でこの状態です。29.97fps の動画なら、1 秒でこの約 6 倍、1 分で約 360 倍の長さになってしまいます。
次回は、もう少しスクリプトを簡略化させる方法を考えてみたいと思います。
連載を再開するにあたって、前回から、いくつかの変更を行っています。変更点は、下記の通りです。
- Doom9's Forum - "The Matrix" Look [while keeping skin tones] の Soulhunter 氏の書き込みを参考にして、フォントとフォントの色を変更。
- カタカナからアルファベットに変更。
- 背景クリップの大きさを 320x240 に。
スポンサード リンク
Permalink | AviSynth::My Project | No Comment | No TrackBack | Edit
writeback message: Ready to post a comment.
- [Preview]ボタンをクリックすると、コメント内容をプレビューすることができます(JavaScript使用)。
- スパム対策としてリファラチェックを行っています。セキュリティソフトの設定でリファラを無効にしていると投稿できません。
- エントリの内容と無関係と思われるコメントやトラックバックは削除されます。
- 当ブログへの言及リンクがないトラックバックはブロックされます。



