エクスプレッションをベイクしたい
エクスプレッションを多用するとレンダリングが激重くなるようなので、ベイク(キーフレーム化)することにしました。
目次
普通のやり方
- レイヤーを展開し、エクスプレッションの入っているプロパティを選択
- アニメーション>キーフレーム補助>エクスプレッションをキーフレームに変換でエクスプレッションがベイクされます(複数選択も可)
スクリプトでやる場合
下記のような感じです。変換できない場合はプロパティを追加してやります。
function convertToKeyframes(theProperty){
if (theProperty.canSetExpression && theProperty.expressionEnabled){
theProperty.selected = true;
app.executeCommand(2639);
theProperty.selected = false;
}
}
var myComp = app.project.activeItem;
if (myComp && myComp instanceof CompItem){
var myLayer;
var myProperty;
app.beginUndoGroup("convert expressions");
for (var i = 1; i <= myComp.numLayers; i++){
myLayer = myComp.layer(i);
try{
myProperty = myLayer.property("position");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("anchorPoint");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("rotation");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("scale");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("opacity");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("timeRemap");
convertToKeyframes(myProperty);
}catch(err){
}
try{
myProperty = myLayer.property("sourceText");
convertToKeyframes(myProperty);
}catch(err){
}
}
app.endUndoGroup();
}