▼このスクリプトについて
レイヤーを自動で並べてくれる、シーケンスレイヤー機能をスクリプトで再現する。
(アニメーション → キーフレーム補助 → シーケンスレイヤー)
▼用意
スクリプトを実行する前に、操作対象のレイヤーを選択する必要がある。
※スクリプトは、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のスクリプティングガイドでは、
オブジェクトのアトリビュートとあり、プロパティではない。