スクリプト

選択した2つのレイヤーソースを入れ替えるスクリプト「swapSource.jsx」

tRemapSelectorSetterした2つのリマップ番号を入れ替えるスクリプト「numSliderSwapper(#).jsx」」の汎用版です。

別にtRemapSelectorSetter使わないときも、タイムライン上で選択した2つのレイヤーソースを入れ替えたいこと多いですよね?それを解消するスクリプトです。

タイムラインでレイヤーを選択して、プロジェクトパネルから素材をAlt + ドラッグで入れ替えてもいいのですが、この場合入れ替えられたレイヤーの開始時間が0フレームスタートになってしまい、「素材の置換」であればいいのですが、「入れ替え」では使いづらいです。

元の開始フレームは保ったまま入れ替えできるよう効率化しました。

[チュートリアル動画]

あったらヤなチュートリアルを作りました。スクリプトの動きと概要を掴めます。

[概要]

コンポジションに配置済みのソースを入れ替える場合、タイムライン上でレイヤーを選択→プロジェクトパネルから素材をAlt(Option)押しながらドラッグで持ってくるのですが、もう見えてる2つを入れ替えたい場合ってありますよね。

もうそのレイヤー2つを選択してなんかボタン押したら入れ替わってくれよと何回も思ってる人多いですよね。筆者も何回も言葉になってますしね。

作りました。

レイヤー名も同時に入れ替わります。

[使い方]

  1. スクリプトを実行しウィンドウを開く
  2. 入れ替え処理したいプロパティにチェックを入れる
  3. 入れ替えたいレイヤーを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した意味がなくなる(レイヤー順が変わるだけ)のでありません。

ダウンロード

tRemapSelectorSetterした2つのリマップ番号を入れ替えるスクリプト「numSliderSwapper(#).jsx」前のページ

エクスプレッションで簡単ループ次のページ

ピックアップ記事

  1. フリーランスの開業届提出は開業freeeでとにかく簡単に
  2. YouTubeで一時停止中のコントローラーを非表示にするブックマークレット
  3. なぜ?After Effectsのレイヤーをエクスプレッションで効率化
  4. なぜ?After Effectsの操作を「スクリプト」で効率化
  5. amazonのスポンサー商品(広告)を非表示にするブックマークレット「amazO…

関連記事

  1. スクリプト

    2つのレイヤー間に他レイヤーを整列するスクリプト「pos2LayersAlign.jsx」

    root(はじめに選んだ)レイヤーとgoal(最後に選んだ)レイヤーを…

  2. スクリプト

    これ以上ヌルレイヤーを増やしたくない人へのスクリプト「smartNuller.jsx」

    平面レイヤーフォルダに並ぶ複数のヌルレイヤーが気になる方へのスクリプト…

  3. スクリプト

    グリッド状に均等配置するスクリプト「posGridAlign.jsx」

    複数のレイヤーをグリッド状に整列させるエクスプレッションを仕込むスクリ…

  4. スクリプト

    レイヤー名かフッテージ名末尾の数値を足し引きするスクリプト「numAddSubRenamer.jsx…

    開いたプロンプトに数値を入力すると、全選択オブジェクトの元の名前末尾の…

  5. スクリプト

    タイムリマップでレイヤー管理するスクリプト(2フレーム以上)「tRemapSelectorSette…

    「タイムリマップでレイヤー管理するエクスプレッション(2フレーム以上)…

  6. スクリプト

    使用エフェクト一覧をテキストファイル出力するスクリプト「exportFxName.jsx」

    使用エフェクト一覧を、開いているaepファイルと同じフォルダにテキスト…

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA