Expressions in After Effects sind JavaScript-basierte Code-Schnipsel, die in jedes animierbare Eigenschaftsfeld eingefügt werden und dynamische, berechnungsbasierte Animationen ohne manuelle Keyframes ermöglichen.
Rubrik: Software & Tools Deep-Dive · Unterrubrik: Adobe After Effects · Niveau: Fortgeschritten Synonyme / Auch bekannt als: AE Expressions, JavaScript-Expressions, Expression Language
Was sind Expressions?
Expressions sind eine eingebaute Skriptsprache in After Effects, die auf der JavaScript-Syntax (genauer: ExtendScript/ECMA-262) basiert. Im Gegensatz zu After Effects-Scripting (das die gesamte Anwendung steuert) betrifft eine Expression immer genau eine einzige animierbare Eigenschaft eines Layers – z. B. Position, Rotation, Opacity, Effektparameter.
Eine Expression ersetzt oder ergänzt Keyframes: Statt fest codierter Werte zu bestimmten Zeitpunkten berechnet die Expression den Wert dynamisch für jeden Frame. Das eröffnet Möglichkeiten, die mit klassischen Keyframes nicht oder nur mühsam realisierbar wären: Mathematisch berechnete Bewegungen, reaktive Abhängigkeiten zwischen Layers, zufällige Variationen, Audio-reaktive Animationen und vieles mehr.
Erklärung mit konkreten Parametern
Expression aktivieren
Alt + Klick auf das Stoppuhr-Symbol (Uhr-Icon) einer animierbaren Eigenschaft in der Timeline. Das Expression-Feld öffnet sich – hier wird der JavaScript-Code eingegeben.
Wichtigste eingebaute Objekte
`time` Die aktuelle Zeit der Komposition in Sekunden (Float). ``javascript time // z. B. 2.04167 bei 2 Sekunden in 24fps time * 360 // Rotiert 360° pro Sekunde ``
`thisLayer` Referenz auf den eigenen Layer. ``javascript thisLayer.name // Name des Layers als String thisLayer.inPoint // In-Point des Layers in Sekunden thisLayer.width // Breite des Layers in Pixel ``
`thisComp` Referenz auf die aktuelle Komposition. ``javascript thisComp.width // Breite der Komposition (z. B. 1920) thisComp.height // Höhe (z. B. 1080) thisComp.duration // Dauer in Sekunden thisComp.frameDuration // Dauer eines Frames in Sekunden (1/fps) thisComp.layer("Name") // Zugriff auf anderen Layer per Name ``
`value` Der "rohe" Eigenschaftswert ohne die Expression – also der Wert der Keyframes oder des statischen Werts. ``javascript value + [0, 10] // Position: 10 Pixel nach unten versetzt value * 0.5 // Skalierung halbiert ``
Wichtige eingebaute Methoden
`valueAtTime(t)` Gibt den Wert einer Eigenschaft zu einem anderen Zeitpunkt zurück. Sehr mächtig für Follow-Effekte.
``javascript // Aktuelle Layer-Position, aber 0.1 Sekunden später: thisComp.layer("Pfeil").transform.position.valueAtTime(time - 0.1) ``
`linear(t, tMin, tMax, valMin, valMax)` Lineare Interpolation – mapped einen Wertebereich auf einen anderen. ``javascript // Slider 0–100 auf Opacity 0–1 mappen: linear(effect("Fade")("Slider"), 0, 100, 0, 100) ``
`ease(t, tMin, tMax, valMin, valMax)` Wie linear, aber mit weichem Ease-In/Out.
`clamp(value, limit1, limit2)` Begrenzt einen Wert auf einen Bereich. ``javascript clamp(wiggle(3, 50)[0], -100, 100) // Wiggle zwischen -100 und 100 begrenzen ``
`toComp(point)` / `toWorld(point)` / `fromComp(point)` Koordinaten-Transformation zwischen Layer-, Kompositions- und Weltkoordinaten.
Arrays und Vektoren
Viele Eigenschaften sind Arrays: Position ist [x, y], Farbe ist [r, g, b, a]. ```javascript // Nur Y-Wert ändern: [value[0], value[1] + 50]
// RGB-Farbe auf Graustufen mappen: [value[0], value[0], value[0], value[3]] ```
Schritt-für-Schritt Anleitung: Reaktive Positions-Expression
Ziel: Layer B folgt Layer A mit 0,3 Sekunden Verzögerung (Follow).
- Layer B auswählen, Position-Property aufklappen.
- Alt + Klick auf Stoppuhr der Position-Property.
- Expression eingeben:
``javascript thisComp.layer("Layer A").transform.position.valueAtTime(time - 0.3) ``
- Enter drücken. Layer B folgt Layer A mit 300ms Verzögerung.
- Für variable Verzögerung: Slider Control auf MASTER-Layer anlegen (Name: "Delay"), Expression anpassen:
``javascript delay = thisComp.layer("MASTER").effect("Delay")("Slider"); thisComp.layer("Layer A").transform.position.valueAtTime(time - delay) ``
Beispiele – 5 konkrete Anwendungen
- Digitale Uhr: Text-Layer mit Expression
Math.floor(time / 3600)(Stunden),Math.floor((time % 3600) / 60)(Minuten),Math.floor(time % 60)(Sekunden) – die Uhr läuft automatisch ab Frame 0. - Audio-Reaktive Grafik: Expression auf Scale-Property:
a = thisComp.layer("Audio-Amplitude").effect("Both Channels")("Slider"); linear(a, 0, 100, 80, 200)– Balken pulsiert mit Musik. - Endlos-Rotation: Rotation-Property:
time * 90– der Layer dreht sich mit 90 Grad pro Sekunde kontinuierlich ohne Keyframes. - Adaptives Layout: Wenn Text-Layer wächst, sollen Hintergrund-Shapes automatisch skalieren: Expression auf Scale des Hintergrunds referenziert
thisComp.layer("Text").sourceRectAtTime(time).width / 100. - Random but Stable: Zufällig scheinende, aber deterministisch generierte Animation:
seedRandom(index, true); wiggle(2, 30)– jeder Layer mit eigenemindex-Wert erzeugt einzigartiges, aber reproduzierbares Zufallsmuster.
In der Praxis
Shortcuts:
- Alt + Klick auf Stoppuhr → Expression-Feld öffnen
- E → Alle Expressions eines Layers anzeigen
- EE → Alle Expression-Texte sichtbar machen
- = Symbol neben Expression-Feld → Expression aktivieren/deaktivieren
- Strg/Cmd + Z → Expression-Änderung rückgängig
Häufige Fehler:
- "Expression deaktiviert" / rotes Expression-Feld: Syntax-Fehler im Code. After Effects deaktiviert Expressions bei Fehlern automatisch. Fehlermeldung im Expression-Feld lesen und korrigieren.
- Expression gibt immer 0 zurück: Falscher Rückgabewert. JavaScript-Expressions in AE geben den letzten ausgewerteten Ausdruck zurück (kein explizites
returnnotwendig, aber möglich). - Layer-Referenz "null" oder "undefined": Layer-Name falsch geschrieben oder Layer nicht in derselben Komposition. Layer-Namen in AE sind case-sensitive.
- Expression läuft sehr langsam: Komplexe Expressions (insbesondere
valueAtTime()auf animierten Properties) können performance-intensiv sein. Prerender-Workflow oder Expression-Ergebnisse als Keyframes einfügen (Animation > Expression in Keyframes konvertieren).
Profi-Tipp: After Effects unterstützt mehrzeilige Expressions und JavaScript-Funktionen. Komplexe Logik in Funktionen auslagern:
``javascript function mapRange(value, inMin, inMax, outMin, outMax) { return outMin + (outMax - outMin) * ((value - inMin) / (inMax - inMin)); } mapRange(time, 0, 5, 0, 100) ``
Vergleich & Abgrenzung
| Methode | Vorteil | Nachteil |
|---|---|---|
| Expressions | Dynamisch, wiederverwendbar, kompakt | Lernkurve (JavaScript) |
| Keyframes | Intuitiv, visuell im Graph Editor | Statisch, aufwändig bei Variation |
| After Effects Scripting (.jsx) | Automatisiert Workflows, Batch-Operationen | Steuert AE-Applikation, kein Per-Frame-Berechnung |
| Expressions-Plugins (z. B. Expression Universalizer) | Vereinfacht Syntax-Probleme | Lizenzabhängig |
Häufige Fragen (FAQ)
Kann ich externe JavaScript-Libraries in AE-Expressions einbinden? Nein. AE Expressions laufen in einer abgeschlossenen Umgebung ohne Zugriff auf externe Bibliotheken. Nur die eingebauten AE-Expressions-Objekte und Standard-JavaScript-Methoden (Math, Array, String etc.) sind verfügbar.
Was ist der Unterschied zwischen Expressions und After Effects Scripts (.jsx)? Expressions berechnen Eigenschaftswerte frame-für-frame innerhalb einer Komposition. Scripts (.jsx) sind vollständige JavaScript-Programme, die die AE-Applikation steuern (Layers erstellen, Properties setzen, Kompositions-Struktur aufbauen) und über Datei > Scripts ausgeführt werden.
Verwandte Einträge
Weiterführend
- Adobe After Effects Benutzerhandbuch – helpx.adobe.com/de/after-effects/using/expression-basics.html
- Adobe Expression Language Reference – helpx.adobe.com/after-effects/using/expression-language-reference.html
- Dan Ebberts: Motionscript.com – umfangreichste Expression-Referenz (englisch)
- School of Motion: After Effects Expressions 101 – schoolofmotion.com
