例文01

アイテム内のコンポジションのフレームレートを調べ、もし24fps以外のものがあれば、コンポジション名の先頭に「X_」を追加して名称を変更する

例文

//変数宣言&初期化

//(コード内に散在させてもいいのですが、個人的には各変数スコープの最初で宣言するようにしています)

//例文ではすべてグローバルスコープになっています。

var currentComp, oldName, i, j;

var fps = 24;

var invalidFpsComp = [];

//プロジェクトに含まれるすべてのアイテムを取得するためにapp.project.itemsを変数「allItems」に

//格納します。

var allItems = app.project.items;

//allItemsから総当たりでアイテムがCompItemか確認します。

for(i =1; i<= app.project.items.length; i++){

currentItem = app.project.items[i];

//アイテムがCompItemで、かつframeRateがfpsの設定値と異なる場合、

//invalidFpsCompの配列に、そのCompItemを追加します。

if((currentItem instanceof CompItem)&&(currentItem.frameRate !== fps)) {

invalidFpsComp.push(currentItem);

}

}

// invaledFpsCompの配列に対して、それぞれのnameを取得し、先頭に「X_」を追加して

// nameを再設定していきます。

for(j =0; j < invalidFpsComp.length; j++){

invalidFpsComp[j].name = 'X_'+invalidFpsComp[j].name;

}

//結果をアラート表示

alert(invalidFpsComp.length +'つのコンプアイテムが24FPSではありませんでした');

解説

このスクリプトで注目してほしいのは、CompItem objectframeRateが24FPS以外のアイテムを一度InvaildFpsCompという配列に格納している点です。格納せずにCompItemの名称を変えていくと、app.project.items内の順番が変わってしまい、総当たりを正しく行うことができません。

//アイテムがCompItemで、かつframeRateがfpsの設定値と異なる場合、

//invalidFpsCompの配列に、そのCompItemを追加します。

if((currentItem instanceof CompItem)&&(currentItem.frameRate !== fps)) {

invalidFpsComp.push(currentItem);

}

}

それを避けるために一度別の配列に格納してからnameの値を書き換えています。

// invaledFpsCompの配列に対して、それぞれのnameを取得し、先頭に「X_」を追加して

// nameを再設定していきます。

for(j =0; j < invalidFpsComp.length; j++){

invalidFpsComp[j].name = 'X_'+invalidFpsComp[j].name;

}

app.project.itemsの配列は1からスタートしていますが、自分で用意したInvaildFpsCompの配列は0スタートになります。そのためfor文の書き方が少し変わっています。これを同様に1スタートにしたい場合は、invalidFpsCompの初期化の際にinvalidFpsComp[0]=nullなどとして、0番目を設定しておくなどの方法が考えられます。

応用として強制的にinvalidFpsComp.frameRate = fpsとしてframeRateを24に設定してしまうこともできますが、この場合は一度invalidFpsCompに格納する必要はありません。(frameRateを書き換えてもapp.project.itemsの配列の順番は変わらないので)