[After Effects] 生成AIを使ってアニメーションをつくってみる

2025/05/10

AfterEffects
Animation

今回はChatGPTにAfter Effectsでアニメーションを作ってもらおうと思います。
まずは簡単なテキストのエフェクトから。

プロンプト:
Sampleという文字がかっこよく出てくるアニメーションをAfter Effects用の JavaScript/ExtendScript スニペットで生成してください

回答:
以下は After Effects(2024 以降)用の JavaScript/ExtendScript スニペット です。
実行すると、コンポジションとテキストレイヤーを自動生成し、「SAMPLE」がズームイン+グローしながらフェードインする“かっこいい登場”アニメーションを作ります。

使い方
スクリプトパネルで .jsx として保存→AEで File ▸ Scripts ▸ Run Script File… から実行。
**文字内容やタイミングは後からレイヤーのソーステキスト/キーフレームを編集できます。

/* ──────────────────────────────────────
   SAMPLE Text Intro Animation  v5
   1920×1080 / 29.97 fps / 5 秒
────────────────────────────────────── */
(function () {
  app.beginUndoGroup("Create SAMPLE Intro");

  /* 1. コンポジション */
  var comp = app.project.items.addComp("SAMPLE_Intro", 1920, 1080, 1, 5, 29.97);

  /* 2. テキストレイヤー */
  var txt = comp.layers.addText("SAMPLE");
  var doc = txt.property("Source Text").value;
  doc.fontSize = 240; doc.fillColor = [1,1,1];
  doc.justification = ParagraphJustification.CENTER_JUSTIFY;
  txt.property("Source Text").setValue(doc);
  txt.position.setValue([960,540]);

  /* 3. Glow 追加(名称フォールバック) */
  var fx = txt.property("ADBE Effect Parade");
  var gNames = ["ADBE Glow2", "ADBE Glo2", "ADBE Glow"];
  var glow = null;
  for (var i=0;i<gNames.length && !glow;i++){
    try { glow = fx.addProperty(gNames[i]); } catch(e){}
  }

  /* 4. Glow Intensity 取得 */
  var glowInt = null;
  if (glow) {
    var cand = ["Glow Intensity","ADBE Glow Intensity","Glow-003"];
    for (var j=0;j<cand.length && !glowInt;j++){
      glowInt = glow.property(cand[j]);
    }
    if (!glowInt) {
      for (var k=1;k<=glow.numProperties && !glowInt;k++){
        var p = glow.property(k);
        if (p && /Intensity/i.test(p.name)) glowInt = p;
      }
    }
  }

  /* 5. キーフレーム設定 */
  var scale   = txt.property("Scale");
  var opacity = txt.property("Opacity");

  scale.setValueAtTime(0.00,[30,30]);    opacity.setValueAtTime(0.00,  0);
  scale.setValueAtTime(0.20,[115,115]);  opacity.setValueAtTime(0.20,100);
  scale.setValueAtTime(0.30,[100,100]);  opacity.setValueAtTime(0.30,100); // ← 追加

  if (glowInt) {
    glowInt.setValueAtTime(0.00,0);
    glowInt.setValueAtTime(0.20,80);
    glowInt.setValueAtTime(0.30,0);
  }

  /* 6. イージーイーズ設定――プロパティごと判定 */
  var easeIn  = new KeyframeEase(0,75);
  var easeOut = new KeyframeEase(0,75);

  function makeEaseArr(dim,e){ var a=[]; for(var d=0;d<dim;d++) a.push(e); return a; }

  var sclIn  = makeEaseArr(scale.value.length, easeIn);
  var sclOut = makeEaseArr(scale.value.length, easeOut);

  var maxKeys = Math.max(scale.numKeys, opacity.numKeys, glowInt ? glowInt.numKeys : 0);
  for (var n=1; n<=maxKeys; n++){
    if (n <= scale.numKeys)   scale  .setTemporalEaseAtKey(n, sclIn,  sclOut);
    if (n <= opacity.numKeys) opacity.setTemporalEaseAtKey(n,[easeIn],[easeOut]);
    if (glowInt && n <= glowInt.numKeys)
                             glowInt.setTemporalEaseAtKey(n,[easeIn],[easeOut]);
  }

  /* 7. 背景黒平面 */
  var bg = comp.layers.addSolid([0,0,0],"BG",1920,1080,1); bg.moveToEnd();

  app.endUndoGroup();
})();

結果このような動画が生成されました。

Untitled

実は5回ほどエラーが出て、やりとりをしています。
もう少しリッチなものを作りたいところですが、まだまだうまくいかないので別の方法を探ってみようかな。

今回は手軽にAEでアニメーションを作ってみる方法ぐらいにとどめてもらえますと幸甚の至りです。