Project N: 023 - 文字雨(関数化してみる)
前回のスクリプトは、あまりにも長すぎて、とても実用的なものではありませんでした。とりあえず今回は、文字を縦書きにする部分を関数にして、少し簡略化してみたいと思います。
last = BlankClip(width=320, height=240)
last = last.Subtitle("A", 4,0, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
last = last.Subtitle("B", 4,13, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
last = last.Subtitle("C", 4,26, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
last = last.Subtitle("D", 4,39, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
last = last.Subtitle("E", 4,52, 0,0, "Courier NEW", 18, $6FE47A, $11B301)
return last
これは前回の 2 つ目のスクリプトから、0 フレーム目の部分だけを抜き出して、クリップの変数を明示したものです。AviSynth では、変数が省略された場合、直前に処理されたクリップという意味の特別な変数 last が割り当てられます。これは、ただそれを省略せずに書いただけです。ちなみに、この場合、「return last」は省略することができません。
# 背景
bg = BlankClip(width=320, height=240)
# 固定値の指定
font = "Courier NEW" # フォント
font_size = 18 # フォントのサイズ
font_color = $6FE47A # フォントの色
halo_color = $11B301 # 文字の縁の色
# 縦書き
c1 = bg.Subtitle("A", 4,0, 0,0, font, font_size, font_color, halo_color)
c2 = c1.Subtitle("B", 4,13, 0,0, font, font_size, font_color, halo_color)
c3 = c2.Subtitle("C", 4,26, 0,0, font, font_size, font_color, halo_color)
c4 = c3.Subtitle("D", 4,39, 0,0, font, font_size, font_color, halo_color)
c5 = c4.Subtitle("E", 4,52, 0,0, font, font_size, font_color, halo_color)
# return 文
return c5
次に、フォントやフォントサイズなどの固定された値を、あらかじめ変数指定してみました(4 ~ 7 行目)。クリップの変数もわかりやすいように(?)、それぞれ違う名前を割り当ててみました。
Subtitle フィルタの x, y, first_frame, last_frame と 5つの文字(文字列)は、毎回、別の値を指定する可能性があります。そのため、これらの値(+clip)は、関数の引数として指定できるようにします。
つまり、引数リストの中身は、以下のようになります。
- c: 入力クリップを受け付ける部分。clip 型。
- x, y: 文字の位置を指定。Subtitle フィルタの x と y 。int 型。
- start, end: Subtitle フィルタの first_frame と last_frame。int 型。
- t1 ~ t5: 文字を指定。string 型。
では、関数化してみましょう。関数名は「tategaki」にして、引数リストと関数のコマンドを指定します。
function tategaki(clip c, int x, int y, int start, int end,
\ string t1, string t2, string t3, string t4, string t5)
{
# 固定値の指定
font = "Courier NEW" # フォント
font_size = 18 # フォントのサイズ
font_color = $6FE47A # フォントの色
halo_color = $11B301 # 文字の縁の色
# 縦書き
c1 = c.Subtitle(t1, x,y, start,end, font, font_size, font_color, halo_color)
c2 = c1.Subtitle(t2, x,y+13, start,end, font, font_size, font_color, halo_color)
c3 = c2.Subtitle(t3, x,y+26, start,end, font, font_size, font_color, halo_color)
c4 = c3.Subtitle(t4, x,y+39, start,end, font, font_size, font_color, halo_color)
c5 = c4.Subtitle(t5, x,y+52, start,end, font, font_size, font_color, halo_color)
# return 文
return c5
}
関数のコマンドは、さきほどのスクリプトの背景(1-2 行目)以外の部分と、大きく異なる部分はありません。入力クリップを受け入れる引数は「c」ですので、10 行目を「c1 = bg.Subtitle(...」から「c1 = c.Subtitle(...」に変更しています。
# Import("tategaki.avs") # インポートする場合
bg = BlankClip(width=320, height=240)
bg.tategaki(4, 0, 0, 0, "A", "B", "C", "D", "E") # 「tategaki(bg, 4, ...」でも可
return last
あとは、このように書けば、前回と同じように縦書き表示が可能になります。
tategaki 関数は、同じスクリプトの任意の場所に書いておくか、別の avs ファイルに保存して import フィルタでインポートしてください。
しかし、まだこれで終わりではありません。
ユーザー定義関数作成の参考になるかもしれないページ
スポンサード リンク
Permalink | AviSynth::My Project | No Comment | No TrackBack | Edit
writeback message: Ready to post a comment.
- [Preview]ボタンをクリックすると、コメント内容をプレビューすることができます(JavaScript使用)。
- スパム対策としてリファラチェックを行っています。セキュリティソフトの設定でリファラを無効にしていると投稿できません。
- エントリの内容と無関係と思われるコメントやトラックバックは削除されます。
- 当ブログへの言及リンクがないトラックバックはブロックされます。



