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

After Effects│弾む動き(オーバーシュート・慣性)を付けるエクスプレッション

キーフレームで止まった瞬間に、少し行き過ぎてから戻る動きを付けると、動きに勢いが出ます。

キーフレームを増やさなくても、エクスプレッションで自動的に付けられます。

  • 使う場所:位置・拡大・縮小・回転など、キーフレームで動かしているプロパティ
  • 揺れの大きさ(amp)・揺れの速さ(freq)・収まる速さ(decay)の3つで調整する
  • 最後のキーフレームの直前の速さが大きいほど、大きく弾む
  • キーフレームのあいだの動きはそのまま

この記事の式は、Adobe公式の「Expression language reference」にある関数(numKeys・nearestKey・velocityAtTime など、2026年10月3日に公式資料を確認)で組み立てたものです。

値の変化は Node.js で計算して確かめたもので、After Effectsの画面での再現は含みません。

目次

式

弾ませたいプロパティのストップウォッチを Alt(Macは Option)を押しながらクリックし、次の式を書きます。

var amp = 0.06;
var freq = 3.0;
var decay = 5.0;
var n = 0;
if (numKeys > 0) {
  n = nearestKey(time).index;
  if (key(n).time > time) n--;
}
var result = value;
if (numKeys >= 2 && n == numKeys) {
  var t = time - key(n).time;
  var v = velocityAtTime(key(n).time - thisComp.frameDuration / 10);
  var amount = amp * Math.sin(freq * t * 2 * Math.PI) / Math.exp(decay * t);
  result = add(value, mul(v, amount));
}
result;

式の中でやっていること

  1. いまより前で、いちばん近いキーフレームの番号(n)を探す
  2. そのキーフレームを過ぎてからの時間(t)を求める
  3. キーフレームに着く直前の速さ(v)を取る
  4. 最後のキー以降だけ、速さに合わせた揺れ(sin)を時間とともに小さく(exp)して、元の値に足す

キーが0個または1個のときと、最後のキーより前は元の値を返します。最後のキー以降だけに揺れを足すので、途中のキー間は変えません。add と mul はAEのベクトル演算です。数値だけでなく、位置の2値・3値にも同じ式を使えます。

値の変化を確かめる

0.5秒で0から100まで直線で動かしたプロパティに、上の式をかけた場合を計算しました。

最後のキーフレームに着く直前の速さは、1秒あたり200です。

キーフレームからの時間値
0秒100.0
0.05秒107.6
0.083秒107.9(最初の山付近)
0.167秒100.0
0.25秒96.6(少し戻りすぎる)
0.333秒100.0
0.75秒100.3
1秒100.0
amp 0.06・freq 3・decay 5 で計算した値

100で止まるはずの値が、一度約108まで行き過ぎ、約97まで戻ってから、1秒ほどで収まっています。

3つの数値の調整

数値大きくすると小さくすると
amp(揺れの大きさ)大きく行き過ぎる控えめになる
freq(揺れの速さ)小刻みに揺れるゆったり揺れる
decay(収まる速さ)すぐに止まる長く揺れ続ける

まずは amp だけを変えて、行き過ぎる量を決めるのがおすすめです。

揺れの大きさは、キーフレームに着く直前の速さに比例します。

この式はキーより少し前の速度を取ります。イージーイーズで直前の速度が小さくなると揺れも小さくなるので、練習では最後のキーフレームを直線にします。

新しい版の書き方(previousKey)

今の公式リファレンスには、「その時間かそれより前のキーフレーム」を返す previousKey(time) があります。

次の式はキーからの経過秒を返す独立した説明用の式です。上の弾む式の代わりにはなりません。数値プロパティに単独で使い、previousKey が未定義になる版では使わず、上の nearestKey 版を使います。

// 現在の公式リファレンスの例。結果を数値で返す。
var elapsed = 0;
if (numKeys > 0) {
  var k = thisProperty.previousKey(time);
  if (k.time <= time) elapsed = time - k.time;
}
elapsed;

ただし、最初のキーフレームより前では最初のキーフレームを返すので、k.time > time のときは元の値を返すようにします。

古い版でも動かしたいときは、上の nearestKey を使う書き方にしておくと安全です。

うまくいかないとき

  • 弾まない:最後のキーフレームがイージーイーズになっていないか、動きの速さが0でないかを見る
  • 揺れすぎる:amp を小さくするか、decay を大きくする
  • 位置でエラーになる:位置を「次元に分割」している場合は、X と Y のそれぞれに式を書く

最後の勢いのまま動かし続けたいときは、After EffectsのloopOutの使い方で紹介している continue も使えます。

最後のキーだけを弾ませる練習

練習用の2Dレイヤーを複製し、位置に0秒で [0, 0]、0.5秒で [100, 0] の直線キーを置きます。

式は位置に貼り、キー間と最後のキー以降を分けて見ます。

表の値は一定速度200を入力したローカル計算で、AE画面の実測ではありません。

練習入力期待する値確認する範囲
キー0個・1個元の値揺れを足さない
0.25秒[50, 0]途中は元の補間値
0.5秒[100, 0]最後のキーの時刻
0.55秒約 [107.6, 0]停止後に行き過ぎる

位置を次元に分割している場合はX位置・Y位置それぞれに対応するキーが必要です。

イージーイーズなどでキー直前の速度が小さいと揺れも小さくなります。

必ず0になるとは限りません。

揺れを外すときは式を無効にし、残した2キーの動きと比較します。

練習用エクスプレッション6本をダウンロードできます。

READMEの貼付先を確認し、1つずつ練習用プロパティに使います。

AE本体での動作確認は含みません。

まとめ

  • キーフレームのあとに、行き過ぎて戻る動きを式で足せる
  • amp・freq・decay の3つで、大きさ・速さ・収まり方を決める
  • 練習は直線キーで行う。キー直前の速度が小さいと揺れも小さくなる
  • previousKeyの例は経過秒を返す説明用。弾む式はnearestKey版を使う

参考:Adobe「Expression language reference」(2026年10月3日に公式資料を確認)。

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

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

After Effectsのおすすめ書籍

必要なPCスペック

周辺機器の優先度

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