サンプルスクリプト/複数行のテロップ

本日のメニュー

AviSynth 2.5.7 から、Subtitle フィルタに複数行サポートが追加されました。これにより、複数行のテロップ(スーパー(インポーズ)、字幕)の挿入が簡単に行えるようになりました。今回は、Subtitle を使って、複数行のテロップ付きの動画を作成してみることにしましょう。

なお、テロップの挿入に関する基本的なレシピは、サンプルスクリプト/テロップの挿入にあります。

使用するもの

  • Subtitle
  • BlankClip
    • テロップを挿入するソースとして使用。ほかのビデオクリップを使ってもよい。

作り方

  1. まず、サンプルスクリプト/テロップの挿入の手順で、空のビデオクリップ(320x240、$EFEFEF(灰色))に「Hello, World!」と表示させてみてください。
    # ビデオクリップの生成
    BlankClip(width=320, height=240, color=$EFEFEF)
    # テロップの挿入
    Subtitle("Hello, World!")
    
    d.png
  2. ここからが本題です。Subtitle フィルタで文字列を複数行にするには、2 つポイントがあります。1 つは改行させたい位置に \n*1 を追加すること。もう 1 つは、lsp パラメータで行間スペースの大きさを指定することです。たとえば、次のように記述します:
    # ビデオクリップの生成
    BlankClip(width=320, height=240, color=$EFEFEF)
    # テロップの挿入
    Subtitle("Hello, \nWorld!", lsp=0)
    
    「Hello, 」と「World!」のあいだで改行するように \n を入れ、さらに lsp パラメータを 0 に設定しました。
    e.png
    実際にプレビューしてみると、ちゃんと指定した位置で改行されているのがわかります。lsp = 0 なので、行間は詰まっていますね。試しに lsp の値を変更してみると、行間の大きさが変化するのがわかるでしょう。
  3. これで複数行のテロップが作成できるようになりました。しかし、このやり方では、行数の多いテロップ(あるいは AA など)を挿入したい場合には少し面倒です。そのようなときは、次のようにするとよいでしょう:
    # 変数 str に文字列を代入
    str = """
                   ∧∧\n
       ┃   ┏━┃     (,,゚∀゚)     ┃┃\n
     ━┏┛ ┏━┃ ━━/ つ━━┛ .┃┃\n
     ━┏┛ ┛  ┃   〜( ,ノつ      ┛┛\n
       ┛       ┛     (/        .┛┛
    """
    # text パラメータに str を指定
    Subtitle(str, font="MS Pゴシック", lsp=0) # 全角文字が含まれているのでフォントも変更
    
    str という変数に複数行の文字列を代入し、それを Subtitle フィルタの text パラメータに指定しています。このような長い文字列の場合、三連二重引用符(トリプルクォート、トリプルクォテーション、""")で囲んだほうが無難でしょう(下記のひとくちメモを参照)。行末に \n を付けることも忘れないでください。
  4. 最後に位置や文字の色を調整したスクリプトを示しておきます。
    # ビデオクリップの生成
    BlankClip(width=320, height=240, color=$EFEFEF)
    # 変数 str に文字列を代入
    str = """
                   ∧∧\n
       ┃   ┏━┃     (,,゚∀゚)     ┃┃\n
     ━┏┛ ┏━┃ ━━/ つ━━┛ .┃┃\n
     ━┏┛ ┛  ┃   〜( ,ノつ      ┛┛\n
       ┛       ┛     (/        .┛┛
    """
    # text パラメータに str を指定
    Subtitle(str, font="MS Pゴシック", 0, 70, text_color=$000000, halo_color=$EFEFEF, lsp=0)
    
    a.png

ひとくちメモ: 三連二重引用符を使う理由

AviSynth では、文字列を指定する際に二重引用符を使用します。このため、そのままでは二重引用符そのものを文字列の中に含めることができません。もし文字列の中に二重引用符が含まれていると、そこが文字列の終わりと判断されてしまい、エラーの原因となります。ただし、二重引用符を 3 つ連ねて(トリプルクォート)囲めば、文字列の中で二重引用符を文字そのものとして扱うことが可能になります(詳しくは、サンプルスクリプト/二重引用符のエスケープを参照)。

しかし、よく見てもらえればわかるように、上のスクリプトには三連二重引用符で囲まれた文字列に二重引用符は含まれていません。じつは上の例では、二重引用符は 1 つでも大丈夫です。あらかじめ二重引用符を 3 つ連ねることによって、文字列の中に二重引用符が含まれているケースと含まれていないケースのどちらでも使える汎用的なスクリプトにしているのです。

関連レシピ


*1 バックスラッシュ + n、日本語環境では、円記号 + n です。\n は他のプログラミング言語(C や Perl など)でも改行を表すエスケープシーケンスとして使用されています。

最終更新日時: 2014-03-11 (火) 03:51:23 (3692d)