Amazonで商品を見るセール会場へ

After Effects│コンポ名を変数にして複製して差分コンポを作成するスクリプト

コンポ名を変数として利用し、テキスト差分を作成する手順を解説します。

流し込みたいテキストをコンポジション名に含め、エクスプレッションで参照してテキストレイヤーへ反映させる方法です。

ベースとなるコンポジションを1つ作成しておけば、複製するだけで効率よく差分コンポジションを作成できます。

コンポ名とテキストを対応させ、所有の練習コピーで差分を確認します。

目次

3つの名前とテキストを対応させる練習

所有の練習プロジェクトを別名保存し、2つのテキストレイヤーがあるテンプレートのコンポジションを作ります。

1つ目と2つ目のソーステキストへ、それぞれ下の式をAlt/Optionを押しながらストップウォッチをクリックして貼り付けます。

コンポ名はPractice_青森_リンゴのように、接頭辞と2つの項目をアンダースコアで区切る形式です。

テンプレートなど形式が合わない名前では元のソーステキストを返します。

項目の内部にはアンダースコアを入れません。

下の複製コードをduplicate-comp.jsxとして保存し、テンプレートのコンポジションを選択して「ファイル」→「スクリプト」→「スクリプトファイルを実行」から実行します。

所有のサンプル3行では、青森とリンゴ、沖縄とバナナ、栃木とイチゴを表示する3つのコンポジションを作る例です。

rowsの2項目の配列を書き換えるだけで、文字列のsplitやforEachの追加は不要です。

同名の出力が既にある場合や項目が欠けた場合は、複製前に止めます。

20行を超える一括処理はこの例では扱いません。

トップのコンポジションを複製しても、内部で参照するプリコンポジションや素材がすべて独立したコピーになるわけではありません。

実行後は3つの名前・2つの表示・元テンプレートの内容を確認します。

途中で複製に失敗してもUndo処理は閉じますが、作成済みのコピーが自動で消えたとは判断せず、Ctrl+Z/Command+Zか元コピーで復元します。

確認すること期待する結果違ったとき
Practice_青森_リンゴ青森とリンゴ接頭辞と区切りを確認
項目が不足元テキストを維持名前の形式を確認
同じ出力名が存在複製前に停止既存コンポを確認

2026年10月3日にLayer・CompItem・ApplicationのAPI参照を照合し、ローカルのJavaScriptで境界と選択条件を検証しましたが、AE実機でのプロパティ連動・表示・取り消しは未検証です。

ベースとなるコンポジションの作成

指定の形式で名前を付けたベースとなるコンポジションの作成画面。
  1. コンポ名を「コンポ名_名産地_果物」の形式で作成します。
  2. コンポ内に2つのテキストレイヤーを作成し、それぞれのソーステキストへ以下のエクスプレッションを適用します。

1つ目のテキスト(名産地)のソーステキスト:

var fields = thisComp.name.split("_");
fields.length === 3 && fields[0] === "Practice" && fields[1] && fields[2] ? fields[1] : value;

2つ目のテキスト(果物)のソーステキスト:

var fields = thisComp.name.split("_");
fields.length === 3 && fields[0] === "Practice" && fields[1] && fields[2] ? fields[2] : value;

エクスプレッションを適用すると、コンポ名から抽出された「名産地」と「果物」がそれぞれのレイヤーに表示されます。

コンポ名にテキストを反映しながら一括複製する手順

旧記事で参照していた外部のスクリプトには、変数と入力形式の不一致があったため、以下は所有の3行サンプルを使う修正版です。

(function () {
    var rows = [["青森", "リンゴ"], ["沖縄", "バナナ"], ["栃木", "イチゴ"]];
    var comp = app.project && app.project.activeItem;
    if (!(comp instanceof CompItem)) { alert("Open or select the template composition."); return; }
    if (rows.length === 0 || rows.length > 20) { alert("Use 1 to 20 practice rows."); return; }
    var names = [], i, j;
    for (i = 0; i < rows.length; i++) {
        if (rows[i].length !== 2 || !rows[i][0] || !rows[i][1] ||
            /_/.test(rows[i][0]) || /_/.test(rows[i][1])) {
            alert("Each row needs two nonempty fields without underscores. Nothing changed."); return;
        }
        var name = "Practice_" + rows[i][0] + "_" + rows[i][1];
        for (j = 0; j < names.length; j++) {
            if (names[j] === name) { alert("Repeated output name. Nothing changed."); return; }
        }
        for (j = 1; j <= app.project.numItems; j++) {
            if (app.project.item(j).name === name) { alert("Output name already exists. Nothing changed."); return; }
        }
        names.push(name);
    }
    app.beginUndoGroup("Duplicate practice text compositions");
    try {
        for (i = 0; i < names.length; i++) {
            var copy = comp.duplicate();
            copy.name = names[i];
        }
    } finally { app.endUndoGroup(); }
})();

修正版では、冒頭のrowsの2項目を編集します。

入力例は複製コードのrowsに含めています。

各行は地域と果物の2項目として編集します。

プロジェクトパネルで先ほど作成したベースコンポを選択した状態でスクリプトを実行すると、指定した文字列を含むコンポ名で複製されます。

スクリプトを実行して指定した文字列を含むコンポ名で複製されたプロジェクトパネルの様子。

After Effectsの基本的な操作や効率化テクニックは、まとめ記事で確認できます。

以前の実装は、GitHubのMOTOKI-LLC/cg-method-codeを参考にできますが、本稿の修正版とは異なります。

コンポジションの複製や、サイズ・デュレーションを統一するスクリプトは以下の記事でも紹介しています。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

After Effectsのおすすめ書籍

必要なPCスペック

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次