複数のレイヤーのプロパティ値を保存する

 AfterEffects 6.5で特定のレイヤー(選択されたレイヤー)の回転角度や位置情報などの値を他のアプリケーションなどで利用したい場合が稀にあります。そんな時は以下のスクリプトを使いましょう。
 まず、タイムライン上にあるレイヤーを1つ選択します。あとは以下のスクリプトを実行しましょう。と、その前に文字コードはSHIFT JISでなくUTF-8でないとスクリプトが実行されません。JEDITなどUTF-8で保存できるエディタを使いましょう。

function writeProp(layObj, propName)
{
var savePath = filePutDialog("保存ファイル名","Save.txt","");
if (!savePath) return false;
var fileObj = new File(savePath);
flag = fileObj.open("w","text","");
if (!flag)
{
alert("ファイルが作成できませんでした");
return;
}
var tmpObj = layObj.property(propName);
for(i = layObj.inPoint; i<layObj.outPoint; i+=fps)
{
n = tmpObj.valueAtTime(i, false);
fileObj.writeln(n);
}
fileObj.close();
alert("保存しました");
}
fps = 1/30; // フレームレート
sLayObj = app.project.activeItem.selectedLayers[0]; // 選択された最初のレイヤー
writeProp(sLayObj, "position");


 このスクリプトは選択された1つのレイヤーの位置情報をテキストファイルとして書き出します(レイヤーのみ選択してください)。一番最後の

writeProp(sLayObj, "position");

のpositionが出力するプロパティ名です。これは以下のようなプロパティ名を指定できます。

anchorPoint アンカーポイント
scale スケール
rotation 回転角度
opacity 不透明度

 ただし、上記のスクリプトだと選択した最初のレイヤーで、なおかつ1つのプロパティ値しか書き出す事ができません。なるべくなら選択したレイヤーの任意の複数のプロパティ値をファイルに書き出したいところです。
 以下のスクリプトは選択されたレイヤーの複数のプロパティ値をファイルに書き出すものです。

function initFile()
{
var savePath = filePutDialog("保存ファイル名","Save.txt","");
if (!savePath) return false;
fileObj = new File(savePath);
flag = fileObj.open("w","text","");
if (!flag)
{
alert("ファイルが作成できませんでした");
return false;
}
return true;
}
function writeProp(layObj, propName)
{
var i;
var tmpObj = layObj.property(propName);
fileObj.writeln("#"+layObj.name+", "+propName);
for(i = layObj.inPoint; i<layObj.outPoint; i+=fps)
{
n = tmpObj.valueAtTime(i, false);
fileObj.writeln(n);
}
}
if (initFile())
{
fps = 1/30; // フレームレート
total = app.project.activeItem.selectedLayers.length; // 選択項目の総数
for (count=0; count<total; count++)
{
sLayObj = app.project.activeItem.selectedLayers[count];
writeProp(sLayObj, "position");
}
fileObj.close();
}


 上記サンプルではposition(位置)しか出力しませんが、複数出力したい場合は下から4行目の

writeProp(sLayObj, "position");

writeProp(sLayObj, "position");
writeProp(sLayObj, "rotation");

とすると位置情報の次に回転角度の値が出力されます。以下のようにするとレイヤーの基本的なプロパティ値をまとめてファイルに書き出すことができます。

writeProp(sLayObj, "position");
writeProp(sLayObj, "rotation");
writeProp(sLayObj, "anchorPoint");
writeProp(sLayObj, "scale");
writeProp(sLayObj, "opacity");

 今回は情報の出力だけでしたが、入力もできます。変わり種としてはアニメ作成ソフトのRETAS!のタイムシートファイルを解析させて、その情報をAfterEffectsに読み込み利用することもできます。AfterEffectsではソケット通信もできるので、Webサーバーなどから自動的に情報を得て処理することもできます。使い方いろいろといったところでしょう。




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