「タイムリマップでレイヤー管理するエクスプレッション(2フレーム以上)」で作ったフレーム選択エフェクト追加+タイムリマップのON+秒数の指定+エクスプレッション適用をスクリプト化。
[チュートリアル動画]
あったらヤなチュートリアルを作りました。スクリプトの動きと概要を掴めます。
[概要]
複数の整列させるレイヤーの管理を効率化するエクスプレッションを仕込むスクリプト。補助スクリプトも合わせて使用する。
[使い方]
- 別コンポジションにアニメーションを均等秒数で配置する
- 整列させるメインコンポジションに配置する
- レイヤー名の末尾に「1」や「01」とリネームする
- 該当レイヤーを選択状態でスクリプトを実行する
- 開いたプロンプトで再生させたい秒数を指定する
- コンポジションレイヤーを複製する(自動連番になる)
- 補助スクリプト「numSliderSetter(#).jsx」を実行する
[解説]
function f_timeRemapSelectorSetterT(){
var actCmp=app.project.activeItem;
var sel=actCmp.selectedLayers;
var frm=actCmp.frameDuration;
var seconds=prompt("1セットの秒数",1);
for(i=0;i<sel.length;i++){
if(sel[i].canSetTimeRemapEnabled==false){
alert("タイムリマップ可能なレイヤーを選択してから実行");
return;
}else{
sel[i].property("ADBE Effect Parade").addProperty("ADBE Slider Control");
sel[i].property("ADBE Effect Parade")("ADBE Slider Control").enabled=false;
sel[i].property("ADBE Effect Parade")("ADBE Slider Control").name="#リマップ番号";
sel[i].property("ADBE Effect Parade")("#リマップ番号")(1).setValue(1);
sel[i].timeRemapEnabled = true;
sel[i].timeRemap.removeKey(2);
sel[i].timeRemap.setValueAtTime(sel[i].inPoint,0);
sel[i].timeRemap.setValueAtTime( sel[i].inPoint+(Math.round(seconds/frm)-1)*frm,(Math.round(seconds/frm)-1)*frm);
sel[i].timeRemap.expression=
'dur='+seconds+';//リマップ長さ秒;\r'+
'value+(effect("#リマップ番号")("スライダー")*dur-dur);\r';
}
}
}
app.beginUndoGroup("timeRemapSelectorSetter@time");
f_timeRemapSelectorSetterT();
alert("コンポジションの中は30fpsか確認\r29.97など小数点あるとズレ発生");
app.endUndoGroup();
選択したレイヤーに「#リマップ番号」という名前のスライダー制御を追加し、タイムリマップON状態にし、プロンプトで指定された秒数分だけキーフレームを設定する。
タイムリマップの数値を変更しようとすると、2つのキーフレームを変更することになり非常に煩雑になるため、エフェクトには入力用(表示させるフレーム選択用)の「#リマップ番号」というスライダーエフェクトを追加する処理にしている。
注意点
ただし、コンポジションレイヤーを複製したところで全てのタイムリマップが0秒スタートのままとなるため、連番で入力されて欲しいわけです。
そのため「レイヤー名末尾の数値を吸い上げ、#リマップ番号の数値を書き換えるスクリプト」をセットで使用するという案に落ち着きました。以下の2つのスクリプトは一連のセッティング動作の中で2つとも使用します。
この記事へのコメントはありません。