Excelや、アニメ制作ソフトなど他のソフトで得られたデータをAfterEffectsで利用したい場合があります。そこで、今回はExcelで入力されたデータをAfterEffects 6.5で利用してみます。
			まず、最初にExcelに入力された「文字」「X座標」「Y座標」を読み込むスクリプトです。Excelで入力されたデータは以下のようになっています。
あ   10   10
			い   100  50
			う   34   30
			え   55   100
			お   200  88
ファイルは「タブ区切りテキスト」形式で保存してください。次にAfterEffectsから以下のスクリプトを実行すると自動的にテキストレイヤーが作成され、文字と座標が設定されます。
TAB = String.fromCharCode(9);
			filename = File.openDialog("ファイルを選択してください","");
			fileObj = new File(filename);
			if (fileObj.open("r"))
			{
			     while(!fileObj.eof)
			     {
			          txt = fileObj.readln();
			          txt = txt.split(TAB);
			          layObj = app.project.activeItem.layers.addText(txt[0]);
			          layObj("position").setValue([txt[1],txt[2],0]);
			     }
			}
位置の設定はpositionプロパティにsetValue()を使って行います。[〜]の中は左から順番にX座標、Y座標、Z座標になっています。ExcelでZ座標も指定してあるならば以下のように変更します。
layObj("position").setValue([txt[1],txt[2],0]);
			   ↓
			layObj("position").setValue([txt[1],txt[2],txt[3]]);
文字は不要だから座標値だけ利用したい人もいるでしょう。例えば以下のようにExcelでX,Y座標値が入力されているとしましょう。さきほどと同様にタブ区切りテキスト形式で保存しておきます。
10   50
			30   90
			4    100
			5    200
			100  70
			70   40
			80   15
			50   140
			30   110
			22   170
以下のスクリプトを実行するとタイムライン上で選択したレイヤーの座標値をExcelで入力したものに設定してくれます。
aTime = 0;
			fps = 10/30;
			TAB = String.fromCharCode(9);
			layObj = app.project.activeItem.selectedLayers[0];
			filename = File.openDialog("ファイルを選択してください","");
			fileObj = new File(filename);
			if (fileObj.open("r"))
			{
			     while(!fileObj.eof)
			     {
			          txt = fileObj.readln();
			          txt = txt.split(TAB);
			          layObj("position").setValueAtTime(aTime,[txt[0],txt[1],0]);
			          aTime = aTime + fps;
			     }
			}
ここでは10/30フレームにしてありますが、1/30フレームにしたい場合は以下のように変更します。
fps = 10/30;
			  ↓
			fps = 1/30;
このスクリプトでは設定した座標値の間をスムーズにレイヤーが移動します。通常のベジエ補間でキーフレームが設定されています。しかし、場合によっては、その座標だけで一定時間停止して欲しい場合があります。もちろん、設定された後にタイムライン上のキーを選択して、キーフレーム補間により「停止」を選択しても構いません。が、やはりせっかくスクリプトを使っているので、そこも自動的にやってしまいましょう。以下のスクリプトはキーフレーム補間を停止に設定してくれます。
aTime = 0;
			fps = 10/30;
			TAB = String.fromCharCode(9);
			layObj = app.project.activeItem.selectedLayers[0];
			filename = File.openDialog("ファイルを選択してください","");
			fileObj = new File(filename);
			if (fileObj.open("r"))
			{
			     while(!fileObj.eof)
			     {
			          txt = fileObj.readln();
			          txt = txt.split(TAB);
			          layObj("position").setValueAtTime(aTime,[txt[0],txt[1],0]);
			          layObj("position").setInterpolationTypeAtKey(1,KeyframeInterpolationType.HOLD);
			          aTime = aTime + fps;
			     }
			}
キーフレーム補間の指定は以下のものがあります。
KeyframeInterpolationType.HOLD 停止
			KeyframeInterpolationType.LINER リニア
			KeyframeInterpolationType.BEZIER ベジエ
AfterEffectsでは難しい演算や時間のかかる処理なども、このような方法やexecute()を使えば外部のアプリケーションを呼び出して処理させ、そのファイルを読み込んでデータを利用することが可能になります。AfterEffect 6.5は思っている以上に、いろいろなことができるアプリケーションです。時間がある時にでも、それ以外の機能についても研究してみると面白いと思います。