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

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

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

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

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

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

目次

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

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

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

コンポ名はPractice_青森_リンゴのように、接頭辞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で境界と選択条件を検証しましたが、2026年10月14日にWindows 11 Pro・After Effects 26.5(Build 89)でも本文の2式と複製コードを実行し、下記の結果を確認しました。

AE 26.5で3件の複製と取り消しを確認

960×540・30fps・3秒のコンポ「Template」に、元の文字がREGIONとFRUITのテキストレイヤーを作成しました。それぞれへ本文の式を設定し、Templateを開いた状態で本文の複製スクリプトを変更せずに実行しました。生成されたコンポは次の3件です。

生成されたコンポ名名産地の表示果物の表示
Practice_青森_リンゴ青森リンゴ
Practice_沖縄_バナナ沖縄バナナ
Practice_栃木_イチゴ栃木イチゴ

3件ともソーステキストの評価値が表の文字列となり、式のエラーはありませんでした。複製元TemplateはREGION/FRUITのまま残り、コンポ数は1件から4件になりました。

本文スクリプトで生成した3つのコンポ名と青森リンゴの表示を確認したAE画面
左に生成した3件と元のTemplate、中央にPractice_青森_リンゴの表示。本文の式と複製コードを使用。 2026年10月14日、Windows 11 Pro・AE 26.5(Build 89)で撮影。

同じスクリプトをもう一度実行すると「Output name already exists. Nothing changed.」と表示され、コンポは4件のままでした。既存の出力と同名にならないようrowsを見直してください。警告を閉じてCtrl+Zを1回押すと、今回生成した3件が取り消され、Templateだけへ戻ることも確認しました。これは正常終了した処理の取り消しであり、途中でエラーを起こした場合の復元は今回試していません。

描画では、最初に保存した青森のPNGで「リンゴ」の末尾が欠ける結果がありました。コンポを開いたプレビューでは全文字が表示され、その後に保存し直したPNGでも「青森/リンゴ」を確認できました。原因は特定していません。評価値だけで完了とせず、各コンポを開いて全文字とレイアウトを確認し、書き出した画像も見直してください。文字数が増えるデータでは、行の折り返しや画面外へのはみ出しも確認します。

確認したのは本文の3行サンプル、Templateでの元文字維持、同名出力による停止、正常終了後の取り消しです。ネストしたコンポや素材の独立化、20行の上限付近、Mac・他バージョン・動画書き出しは未検証です。

コンポ名をthisComp.nameで参照して差分へ反映する考え方は、Adobeの差分作成チュートリアルでも紹介されています。公式例はCSVを使いますが、本記事はコンポ名をアンダースコアで分割する別の実装です。

スポンサーリンク

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

指定の形式で名前を付けたベースとなるコンポジションの作成画面。
  1. 本文の式をそのまま使う場合、コンポ名は「Practice_名産地_果物」の形式にします。先頭のPracticeは固定条件です。複製元を「Template」にした場合は、元のソーステキストが表示されます。
  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でコンポ名を変数にしてテキスト差分を作るとき

コンポ名を使って、テキストの差分コンポジションを作れますか?

作れます。流し込みたいテキストをコンポジション名に含め、エクスプレッションで参照してテキストレイヤーへ反映させる方法です。ベースとなるコンポジションを1つ作成しておけば、複製するだけで効率よく差分コンポジションを作成できます。

コンポ名は、どんな形式にしますか?

記事の例は、Practice_青森_リンゴのように、接頭辞Practiceと2つの項目をアンダースコアで区切る形式です。項目の内部にはアンダースコアを入れません。テンプレートなど形式が合わない名前では、元のソーステキストを返します。

エクスプレッションは、どう貼りますか?

テンプレートのコンポジションにある2つのテキストレイヤーの1つ目と2つ目のソーステキストへ、それぞれ記事の式を、Alt/Optionを押しながらストップウォッチをクリックして貼り付けます。エクスプレッションを適用すると、コンポ名から抽出された「名産地」と「果物」がそれぞれのレイヤーに表示されます。

複製のスクリプトは、どう実行しますか?

複製コードをduplicate-comp.jsxとして保存し、プロジェクトパネルでテンプレートのコンポジションを選択して、「ファイル」→「スクリプト」→「スクリプトファイルを実行」から実行します。冒頭のrowsの2項目(地域と果物)を書き換えるだけで、文字列のsplitやforEachの追加は不要です。記事の例では、青森とリンゴ、沖縄とバナナ、栃木とイチゴを表示する3つのコンポジションを作ります。

スクリプトが開始されないときは?

同名の出力が既にある場合や項目が欠けた場合は、複製前に止めます。20行を超える一括処理は、この例では扱いません。

複製したコンポジションは、すべて独立していますか?

独立していない場合があります。トップのコンポジションを複製しても、内部で参照するプリコンポジションや素材がすべて独立したコピーになるわけではありません。実行後は、3つの名前・2つの表示・元テンプレートの内容を確認してください。

途中で失敗したときは、どうしますか?

途中で複製に失敗してもUndo処理は閉じますが、作成済みのコピーが自動で消えたとは判断せず、Ctrl+Z/Command+Zか元コピーで復元します。所有の練習プロジェクトを別名保存してから試してください。

旧記事のスクリプトは、使えますか?

旧記事で参照していた外部のスクリプトには、変数と入力形式の不一致があったため、この記事では所有の3行サンプルを使う修正版を紹介しています。以前の実装は、GitHubのMOTOKI-LLC/cg-method-codeを参考にできますが、本稿の修正版とは異なります。

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

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

After Effectsのおすすめ書籍

必要なPCスペック

周辺機器の優先度

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