Home‎ > ‎例文と解説‎ > ‎

Example 1

アイテム内のコンポジションのフレームレートを調べ、もし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 objectframeRate24FPS以外のアイテムを一度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の配列の順番は変わらないので)



Comments