[After Effects]スクリプトを使用し、選択した複数のレイヤーの開始時間を操作する。

▼このスクリプトについて
レイヤーを自動で並べてくれる、シーケンスレイヤー機能をスクリプトで再現する。
(アニメーション → キーフレーム補助 → シーケンスレイヤー)

▼用意
スクリプトを実行する前に、操作対象のレイヤーを選択する必要がある。

※スクリプトは、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のスクリプティングガイドでは、
オブジェクトのアトリビュートとあり、プロパティではない。

コメントを残す

メールアドレスが公開されることはありません。


8 + 一 =


*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>