1文字ずつ表示させる(ルパン三世のタイトル風に文字を表示する)

AfterEffects 6.5はテキストレイヤーに文字を設定していくことで一定時間ごと表示する文字を変える事ができます。まあ、アニメのルパン三世のオープニングタイトルのような感じと言った方が分かりやすいかもしれません。
ところが、実際にこれをAfterEffects 6.5でやろうとすると手作業なので面倒です。こういう面倒なことはJavaScriptを使うと簡単にできたりします。まず、以下の1行を入力して実行してみてください。

app.project.activeItem.layers.addText("Sample");

これだけで自動的にテキストレイヤーが追加され画面にSampleという文字が表示されます。フォントやサイズなどは、文字パレットであらかじめ設定しておいてください。
表示する文字を改行したい場合(MacOS Xの場合)は以下のように改行コードを入れます。nなどエスケープ文字で改行することはできないためです。

CR = String.fromCharCode(13);
layObj = app.project.activeItem.layers.addText("Sample"+CR+"Text");

とりあえず、文字の表示はできましたが、このままでは1文字ずつ表示させることができません。以下のスクリプトは、あらかじめ設定されている文字を1秒ごと1文字ずつ表示するものです。(注意点としてカレントタイムマーカー(現在位置)を一番左端(0秒)にしておいてください)

txt = "アフターエフェクツ";
layObj = app.project.activeItem.layers.addText();
for (i=0; i<txt.length; i++)
{
layObj("テキスト")["ソーステキスト"].setValueAtTime(i,txt.charAt(i));
}

一番最初の

txt = "アフターエフェクツ";

のアフターエフェクツの文字を変更すれば、いろいろな文字で表示させることができます。このスクリプトは1秒ごとに文字を表示しますが、もっと早く表示させたい場合には以下のようにします。

fps = 10 / 30;
txt = "アフターエフェクツ";
layObj = app.project.activeItem.layers.addText();
for (i=0; i<txt.length; i++)
{
layObj("テキスト")["ソーステキスト"].setValueAtTime(i*fps,txt.charAt(i));
}

最初の

fps = 10 / 30;

が速度です。1/30とすると1/30秒で文字表示が切り替わります。好きな値を設定してみると良いでしょう。
さらに、任意の文字を入力して、それを1文字ずつ表示できるようにすることもできます。それが以下のスクリプトです。

fps = 10 / 30;
txt = prompt("文字を入れてください");
layObj = app.project.activeItem.layers.addText();
for (i=0; i<txt.length; i++)
{
layObj("テキスト")["ソーステキスト"].setValueAtTime(i*fps,txt.charAt(i));
}

これらを応用すればWebサイトから必要なデータを持ってきて、自動的にテロップとしてレンダリングさせる、といったことも可能になります。(AfterEffects はソケット通信が可能なため。Webサイトだけでなくメールも可能)




[サンプルをダウンロード]