コンポジションマーカーの値を得る
コンポジションマーカーの値を得るスクリプトのメソッドは無いが、エクスプレッションは得れる
なのでエクスプレッションをスクリプトで生成させて文字列として得る方法がある
//makeMarkerObject
//
//makeMarkerObject([object CompItem] or [object AVLayer])
//
//return
// object
//method
// length keyCounts
// key(index) keyObject
// key(index).time return markerKey time
//
//example
// var hoge = makeMarkerObject (app.project.activeItem.selectedLayers[0]);
// alert(hoge.key(1).time);
// var hoge = makeMarkerObject (app.project.activeItem);
// alert(hoge.key(1).time);
//
function makeMarkerObject(target){
function structExpression(addExp){
var exp = "target = thisComp"+addExp+";\n";
exp += "\n";
exp += "count = target.marker.numKeys;\n";
exp += "dst = [count];\n";
exp += "for(var i=1;i<=count;i++){\n";
exp += "dst.push(target.marker.key(i).time);\n";
exp += "\n";
exp += "}\n";
exp += "\n";
exp += "dst;\n";
return exp;
}
if(target){
if(target instanceof CompItem){
var comp = target;
var addExp = '';
}else if(target instanceof AVLayer){
var comp = target.containingComp;
var addExp = '.layer(' + Number(target.index+1) + ')';
}else{
return false;
}
var text = comp.layers.addText();
text.property("ADBE Text Properties")(1).expression = structExpression(addExp);
var bounds = text.property("ADBE Text Properties")(1).value.toString();
bounds = bounds.split(",");
function constractor(){
this.length = bounds[0];
this.k = [];
for(var i=1;i<=bounds.length;i++){
this.k.push({time:bounds[i]});
}
this.key = function (index){
return this.k[index-1];
}
}
var obj = new constractor();
text.remove();
return obj;
}
return false;
}
この関数を利用するとコンポジションマーカー時間を得ることができる
もう一つは、コンポジションマーカーのあるコンポをコンポジションに入れるとコンポジションマーカーがレイヤーマーカーの状態になっているので
これを利用して、ターゲットのコンポからさらにコンポを作って、レイヤーマーカーを得てから一時的に作ったコンポを削除という方法もあるが
コンポからコンポを作る操作をスクリプトのメソッドでやるとマーカーがつかないのでcommandIDをつかわなくてはならない。