プロジェクトパネルで選んだ各コンポを、元の1個を含めて合計100個にします。
追加する数は99個で、コンポを2個選んだ場合は99個ずつ、合計198個を追加します。
実機検証日:2026年10月14日。Windows 11 Pro(OSビルド26200)・After Effects 26.5(26.5×89、Build 89)で確認しました。
本文のコードで、1個から合計3個、2個から各100個への複製と、Ctrl+Zによる取り消しを確認しました。
今回の実測は単純なプリコンポを1レイヤーずつ含む練習データです。複雑な実案件での処理時間や、処理途中に例外が発生した場合の復元は未検証です。
コンポとフッテージの複製を分ける
このコードはCompItemだけを対象にします。
フッテージやフォルダーを混ぜて選ぶと、追加前に停止します。
フッテージを少数複製する場合は、プロジェクトパネルで対象を選んで「編集→複製」(WindowsはCtrl+D、MacはCommand+D)を使います。
コンポのduplicate()をフッテージでも使えると決めつけません。
コンポを複製しても、内部で参照する画像・動画・プリコンポまで独立した別素材にはしません。
同じソースを変更すると複数のコピーへ影響するため、名前違いの独立データが必要な作業と区別します。
各選択コンポを合計100個にするコード
先に別名保存し、totalPerCompを3へ変更して小さな練習から始めます。
DuplicateComps.jsxとして保存し、プロジェクトパネルでコンポを選んで「ファイル→スクリプト→スクリプトファイルを実行」から実行します。
(function () {
var selected = app.project.selection;
var totalPerComp = 100; // 元コンポを含む合計数
if (!selected.length) { alert("プロジェクトパネルでコンポを選択してください。"); return; }
var targets = [], i, j;
for (i = 0; i < selected.length; i++) {
if (!(selected[i] instanceof CompItem)) {
alert("コンポだけを選択してください。フッテージとフォルダーは対象外です。"); return;
}
targets.push(selected[i]);
}
if (totalPerComp < 1 || totalPerComp !== Math.floor(totalPerComp) ||
targets.length * (totalPerComp - 1) > 500) {
alert("合計数は1以上の整数、今回追加するコンポは500個以内にしてください。"); return;
}
var made = 0;
app.beginUndoGroup("選択コンポを複製");
try {
for (i = 0; i < targets.length; i++) {
for (j = 1; j < totalPerComp; j++) { targets[i].duplicate(); made++; }
}
alert("追加したコンポ:" + made + "個");
} catch (error) {
alert("途中停止(追加" + made + "個):" + error.toString() + "\n編集→取り消しで今回分を戻してください。");
} finally { app.endUndoGroup(); }
}());
| 入力 | 追加数 | 確認する点 |
|---|---|---|
| コンポ1個/totalPerComp=3 | 2個追加 | 元を含め3個 |
| コンポ2個/totalPerComp=100 | 198個追加 | 各コンポ系列で100個 |
| 選択0・コンポ以外を混在 | 追加0 | 選択と対象を確認 |
| 追加総数が500個超 | 追加0で停止 | 少数から実行範囲を決める |
選択した対象を最初に配列へ保存し、複製でプロジェクト項目が増えても処理対象を増やしません。
合計数を101へ変えると各元コンポへ100個追加するため、「追加100」と「合計100」を分けます。
Windowsで複製数と取り消しを確認
960×540、30fps、2秒のPractice_AとPractice_Bを作り、それぞれに同じShared_Sourceを1レイヤー配置しました。Shared_Sourceは320×180の赤い平面を含むコンポです。先に練習用AEPを保存し、プロジェクトパネルの選択だけを変えて本文コードを実行しました。
まずPractice_Aだけを選び、totalPerCompを3に変更すると、完了メッセージは「追加したコンポ:2個」でした。プロジェクトパネルには元のPractice_Aと、Practice_A 2・Practice_A 3が並びます。合計3個であって、3個を追加する設定ではありません。

OKでメッセージを閉じ、Ctrl+Zを1回押すと追加2個が消え、Practice_AとPractice_B、Shared_Sourceの元の3コンポへ戻りました。次にPractice_AとPractice_Bの2個を選び、totalPerCompを100へ戻して実行すると、完了メッセージは198個追加でした。実際のコンポ項目もA系列100個・B系列100個でした。

この198個の追加も、OKを押してからCtrl+Zを1回実行すると元の3コンポへ戻りました。取り消したあとに別の編集を挟まず、プロジェクトパネルで個数を確認してください。Shared_Sourceは複製対象にしていないので、この確認では合計数に含めません。
複製後のA・B系列200個について、中のレイヤーが参照するソースIDはすべて同じでした。外側のコンポを増やしてもShared_Sourceは共有されたままです。キャラクターや背景までコピーごとに独立させたい場合は、このコードだけでは目的を満たしません。
選択なし、Practice_Aとフォルダーを混在、Practice_AだけでtotalPerComp=502(追加予定501個)の3条件でも実行しました。それぞれ選択・対象型・上限のメッセージで止まり、プロジェクト項目の追加は0個でした。上限に当たった場合は、選択数とtotalPerCompを減らしてください。
500個ちょうどの追加、途中でメモリ不足などが起きた場合、動画や多数のエフェクトを含む大規模コンポ、Mac・他のAEバージョンは未検証です。処理時間のベンチマークは行っていません。まず合計3個で試し、保存した練習コピーを残してください。
あなたはどっち?複製方法の使い分けフロー
複製したい対象と数に合わせて、次の順に選びます。
- 対象がフッテージで、少数だけ複製したい:プロジェクトパネルで対象を選び、「編集→複製」(WindowsはCtrl+D、MacはCommand+D)を使います。
- 対象がコンポで、各コンポを合計100個にしたい:この記事のスクリプトを使います。元の1個を含めて合計100個なので、追加するのは99個です。
- フッテージやフォルダーが混ざっている:このスクリプトは追加前に停止します。コンポだけを選び直してください。
- コピーごとに名前違いの独立データが必要:コンポを複製しても、内部で参照する素材は独立しません。同じソースを変更すると複数のコピーに影響します。
初めて使うときは、先に別名保存し、totalPerCompを3へ変更して小さな練習から始めます。
失敗したときの切り分けと復元
タイムラインのレイヤー選択だけで実行せず、プロジェクトパネルのコンポ項目を選択します。
停止メッセージでは対象型と追加数の上限を確認します。
処理中の例外では、成功した追加数を表示して停止します。
再実行を重ねず「編集→取り消し」で今回の複製を戻し、元の個数を確認してから保存コピーを使います。
次の画像は旧記事の参考画像で、今回改訂コードの実行結果ではありません。

仕様の参照:CompItem.duplicate()、FootageItemの仕様、Adobeのスクリプト実行方法。
手動複製の参照:Adobeのプロジェクト項目の複製手順。
枠を揃えるときはコンポサイズのシェイプ、中のレイヤーを移すときは単純2Dプリコンポの展開を参照します。
関連記事と旧配布資料
関連記事は目的に応じて使い分けます。
旧配布コードと、このページの改訂コードは同じものではありません。





