After Effectsのアニメーションプリセット(.ffx)は、JSXのapplyPresetで選択中のレイヤーへ適用できます。
この記事では、自作した回転プリセットを選択した2枚へ1回の呼び出しで適用し、キーの時刻とUndoまで確認します。
パネルからの適用・自作・保存場所・出てこないときの対処はアニメーションプリセットの使い方にまとめました。
自作プリセットを用意して2枚へ適用する手順
練習用プロジェクトを別名保存してください。
検証では、960×540・30fpsのコンポジションに200×100の平面を作り、「回転」に0秒=0度、1秒=90度の2つのキーを設定しました。
補間はリニアです。
- 回転のプロパティ名を選び、「アニメーション」→「アニメーションプリセットを保存」でpractice.ffxを保存します。位置など不要なプロパティを選ばないようにします。
- 別の960×540・30fps・4秒のコンポジションに、回転のキーがない200×100の平面を2枚用意します。左右に並べ、両方のレイヤーを選択します。
- 現在時刻を2秒に移します。この位置が今回の適用開始位置です。
- 下のコードをapply-preset.jsxとしてUTF-8で保存し、「ファイル」→「スクリプト」→「スクリプトファイルを実行」で開きます。表示されるダイアログでpractice.ffxを選びます。
- 2枚を選択したままUキーを押して回転のキーを表示し、2秒・3秒の値と、2秒15フレームの表示を確認します。
Adobeのアニメーションプリセットの公式説明では、選択したプロパティの保存方法と、現在時刻への適用が説明されています。
エフェクト&プリセットパネルに表示するにはPresetsフォルダーへの保存が必要ですが、この記事のファイル選択方式では練習フォルダーに保存したffxを直接指定できました。
掲載コードを2枚へ適用した実機結果
2026年10月14日、Windows 11 Pro(10.0.26200)/After Effects 26.5(Build 89、日本語表示)で、下の掲載コードを変更せず実行しました。
自作practice.ffxの回転キーは、選択したTarget0・Target1の両方に追加されました。
| 操作・条件 | 実機結果 |
|---|---|
| 適用前 | 2枚とも回転キー0個、回転0度 |
| 2秒で1回適用 | 両方に2秒=0度、3秒=90度の2キー |
| 2秒15フレーム(2.5秒) | 両方45度。左右の平面が同じ角度で表示 |
| 適用後にCtrl+Zを1回 | 両方の回転キーが0個、回転0度に復帰。2枚の選択も維持 |
| 元に戻した状態から実行し、ファイル選択をキャンセル | 両方とも回転キー0個のまま |

applyPresetは同じコンポジションの選択レイヤーを対象にします。
掲載コードはsaved[0]から1回だけ呼び出しますが、今回の実機でも2枚に適用されました。
選択を維持したまま各レイヤーへ繰り返し呼ぶと同じ選択範囲が対象になるため、このコードではループで適用しません。
APIの補足は、コミュニティで保守されているLayer.applyPreset参照でも確認できます。
確認したのは自作の回転プリセットによるキーの追加、2.5秒の画面表示、正常適用後のUndo、キャンセルです。
市販プリセットや第三者プラグイン、適用途中でエラーになった場合の復旧、映像全体の一致は未検証です。
アニメーションプリセットをスクリプトから呼ぶコード
(function () {
var comp = app.project && app.project.activeItem;
if (!(comp instanceof CompItem)) { alert("Open a composition."); return; }
var layers = comp.selectedLayers, saved = [], i;
if (!layers.length) { alert("Select at least one layer."); return; }
for (i = 0; i < layers.length; i++) {
if (layers[i].locked) { alert("Unlock the selected layers first."); return; }
saved.push(layers[i]);
}
var preset = File.openDialog("Choose your practice .ffx preset");
if (!preset) { return; }
if (!preset.exists || !/\.ffx$/i.test(preset.name)) { alert("Choose an existing .ffx file."); return; }
layers = comp.selectedLayers;
if (app.project.activeItem !== comp || layers.length !== saved.length) { alert("Selection changed."); return; }
for (i = 0; i < layers.length; i++) {
if (layers[i] !== saved[i] || layers[i].locked) { alert("Selection changed."); return; }
}
app.beginUndoGroup("Apply one practice preset");
try {
// applyPreset acts on all selected layers in this comp. Call it once.
saved[0].applyPreset(preset);
} catch (error) {
alert("Stopped: " + error.toString() + "\nUndo or reopen your practice copy.");
} finally { app.endUndoGroup(); }
})();
このコードはファイル選択ダイアログを使うため、パスをコードへ書き込む必要はありません。
ffxのデータをJSXへ変換する処理ではなく、保存済みのffxを読み込んで適用する処理です。
適用できないときと元に戻すときの確認
コードは、コンポジションが開かれていない場合、レイヤーが未選択の場合、選択レイヤーにロックがある場合に処理を止めます。
ダイアログを閉じた後にはファイルの存在・拡張子と選択状態を再確認します。
これらはコード上の条件です。
今回、実機で試した中断操作はダイアログのキャンセルです。
動きが見えない場合は、適用した時刻とキーの位置を確認します。
今回のキーは2〜3秒に入るため、0〜1秒だけ再生しても回転しません。
Uキーでキーを表示し、対象の2枚が選択されているか、保存したffxに必要なプロパティが含まれているかを確認してください。
やり直す場合は、適用直後にCtrl+Zを押して元のキー数・値を確認してから再実行します。
今回の正常適用は1回のUndoで戻りました。
適用途中のエラーでは一部の変更が残る可能性を考慮し、元の練習用コピーと照合してください。
プリセット全体を1つのスイッチで無効化することはできません。
参考:スケールと不透明度を含むプリセットの画面
以下は2026年10月13日に撮影した別のプリセット例です。
対象は1枚で、今回の2枚・回転の検証とは入力条件が異なります。
スケールと不透明度に0秒・1秒のキーがあり、13フレームではスケール66.4%、不透明度52%、1秒では両方100%と表示されています。


After Effectsに関するほかの操作手順は、まとめ記事から確認できます。

旧実装の参考コードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
エクスプレッションの記述方法やスクリプト化に関連する記事もあわせて参照してください。




