例文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 objectでframeRateが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の配列の順番は変わらないので)