Om samen te gaan met onze recente zelfstudie over de scriptontwikkelingsworkflow, bespreken we de basisconcepten en goede werkwijzen die nodig zijn om te beginnen met het schrijven van After Effects-scripts. We zullen de gebruikelijke After Effects-acties bekijken zoals: een project maken, een compositie maken, een laag maken, shapes maken, effecten toevoegen, waarden en expressies wijzigen, tekst en lettertypen gebruiken, keyframes toevoegen, functies gebruiken, enzovoort.
Als je op zoek bent naar een snelle oplossing met een After Effects-script, dan is er een geweldige collectie voorbij op VideoHive. Of u kunt overwegen om uw eigen scripts als auteur in te dienen!
Zoals vermeld in de installatiehandleiding en het handboek zelfstudie van After Effects Sublime Text-build, zijn scripts bestanden die de Adobe ExtendScript-taal gebruiken. ExtendScript is een uitgebreide vorm van JavaScript die wordt gebruikt door verschillende Adobe-toepassingen zoals Photoshop, Illustrator, en InDesign. ExtendScript is een goede en efficiënte manier om alles te bereiken wat je wilt in After Effects.
Scripts gebruiken de Adobe ExtendScript-taal, een uitgebreide vorm van JavaScript die wordt gebruikt door verschillende Adobe-toepassingen zoals Photoshop, Illustrator en InDesign
Deze tutorial gaat over de basisbegrippen en goede werkwijzen die nodig zijn om te beginnen met het schrijven van After Effects-scripts.
We beginnen met het gebruik van de
nieuw project()
methode van de
app
object en wikkel het tussen accolades.
// Project maken app.newProject ();
De
app
object is de wortel van bijna alles zoals te zien in dit schema:
Dit schema is te vinden in de Adobe After Effects CS6 Scripting Guide, zoals de meeste dingen die ik in deze tutorial zal uitleggen.
We maken nu onze compositie met behulp van de
app
object-subobjecten
project
die het project bevat dat is gemaakt in de eerste regel en de
items
subobject dat je toegang geeft tot de mappen en composities die je ziet in je projectvenster in After Effects.
// Project maken app.newProject (); // Creating comp app.projects.items.addComp ("Demo", 1280, 720, 1, 10, 24);
Het schrijven van schone en onderhoudbare code is erg belangrijk. We schrijven geen snelle en vuile expressies meer. Omdat we willen dat onze scripts eenvoudig schaalbaar zijn, moeten we de conventies van de Javascript-community omarmen.
We zullen dus sleutelgegevens isoleren in variabelen en ze overeenkomstig aan hun inhoud geven. We zullen ook voorwaarden stellen voor het geval er al een project of een compositie zou zijn in ons After Effects-bestand.
// Project var currentProject = (app.project) maken? app.project: app.newProject (); // Creating comp var 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 ();
De
var
sleutelwoord geeft aan dat de volgende variabele een nieuwe variabele is. Daarom gebruiken we op regel 9 de
var
sleutelwoord meer omdat we willen gebruiken
currentComp
's waarde (dat is de comp die we zojuist hebben gemaakt).
Hier is, regel voor regel, wat we in gewoon engels hebben gedaan:
Regel 3: Maak een nieuwe variabele
huidige project
die gelijk zal zijn aan
app.project
als
app.project
is niet ongedefinieerd en zal anders gelijk zijn aan
app.newProject ()
.
Regel 6: maak nieuwe variabelen
compSettings
en
cs
wat gelijk is aan een nieuwe reeks waarden.
Regel 7: maak een nieuwe variabele
defaultCompName
welke de naam bevat die we aan onze comp willen geven.
currentComp
die gelijk zal zijn aan de
activeItem
eigendom van onze
huidige project
voorwerp. Als het niet ongedefinieerd is en anders gelijk is aan het resultaat van de
Addcomp
methode van de
items
subobject van
huidige project
aan wie we een array van argumenten zullen sturen met daarin:
Regel 9: gebruik de
currentComp
methode
openInViewer
waarmee de tijdlijn voor deze compositie wordt geopend.
Ja, dat zijn een heleboel methoden en eigenschappen. Nogmaals, u zult op een of ander moment naar de Adobe After Effects CS6 Scripting Guide moeten kijken voor meer informatie over de objecten en hun beschikbare methoden en eigenschappen. De gids is echt goed geschreven en een snel zoeken naar Project object zal u onmiddellijk naar de juiste informatie leiden.
var myVar = "String-waarde";
var myVar = 2;
var myVar = array ("value1", "value2", 3);
var myVar = ["value1", "value2", 3];
function myFunction (argument) // Do something
myObject.myProperty = "Waarde"
myObject.myMethod (argument)
Omdat er tijdens de uitvoering van het script veel bewerkingen zullen plaatsvinden, moet u beslissen wat er gebeurt als u raakt
een???? + Z
/
CTRL + Z
Als dat zo is, hebben we gewoon onze code ingepakt tussen de
beginUndoGroup ()
en
endUndoGroup ()
methoden van de
app
voorwerp. Deze methode neemt één argument dat de naam is die in After Effects wordt weergegeven
Bewerken> Geschiedenis
menu.
app.beginUndoGroup ("Demo Script"); // Project var currentProject = (app.project) maken? app.project: app.newProject (); // Creating comp var 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 ();
Om onze achtergrondlaag te maken, gebruiken we de
lagen
subobject van onze
currentComp
. Bel de
addSolid ()
methode en stuur het deze argumenten:
app.beginUndoGroup ("Demo Script"); // Project var currentProject = (app.project) maken? app.project: app.newProject (); // Creating comp var 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 (); // Achtergrondlaag maken var achtergrondLayer = currentComp.layers.addSolid ([93, 5, 2], "Achtergrond", cs [0], cs [1], cs [2]); app.endUndoGroup ();
De beste manier om ons gecentreerde kruis te maken, is door het rastereffect op onze achtergrondlaag te gebruiken. Om dat te doen, zullen we onze
achtergrondlaag
variabele die verwijst naar
currentComp.layers.byName ( "achtergrondlaag")
en we zullen het gebruiken
Bijwerkingen
eigendom.
// De grid-effectachtergrond toevoegenLayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "Effecten") onroerend goed ( "Grid") onroerend goed ( "Anchor") setValue ([0,0])...; backgroundLayer.property ("Effects"). property ("Grid"). property ("Corner"). expression = "[width / 2, height / 2]"; eigendom backgroundLayer.property ( "Effecten") onroerend goed ( "Grid") ( "Kleur") setValue ([0,0,0])...; backgroundLayer.property ("Effects"). property ("Grid"). property ("Blending Mode"). setValue (2);
Er zijn enkele dingen die u hier moet opmerken. Eerst de
eigendom()
methode is te koppelen, wat betekent dat je het meerdere keren kunt noemen om de subeigenschap te bereiken die je wilt krijgen.
backgroundLayer.property ( "ondoorzichtigheid")
: Laagdekking.
backgroundLayer.property ( "Effecten"). eigendom ( "Grid"). eigendom ( "ondoorzichtigheid")
: De dekking van het rastereffect.
Ten tweede gebruiken we de methode
setValue ()
wanneer we een waarde willen instellen, maar niet wanneer we een expressie willen instellen.
Om het wiseffect toe te voegen, maken we een nieuwe laag en gebruiken we het Radiaal Wipe-effect.
// De wislaag maken var wipeLayer = currentComp.layers.add Solid ([0.1, 0.1, 0.1], "Wipe", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effects"). eigenschap ("Radial Wipe") eigenschap ("Wipe"). setValue (2); // Tegen de klok in wipeLayer.property ("Dekking"). SetValue (50); // Instelling wisanimatie wipeLayer.property ("Effects"). Property ("Radial Wipe") eigenschap instellen ("Transition Completion"). SetValueAtTime (0, 100); wipeLayer.property ("Effects"). property ("Radial Wipe") eigenschap ("Transition Completion"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). property ("Radial Wipe") eigenschap ("Transition Completion"). expression = "loopOut ('Cycle')";
We hebben de methode gebruikt
setValueAtTime ()
om keyframes in te stellen en a
LOOPOUT ( "Cycle")
om de animatielus te maken (klopt toch?).
Het spelen met tekst is een beetje anders omdat je de eigenschappen van de brontekstwaarde rechtstreeks moet wijzigen.
// Tekstlaag toevoegen var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Brontekst"); var textPropertyValue = textProperty.value; // De brontekstinstellingen wijzigen textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Expressie toevoegen aan brontekst textProperty.expression = "Math.floor (10-time)"; // Aanpassen tekstlaag ankerpunt var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Ankerpunt"). setValue ([0, textLayerHeight.height / 2 * -1]);
We hebben onze eigenschappen voor tekstwaarden gewijzigd en gebruikt
setValue ()
om het opnieuw naar onze tekstlaag te verzenden. We hebben ook een eenvoudige uitdrukking gebruikt om ons aftellen te maken.
Math.floor ()
is een Javascript-functie die het decimale gedeelte van een getal zal verwijderen. Daarna centreren we het ankerpunt met behulp van de
sourceRectAtTime ()
methode.
Om de ellipsen toe te voegen, gebruiken we de
addShape ()
methode en geef het een vectorgroep en een vectorvorm. We zullen ook een kleine functie vervullen om codeherhaling te voorkomen.
// Een vormlaag toevoegen voor de cirkels var shapeLayer = currentComp.layers.addShape (); // Cirkelvormen toevoegen groep var shapeGroup = shapeLayer.property ("Contents"). AddProperty ("ADBE Vector Group"); // Cirkelvormen toevoegen createEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Een zwarte lijn toevoegen aan de vormen var stroke = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); functie createEllipse (shapeGroup, size) var ellipse = shapeGroup.property ("Contents"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellip.property ("Size"). setValue ([size, size]);
Regel 5 is erg belangrijk omdat je de. Niet kunt vinden
Inhoud
eigendom in noch de documentatie noch in uw After Effects-interface voor het moment, dankzij Dan Ebbert voor zijn hulp (http://forums.creativecow.net/thread/227/22280).
We gebruikten een aangepaste kleine functie in plaats van de creatie van ellips te dupliceren. U kunt functies gebruiken zoals u dat wilt.
Basisvuistregel: als u regels codeert en plakt, kunt u overwegen een functie te gebruiken.
Voor de rest hebben we de eigenschappen van de vorm aangepast. U kunt de Adobe After Effects CS6 Scripting Guide raadplegen om ze te zien.
Je hebt misschien het
var slag
lijn ziet er iets anders uit dan wat we hebben geschreven. Javascript ondersteunt het koppelen van meerdere lijnen. Het resultaat zal hetzelfde zijn en er is geen goede of slechte manier, het is een persoonlijke codeerstijl die je wel of niet wilt aannemen.
De mogelijkheden van scripting zijn eindeloos en kunnen een echt krachtige tool maken als deze eenmaal onder de knie is. Hier is wat meer documentatie over scripting en Javascript: