「tRemapSelectorSetterした2つのリマップ番号を入れ替えるスクリプト「numSliderSwapper(#).jsx」」の汎用版です。
別にtRemapSelectorSetter使わないときも、タイムライン上で選択した2つのレイヤーソースを入れ替えたいこと多いですよね?それを解消するスクリプトです。
タイムラインでレイヤーを選択して、プロジェクトパネルから素材をAlt + ドラッグで入れ替えてもいいのですが、この場合入れ替えられたレイヤーの開始時間が0フレームスタートになってしまい、「素材の置換」であればいいのですが、「入れ替え」では使いづらいです。
元の開始フレームは保ったまま入れ替えできるよう効率化しました。
[チュートリアル動画]
あったらヤなチュートリアルを作りました。スクリプトの動きと概要を掴めます。
[概要]
コンポジションに配置済みのソースを入れ替える場合、タイムライン上でレイヤーを選択→プロジェクトパネルから素材をAlt(Option)押しながらドラッグで持ってくるのですが、もう見えてる2つを入れ替えたい場合ってありますよね。
もうそのレイヤー2つを選択してなんかボタン押したら入れ替わってくれよと何回も思ってる人多いですよね。筆者も何回も言葉になってますしね。
作りました。
レイヤー名も同時に入れ替わります。
[使い方]
- スクリプトを実行しウィンドウを開く
- 入れ替え処理したいプロパティにチェックを入れる
- 入れ替えたいレイヤーを2つ選択状態で[swap!]ボタンをクリック
[解説]
var scName="swapSource";
var wobj = new f_showDialog;
w.show();
/*
===============
--- GUI準備 ---
===============
*/
function f_showDialog(){
w = new Window('palette{properties:{resizeable:false, }}',scName);
w.center();
var gr_chk=w.add('group',undefined,"st1ui_gear1Group");
gr_chk.orientation='row';
gr_chk.alignChildren='left';
cb_scale = gr_chk.add('checkbox',undefined,"スケール");
cb_scale.helpTip="スケールも入れ替える";
cb_rotation = gr_chk.add('checkbox',undefined,"回転");
cb_rotation.helpTip="回転も入れ替える";
cb_opacity = gr_chk.add('checkbox',undefined,"不透明度");
cb_opacity.helpTip="不透明度も入れ替える";
b_swap_ok=w.add('button', undefined, "swap!");
}
/*
===============
--- ボタン操作 ---
===============
*/
b_swap_ok.onClick = function(){
app.beginUndoGroup("swapSource");
var sel=app.project.activeItem.selectedLayers;
if(sel.length>1){
var source0=sel[0].source;
var selName0=sel[0].name;
var start0=sel[0].startTime;
var in0=sel[0].inPoint;
var out0=sel[0].outPoint;
var scale0=sel[0].scale.value;
var rotation0=sel[0].rotation.value;
var opacity0=sel[0].opacity.value;
sel[0].replaceSource(sel[1].source,false);
sel[0].name=sel[1].name;
sel[0].startTime=sel[1].startTime;
sel[0].inPoint=sel[1].inPoint;
sel[0].outPoint=sel[1].outPoint;
if(cb_scale.value==1){sel[0].scale.setValue(sel[1].scale.value);}
if(cb_rotation.value==1){sel[0].rotation.setValue(sel[1].rotation.value);}
if(cb_opacity.value==1){sel[0].opacity.setValue(sel[1].opacity.value);}
//--------------------
sel[1].replaceSource(source0,false);
sel[1].name=selName0;
sel[1].startTime=start0;
sel[1].inPoint=in0;
sel[1].outPoint=out0;
if(cb_scale.value==1){sel[1].scale.setValue(scale0);}
if(cb_rotation.value==1){sel[1].rotation.setValue(rotation0);}
if(cb_opacity.value==1){sel[1].opacity.setValue(opacity0);}
}
app.endUndoGroup();
}
レイヤーを選択順に0,1として扱う。
「.source」で1つ目と2つ目のソース(プロジェクトパネルの元素材)を調べて、1つ目に選択したレイヤーのソースを「.replaceSource(source1,false)」で入れ替えます。
この動き自体はプロジェクトパネルからAlt(Option)を押しながらドラッグして入れ替えるのと同じです。
このfalseはtrueにするとエクスプレッションなども修正するかどうかなので今回は要らない上にリソースを食うのでfalseで。
レイヤー名が入れ替わらないと後でパニックになるので、レイヤー名も入れ替えています。
↓240730加筆
さらに、プロジェクトパネルからAlt(Option)を押しながらドラッグして入れ替えるのと同じということは、レイヤーの開始フレームは変わらないということ。
入れ替え後の開始フレームとデュレーションとインポイントは保って欲しいので、一旦「.startTime」「.inPoint」「.outPoint」でお互いのレイヤー開始時間を保存し、入れ替え後にこれらをセットし直します。
また、お互いのスケールが違う場合にスケールごと入れ替えたい場面も多く、そんなときはチェック入れてください。また、回転や不透明度も念の為準備してあります。
※位置は入れ替えるとswapした意味がなくなる(レイヤー順が変わるだけ)のでありません。
この記事へのコメントはありません。