クリエイター手抜きプロジェクト[427]Adobe AfterEffects CS6〜CC 2014編 タイムラインに配置されたレイヤー情報を書き出す/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,200文字)



今回は、AfterEffectsでタイムラインに配置された、レイヤー情報を書き出すスクリプトです。基本的なプロパティを書き出すスクリプトは10年ほど前に掲載しましたが、現在のバージョンでは動作しなくなっています。

ということで、作り直し&機能アップしたのが以下のスクリプトです。実行すると、結果を保存するファイル名を入力するように聞いてきます。入力すると、自動的にプロジェクト内のコンポジションを走査し、タイムラインに配置されたレイヤーのプロパティ値とエフェクト値を全部書き出します。





function outputProperty(output){
var fps = 1/30; // フレームレート
for(var k=1; k<=app.project.items.length; k++){
var t = app.project.item(k).typeName;
if (t != "コンポジション"){ continue; }
var compName = app.project.item(k).name;
output.writeln("●コンポジション名:"+compName);
for(var j=1; j<=app.project.item(k).layers.length; j++){
try{
var layName = app.project.item(k).layer(j).name;
output.writeln("■レイヤー名:"+layName);
// デフォルトのプロパティ値を書き出す
writeProp(output, app.project.item(k).layer(j), [
"position",
"rotation",
"anchorPoint",
"scale",
"opacity"
]);
// エフェクトの値も書き出す
for(var i=1; i<256; i++){
try {
var prop = app.project.item(k).layer(j).property("effect").property(i);
output.writeln("★"+prop.name + " ("+prop.matchName+")");
writePropEffect(output,
app.project.item(k).layer(j).property("effect").property(i),
app.project.item(k).layer(j));
}catch(e){
output.writeln("----------------------------------");
break;
}
}

}catch(e){
break;
}
}
output.writeln("=======================");
}
// タイムラインのレイヤーのプロパティを一括書き出し
function writeProp(output, layObj, propList){
for(var j=0; j<propList.length; j++){
var propName = propList[j];
var tmpObj = layObj.property(propName);
output.writeln("●"+layObj.name+", "+propName);
for(var i = layObj.inPoint; i<layObj.outPoint; i+=fps){
var n = tmpObj.valueAtTime(i, false);
output.writeln(n);
}
output.writeln("-------------------------");
}
}
// タイムラインのレイヤーエフェクトのプロパティを一括書き出し
function writePropEffect(output, layObj, parentLayObj){
var propList = [];
for(var i=1; i<256; i++){
try{
propList.push(layObj.property(i).name);
}catch(e){ break; }
}
for(var j=0; j<propList.length; j++){
var propName = propList[j];
var tmpObj = layObj.property(propName);
output.writeln("▼"+propName);
for(var i = parentLayObj.inPoint; i<parentLayObj.outPoint; i+=fps){
var n = tmpObj.valueAtTime(i, false);
output.writeln(n);
}
output.writeln("-------------------------");
}
}}
(function(){
var savefile = File.saveDialog("プロパティを保存するテキストファイル名を入れてください");
if (!savefile) { return false; } // キャンセルされたら何もしない
var flag = savefile.open("w");
if (!flag){
alert("ファイルに書き込めませんでした");
return;
}
//outputProperty($); // ESTKのJavaScriptコンソールに出力する場合
outputProperty(savefile);
alert("処理が終わりました");
})();


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

ここのところ、ずっと自動処理のスクリプトばかり作ってます。Webの世界は競争相手が多いのですが、JavaScript自動化の世界はほとんどいません。その代わり自分で試行錯誤する必要があります。

でも、いずれはこんなことをプログラムしなくても、人工知能がやってくれる時代が来るかもしれません。というか、生きている間にそういう時代が来ると面白いんですが。

Google I/Oでの発表でも、そんなような未来を感じさせるものもありました。でも、何でもGoogle様の言う通りに行動しないと損する、バカを見るという世界になってしまうのは、どうなのかなと。

最近だと「フレッシュプリキュア」が、そんな世界・オチだったけど(この手のコンピューターが支配する云々は伝統的にたくさんの作品がある)。

・フレッシュプリキュア
< http://www.toei-anim.co.jp/tv/fresh_precure/ >

・Apple Watch(アップルウォッチ)使い方辞典
< http://www.openspc2.org/reibun/AppleWatch/2015/ >

・Photoshop自動化基本編
< http://www.amazon.co.jp/dp/B00W952JQW/ >

・Illustrator自動化基本編
< http://www.amazon.co.jp/dp/B00R5MZ1PA >

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/B00FZEK6J6/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >