In unserem aktuellen Tutorial zum Workflow für die Skriptentwicklung werden die grundlegenden Konzepte und bewährten Methoden beschrieben, die zum Schreiben von After Effects-Skripts erforderlich sind. Wir werden die üblichen After Effects-Aktionen durchgehen, zum Beispiel: Erstellen eines Projekts, Erstellen einer Komposition, Erstellen einer Ebene, Erstellen von Effekten, Hinzufügen von Werten und Ausdrücken, Verwenden von Text und Schriftarten, Hinzufügen von Keyframes, Verwenden von Funktionen usw..
Wenn Sie nach einer schnellen Lösung mit einem After Effects-Skript suchen, gibt es auf VideoHive eine großartige Sammlung. Sie können auch beantragen, Ihre eigenen Skripts als Autor einzureichen!
Wie im Tutorial für die Installation und Verwendung des After Effects Sublime Text-Buildpakets beschrieben, handelt es sich bei Skripts um Dateien, die die Sprache Adobe ExtendScript verwenden. ExtendScript ist eine erweiterte Form von JavaScript, die von verschiedenen Adobe-Anwendungen verwendet wird, z Photoshop, Illustrator, und InDesign. ExtendScript ist eine gute und effiziente Methode, um alles zu erreichen, was Sie in After Effects wünschen.
Skripts verwenden die Sprache Adobe ExtendScript, eine erweiterte Form von JavaScript, die von verschiedenen Adobe-Anwendungen wie Photoshop, Illustrator und InDesign verwendet wird
In diesem Lernprogramm werden die grundlegenden Konzepte und bewährten Methoden erläutert, die zum Schreiben von After Effects-Skripts erforderlich sind.
Wir beginnen mit der Verwendung von
neues Projekt()
Methode der
App
Objekt und wickeln Sie es zwischen geschweiften Klammern.
// Projekt erstellen app.newProject ();
Das
App
Objekt ist die Wurzel von fast allem, was in diesem Schema zu sehen ist:
Dieses Schema ist im Adobe After Effects CS6 Scripting-Handbuch enthalten, wie die meisten in diesem Lernprogramm erklärten.
Wir erstellen jetzt unsere Komposition mit der
App
Unterobjekte des Objekts
Projekt
welches das in der ersten Zeile erstellte Projekt und das
Artikel
Unterobjekt, mit dem Sie auf die Ordner und Kompositionen zugreifen können, die Sie in After Effects in Ihrem Projektfenster sehen.
// Projekt erstellen app.newProject (); // comp erstellen app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24);
Das Schreiben von sauberem und wartungsfähigem Code ist sehr wichtig. Wir schreiben keine schnellen und schmutzigen Ausdrücke mehr. Da wir möchten, dass unsere Skripts leicht skalierbar sind, müssen wir die Konventionen der Javascript-Community berücksichtigen.
Wir isolieren daher Schlüsseldaten in Variablen und benennen sie entsprechend ihrem Inhalt. Außerdem werden Bedingungen für den Fall festgelegt, dass in unserer After Effects-Datei bereits ein Projekt oder eine Komposition vorhanden ist.
// Projekt erstellen var currentProject = (app.project)? app.project: app.newProject (); // comp var erstellen compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo"; var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer ();
Das
var
Schlüsselwort zeigt an, dass die folgende Variable eine neue Variable ist. Deshalb verwenden wir in Zeile 9 nicht die
var
Keyword mehr, weil wir verwenden wollen
currentComp
's Wert (was ist der Comp, den wir gerade erstellt haben).
Das haben wir Zeile für Zeile in Klartext gemacht:
Zeile 3: Neue Variable erstellen
derzeitiges Projekt
was gleich ist
app.project
ob
app.project
ist nicht undefiniert und wird sonst gleich
app.newProject ()
.
Zeile 6: Neue Variablen erstellen
compSettings
und
cs
was beides gleich einem neuen Array von Werten ist.
Zeile 7: Neue Variable erstellen
defaultCompName
welches den Namen enthält, den wir unserem Comp geben werden.
currentComp
das wird gleich der
activeItem
Eigentum unserer
derzeitiges Projekt
Objekt. Wenn es nicht undefiniert ist und sonst dem Ergebnis des entspricht
addComp
Methode der
Artikel
Unterobjekt von
derzeitiges Projekt
an wen senden wir eine Reihe von Argumenten mit:
Zeile 9: Verwenden Sie die
currentComp
Methode
openInViewer
Dadurch wird die Timeline für diese Komposition geöffnet.
Ja, das sind viele Methoden und Eigenschaften. Sie müssen sich auch im Adobe After Effects CS6 Skripting-Handbuch einmal oder anders umsehen, um mehr über die Objekte und ihre verfügbaren Methoden und Eigenschaften zu erfahren. Der Leitfaden ist wirklich gut geschrieben und eine schnelle Suche nach Projektobjekt bringt Sie sofort zu den richtigen Informationen.
var myVar = "Zeichenfolgewert";
var myVar = 2;
var myVar = array ("value1", "value2", 3);
var myVar = ["value1", "value2", 3];
Funktion myFunction (Argument) // etwas tun
myObject.myProperty = "Wert"
myObject.myMethod (Argument)
Da während der Ausführung des Skripts viele Operationen ausgeführt werden, sollten Sie entscheiden, was passiert, wenn Sie einen Treffer treffen
ein???? + Z
/
STRG + Z
Das macht es ziemlich einfach, wir müssen nur den Code zwischen
beginUndoGroup ()
und
endUndoGroup ()
Methoden der
App
Objekt. Für diese Methode wird ein Argument verwendet. Dies ist der Name, der in After Effects angezeigt wird
Bearbeiten> Verlauf
Speisekarte.
app.beginUndoGroup ("Demo Script"); // Projekt erstellen var currentProject = (app.project)? app.project: app.newProject (); // comp var erstellen compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); app.endUndoGroup ();
Um unsere Hintergrundebene zu erstellen, verwenden wir die
Schichten
Unterobjekt unserer
currentComp
. Ruf den
addSolid ()
Methode und senden Sie diese Argumente:
app.beginUndoGroup ("Demo Script"); // Projekt erstellen var currentProject = (app.project)? app.project: app.newProject (); // comp var erstellen compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); // Hintergrundebene erstellen var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Background", cs [0], cs [1], cs [2]); app.endUndoGroup ();
Am besten erstellen Sie ein zentriertes Kreuz, indem Sie den Gittereffekt auf unserer Hintergrundebene verwenden. Um dies zu tun, werden wir unsere verwenden
backgroundLayer
Variable, auf die sich bezieht
currentComp.layers.byName ("backgroundLayer")
und wir werden es benutzen
Auswirkungen
Eigentum.
// Hinzufügen des Rastereffekts backgroundLayer.Effects.addProperty ("Grid"); backgroundLayer.property ("Effects"). property ("Grid"). property ("Anchor"). setValue ([0,0]); backgroundLayer.property ("Effects"). property ("Grid"). property ("Corner"). expression = "[width / 2, height / 2]"; backgroundLayer.property ("Effects"). property ("Grid"). property ("Color"). setValue ([0,0,0]); backgroundLayer.property ("Effects"). property ("Grid"). property ("Blending Mode"). setValue (2);
Es gibt einige Dinge, die Sie hier beachten sollten. Zuerst die
Eigentum()
Die Methode ist verkettbar, dh Sie können sie mehrmals aufrufen, um die gewünschte Untereigenschaft zu erreichen.
backgroundLayer.property ("Deckkraft")
: Deckkraft der Ebene.
backgroundLayer.property ("Effects"). property ("Grid"). property ("Opacity")
: Deckkraft des Gittereffekts.
Zweitens verwenden wir die Methode
setValue ()
wenn wir einen Wert setzen wollen, aber nicht, wenn wir einen Ausdruck setzen wollen.
Um den Wipe-Effekt hinzuzufügen, erstellen wir eine neue Ebene und verwenden den Radial-Wipe-Effekt.
// Erstellen der Wischebene var wipeLayer = currentComp.layers.addSolid ([0.1, 0.1, 0.1], "Wipe", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effekte"). property ("Radial Wipe"). property ("Wipe"). setValue (2); // Gegen den Uhrzeigersinn wipeLayer.property ("Opacity"). SetValue (50); // Festlegen der Animation für den Wipe-Übergang wipeLayer.property ("Effekte"). Property ("Radial Wipe"). Property ("Transition Completion"). SetValueAtTime (0, 100); wipeLayer.property ("Effekte"). property ("Radial Wipe"). property ("Transition Completion"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). property ("Radial Wipe"). property ("Transition Completion"). expression = "loopOut ('Cycle')";
Wir haben die Methode angewendet
setValueAtTime ()
Keyframes einstellen und a
loopOut ("Zyklus")
die Animationsschleife machen (macht Sinn, richtig?).
Das Spielen mit Text ist etwas anders, da Sie die Eigenschaften des Quelltextwerts direkt ändern müssen.
// Hinzufügen einer Textebene var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Quelltext"); var textPropertyValue = textProperty.value; // Quelltexteinstellungen ändern textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Ausdruck zum Quelltext hinzufügen textProperty.expression = "Math.floor (10-fach)"; // Anpassen des Ankerpunkts für die Textebene var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Ankerpunkt"). setValue ([0, textLayerHeight.height / 2 * -1]);
Wir haben unsere Textwerteigenschaften geändert und verwendet
setValue ()
um es erneut an unsere Textebene zu senden. Wir haben auch einen einfachen Ausdruck verwendet, um unseren Countdown durchzuführen.
Math.floor ()
ist eine Javascript-Funktion, die den Dezimalteil einer Zahl entfernt. Danach zentrieren wir den Ankerpunkt mit dem
sourceRectAtTime ()
Methode.
Um die Ellipsen hinzuzufügen, verwenden wir die
addShape ()
Methode und geben Sie eine Vektorgruppe und eine Vektorform. Wir werden auch eine kleine Funktion erstellen, um Code-Wiederholung zu vermeiden.
// Formebene für die Kreise hinzufügen var shapeLayer = currentComp.layers.addShape (); // Hinzufügen einer Kreisformgruppe var shapeGroup = shapeLayer.property ("Contents"). AddProperty ("ADBE Vector Group"); // Kreisformen hinzufügen createEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Hinzufügen eines schwarzen Strichs zu den Formen var stroke = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); Funktion createEllipse (ShapeGroup, Größe) var ellipse = shapeGroup.property ("Contents"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Size"). setValue ([size, size]);
Linie 5 ist sehr wichtig, da Sie das nicht finden können
Inhalt
Dieses Dokument ist weder in der Dokumentation noch in Ihrer After Effects-Benutzeroberfläche enthalten. Vielen Dank an Dan Ebbert für seine Hilfe (http://forums.creativecow.net/thread/227/22280).
Wir haben eine benutzerdefinierte kleine Funktion verwendet, anstatt die Ellipsenerstellung zu duplizieren. Sie können Funktionen beliebig nutzen.
Faustregel: Wenn Sie Codezeilen einfügen, sollten Sie eine Funktion in Betracht ziehen.
Für den Rest haben wir nur die Eigenschaften der Form geändert. Sie können im Adobe After Effects CS6 Scripting-Handbuch nachschlagen, um sie aufgelistet anzuzeigen.
Sie haben vielleicht das bemerkt
var Strich
Die Linie sieht ein wenig anders aus als das, was wir bisher geschrieben haben. Javascript unterstützt die Verkettung über mehrere Zeilen hinweg. Das Ergebnis ist das gleiche und es gibt keinen guten oder schlechten Weg. Es ist eine persönliche Kodierungsstil-Wahl, die Sie vielleicht nicht übernehmen möchten.
Die Möglichkeiten der Skripterstellung sind endlos und können, sobald sie beherrscht werden, zu einem wirklich leistungsfähigen Werkzeug werden. Hier finden Sie weitere Dokumentation zu Scripting und Javascript: