Introductie tot de basisprincipes van After Effects Scripting

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.

After Effects Scripts op VideoHive

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!


Je eerste script schrijven

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.


Het creëren van onze eerste compositie

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); 

Onze code opschonen

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.

  • Regel 8: nieuwe variabele maken
    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:

    • Naam van de compositie
    • Breedte van de compositie
    • Hoogte van de compositie
    • Pixelverhouding van de compositie
    • Tijd (in seconden) van de compositie
    • Framesnelheid van de compositie
  • 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.


Snelle Javascript-concepten

  • Variabele: kan een waarde, een reeks waarden of een object opslaan.
    • var myVar = "String-waarde";
    • var myVar = 2;
  • Array: bevat meerdere waarden. Arrays kunnen op twee manieren worden verklaard.
    • var myVar = array ("value1", "value2", 3);
    • var myVar = ["value1", "value2", 3];
  • Functie: onderdeel van de code die is ontworpen om een ​​specifieke taak uit te voeren.
    • function myFunction (argument) // Do something
  • Object: het object is iets complexer, maar u moet nu weten dat het over eigenschappen en methoden beschikt.
    • Eigenschap: Vergelijkbaar met een variabele
      myObject.myProperty = "Waarde"
    • Methode: vergelijkbaar met een functieaanroep
      myObject.myMethod (argument)

Ongedaan maken Groepen toevoegen

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 (); 

De achtergrondlaag maken

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 (); 

Het rastereffect toevoegen

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.


De wislaag maken

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?).


De tekstlaag toevoegen

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.


De ellipsen toevoegen

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.


Conclusie

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:

  • Adobe After Effects CS6 Scripting Guide
  • MotionScript
  • Javascript op Codeacademy
  • Inleiding tot het schrijven van scripts