
▼このスクリプトについて
レイヤーを自動で並べてくれる、シーケンスレイヤー機能をスクリプトで再現する。
(アニメーション → キーフレーム補助 → シーケンスレイヤー)
▼用意
スクリプトを実行する前に、操作対象のレイヤーを選択する必要がある。
※スクリプトは、ExtendScript Toolkitから実行する。
▼スクリプト
sentaku = app.project.activeItem.selectedLayers
itibanme = sentaku[0].index
owari = app.project.activeItem.layer(itibanme).outPoint
for(i = 1; i < sentaku.length; i++){
bangou = sentaku[i].index
app.project.activeItem.layer(bangou).startTime = owari
owari = app.project.activeItem.layer(bangou).outPoint
}
※appは省略可能
app.project.activeItem.selectedLayers
↓
project.activeItem.selectedLayers
▼スクリプトの処理の流れ。
①選択した複数のレイヤーの中から、一番上のレイヤーのアウトポイントを取得。
↓
②一つ下のレイヤーの開始時間を、取得したアウトポイントの時間に移動する。
↓
③移動したレイヤーのアウトポイントを取得。
↓
②~③を、選択したレイヤーの数だけ繰り返す。
▼スクリプトの解説
//↓アクティブなコンポジション内にある、選択されているレイヤーを変数sentakuに入れる。
sentaku = app.project.activeItem.selectedLayers
//↓変数sentaku内、一番目のレイヤーのインデックス番号(レイヤーの並び番号)を、変数itibanmeに入れる。
itibanme = sentaku[0].index
//↓一番目のレイヤーのアウトポイントの値を、変数owariに入れる。
owari = app.project.activeItem.layer(itibanme).outPoint
//↓for文で繰り返し処理を行う。
//for( 変数iに0を入れる;
// 変数iが変数sentaku内の要素の数(レイヤーの数)より小さいとき処理を繰り返す;
// { }内の処理を繰り返す毎に変数iに1を足す。){
for(i = 1; i < sentaku.length; i++){
//↓以下for文で繰り返す処理内容。
//↓変数sentaku内のi番目レイヤーのインデックス番号を、変数bangouに入れる。
bangou = sentaku[i].index
//↓変数bangouの値で指定したレイヤーの開始時間を、変数owariに入った値にする。
app.project.activeItem.layer(bangou).startTime = owari
//↓変数bangouの値で指定したレイヤーのアウトポイントの値を、変数owari内に上書きする。
owari = app.project.activeItem.layer(bangou).outPoint
}
▼スクリプトの単語とかを日本語にしてみる。
sentaku = プロジェクトの、アクティブアイテムの、選択されたレイヤー itibanme = sentakuの要素内[1]番目の、インデックス番号 owari = プロジェクトの、アクティブアイテムの、レイヤー番号(itibanme内の値)の、終了点 for文、繰り返し処理の条件(i=0; i<sentaku内にある要素の数; {}内の処理を繰り返す毎にi+1){ bangou = sentaku内の、[iの値]番目の、インデックス番号 プロジェクトの、アクティブアイテムの、レイヤー番号(bangou内の値)の、開始時間 = owariの値 owari = プロジェクトの、アクティブアイテムの、レイヤー番号(bangou内の値)の、終了点 }
▼雑記
After Effectsのスクリプトは、
Photoshopのスクリプトと同じ感じで操作できると思ってたら、そうでもなかった。
アクティブレイヤーの名前や、インデックス番号を取得しようとしたとき苦労した。
Photoshopなら、activeDocument.activeLayer.nameで、
アクティブなレイヤーの名前を取得できたけど、
After Effectsには、activeLayerというプロパティは見つからなかった。
After Effectsでは、CompItemオブジェクトの、selectedLayersというアトリビュートを使用して、
配列変数に、選択したレイヤーを入れてから、
配列変数名[要素番号].nameでアクティブなレイヤーの名前、
配列変数名[要素番号].indexで、アクティブなレイヤーのインデックス番号を取り出す。
この事が分かるまで時間が掛った。
PhotoshopのJavaScriptリファレンスガイドでは、
オブジェクトのプロパティとあり、アトリビュートではない。
After Effectsのスクリプティングガイドでは、
オブジェクトのアトリビュートとあり、プロパティではない。