loopOut は、キーフレームで作った動きを、最後のキーフレームのあとも繰り返すエクスプレッションです。
回り続ける歯車や、点滅し続けるアイコンなど、同じ動きをずっと続けたいときに使います。
- 基本:プロパティのエクスプレッションに loopOut() と書く
- 繰り返し方は4種類:cycle・pingpong・offset・continue
- 最後と1つ前のキーの間を繰り返す:
loopOut("cycle", 1) - cycle・pingpong・offsetの練習は2キー以上で時間区間を作る
この記事は、Adobe公式の「Expression language reference」の説明(2026年10月3日に公式資料を確認)にもとづいています。
表の数値は、説明のとおりに計算したもので、After Effectsの画面での再現は含みません。
loopOutの書き方
- 繰り返したいプロパティ(回転・位置など)にキーフレームを2つ以上打つ
- プロパティ名の左のストップウォッチを Alt(Macは Option)を押しながらクリックする
- 表示された入力欄に次の1行を書く
loopOut()何も指定しないと、loopOut("cycle") と同じ意味になり、すべてのキーフレームの動きを最初から繰り返します。
繰り返しは、レイヤーの終わり(アウトポイント)まで続きます。
4つの型の違い
// 比較用。4行のうち1行だけを貼る。
loopOut("cycle")
loopOut("pingpong")
loopOut("offset")
loopOut("continue")| 型 | 動き方 |
|---|---|
| cycle(初期値) | 同じ動きを最初から繰り返す |
| pingpong | 前向きと後ろ向きを交互に繰り返す |
| offset | 繰り返すたびに、最初と最後の差を上乗せしていく |
| continue | 繰り返さず、最後のキーフレームの速さのまま動き続ける |
同じ動きで比べる
回転に、0秒で0°、1秒で90°の2つのキーフレームを打ち、直線で動かした場合です。
| 時間 | cycle | pingpong | offset | continue |
|---|---|---|---|---|
| 0.5秒 | 45° | 45° | 45° | 45° |
| 1.25秒 | 22.5° | 67.5° | 112.5° | 112.5° |
| 1.5秒 | 45° | 45° | 135° | 135° |
| 1.75秒 | 67.5° | 22.5° | 157.5° | 157.5° |
| 2.25秒 | 22.5° | 22.5° | 202.5° | 202.5° |
1秒までは、どの型もキーフレームのとおりに動きます(1秒で90°)。
そのあと cycle は0°に戻って同じ動きをくり返し、pingpong は90°から0°へ向かって戻ります。
offset と continue は、回り続けるので同じ値になっています。
continueは終端の速度を延長します。終端速度が0の動きなら延長しても値は変わりません。offsetは区間の値差を積み重ねるため、終端の速度が0でも動きを繰り返します。
どれを使うか
- 点滅や揺れなど、同じ動きをそのまま繰り返す:cycle
- 行ったり来たりする振り子やまばたき:pingpong
- 歯車の回転や、階段状に上がる動き:offset
- 最後の勢いのまま流れていく動き:continue
繰り返す範囲を指定する
2つ目の数字で、最後から何区間を繰り返すかを決められます。
loopOut("cycle", 1)1なら、最後のキーフレームとその1つ前の間だけを繰り返します。
0(初期値)なら、すべてのキーフレームを繰り返します。
登場の動きのあとに、一部だけを繰り返したいときに使います。
continue には、この2つ目の数字を付けられません。
秒数で指定するloopOutDuration
loopOutDuration("cycle", 1)こちらは、最後のキーフレームから1秒さかのぼった範囲を繰り返します。
loopInで最初より前も繰り返す
loopIn は、最初のキーフレームより前の時間を繰り返すエクスプレッションです。
レイヤーの始まり(インポイント)から繰り返しが始まります。
キーフレームの前後どちらも繰り返したいときは、2つをつなげて書きます。
var result = value;
if (numKeys >= 2) {
if (time < key(1).time) result = loopIn("cycle");
else if (time > key(numKeys).time) result = loopOut("cycle");
}
result;value は、この式を適用する前のプロパティ値です。
この例は時刻で分岐し、キーより前はloopIn、後はloopOut、キー間は元の値を返します。値の次元を変えず、キーが0個・1個のときも元の値を保ちます。
loopOutが効かないとき
- cycleなどの区間を繰り返したいのにキーが1つしかない。練習では2つ以上を用意する
- ソーステキスト、シェイプのパス、レベル補正のヒストグラムなど、数値で表せないプロパティに書いている
- 型の名前のつづりが違う(”pingPong” ではなく “pingpong”)
- レイヤーの終わり(アウトポイント)が、最後のキーフレームのすぐ後ろで切れている
数値が大きすぎる区間の指定は、使える最大の範囲に切り詰められます。
ウィグルをループさせたいときは loopOut では足りないので、After Effectsのウィグルをループさせるエクスプレッションで紹介している方法を使います。
コンポジション全体を繰り返したいときは、After Effectsのコンポジションをループさせる方法で紹介しています。
キー間とキー以降を分けて確かめる練習
保存した練習レイヤーの回転に、0秒0°・1秒90°の直線キーを打ちます。
レイヤーのアウトポイントを3秒以降に伸ばし、4種類は1つずつ貼り替えます。
0.5秒は45°、1秒は90°で元の区間を確認し、1.5秒ではcycle45°・pingpong45°・offset135°・continue135°になる計算を比較します。
cycleは最後の値から最初の値へ切り替わるため、端の値が違えば境界で飛びます。
切れ目をなくしたい場合は最初と最後の値を揃えるか、用途に応じてpingpong・offsetを選びます。
第2引数の1は「1キーの値」ではなく、最後の2キーに挟まれた1区間です。
Durationの1は秒数なので、キー間の長さが違う場合は同じ範囲になりません。
数値または数値配列のプロパティが対象です。
ソーステキストやパスへこの式をそのまま貼りません。
AE本体での実行は未検証で、表は区間の計算例です。
元に戻すときは式を無効にするか、保存した式を戻します。
練習のキー・レイヤーの終了時刻も保存した状態に戻します。
まとめ
- loopOut() だけで、最後のキーフレームのあとも動きが続く
- cycle は繰り返し、pingpong は往復、offset は積み上げ、continue は勢いのまま
- 2つ目の数字で、最後から何区間を繰り返すかを決める
- cycle・pingpong・offsetの練習は2キー以上で時間区間を作る
参考:Adobe「Expression language reference」(2026年10月3日に公式資料を確認)。
