コンポの名前を変える

例:フッテージウィンドウにあるコンポジションすべてをhoge+番号という名前に変える

var n = [];

var undoName = "コンポの一斉名前変更";

app.beginUndoGroup(undoName);

for(var i=1;i<=app.project.numItems;i++){

    var item = app.project.item(i);

    if(item instanceof CompItem){

        n[n.length] = item;

        }

    }

for(i in n){

    n[i].name = "hoge" + i;

    }

app.endUndoGroup();

解説

var n = [];

配列を初期化するのはこれでOK

var n = new Array();

と同じ意味

var undoName = "コンポの一斉名前変更";

アンドゥなしで作ると、forの回数分アンドゥしなくてはならないので、まとめてアンドゥさせるようにしたほうがよい

アンドゥグループ作成にはアンドゥの名前がいるので先に設定する。そして

app.beginUndoGroup(undoName);

で開始

正しくはAfterEffectsの操作の部分のアンドゥ。この場合はn[i].name = "hoge" + i;部分。

最初のコンポを判別してるforはAfterEffectsの操作には関わっていないので、アンドゥ対象にはならない。

forループでフッテージアイテムすべてからコンポジションだけ探しだす

フッテージウィンドウのアイテムの数は1から始まるのでvar i=1とする。

繰り返す数はapp.project.numItems。この数まで数えるので、等号を含める。

for(var i=1;i<=app.project.numItems;i++)

コンポジションかどうかはinstanceof CompItemで判断できる

フッテージウィンドウで判断できるものはコンポ、フッテージ、フォルダの3種類。

n[n.length]はちょっと変わった式だが便利。配列の末尾にどんどん追加していく。

初期化した段階では配列に何も入っていないのでn.lengthは0。

なので最初の段階ではn[n.length]はn[0]と同じことになる。

n[0]に代入されるとnのlengthは1となり、次はn[1]となる。

この繰り返し。

pushメソッドもあるので、そちらを使うのもOK

n.push(item);

と同じ意味

2回目のfor~inは

for(var i=0;i<n.length;i++){

    n[i].name = "hoge" + i;

    }

のほうが安全かも

app.endUndoGroup();

で締める。このアンドゥグループで囲んだ部分が1回のアンドゥに相当するようになる

プロトタイプを先に作っておくと今後、より簡単に。

Project.prototype.comps = function(){

var n = [];

for(var i=1;i<=app.project.numItems;i++){

    var item = app.project.item(i);

    if(item instanceof CompItem){

        n[n.length] = item;

        }

    }

    return n;

}();

//上のプロタイプをスクリプトスタートアップに入れておくとapp.project.compsと書くだけでコンポが取り出せるようになる

var undoName = "コンポの一斉名前変更";

app.beginUndoGroup(undoName);

for(i in app.project.comps){

    app.project.comps[i].name = "hoge" + i;

    }

app.endUndoGroup();