Introduktion till grunderna för After Effects Scripting

För att följa med vår senaste handledning om skriptutvecklings arbetsflöde kommer vi att gå över de grundläggande begreppen och goda rutiner som krävs för att börja skriva After Effects-skript. Vi kommer att gå över vanliga effekter efter aktiviteter som: skapa ett projekt, skapa en komposition, skapa ett lager, skapa former, lägga till effekter, ändra värden och uttryck, använda text och teckensnitt, lägga till nyckelbilder, använda funktioner etc.

After Effects Scripts på VideoHive

Om du letar efter en snabb lösning med ett After Effects-skript finns det en bra samling över VideoHive. Eller du kan överväga att ansöka om att skicka in egna skript som författare!


Skriva ditt första skript

Såsom anges i After Effects Sublime Text-byggpaketinstallationen och användarhandledningen är skript filer som använder Adobe ExtendScript-språket. ExtendScript är en utökad form av JavaScript som används av flera Adobe-applikationer som Photoshop, Illustratör, och InDesign. ExtendScript är ett bra och effektivt sätt att uppnå allt du vill ha i After Effects.

Skript använder Adobe ExtendScript-språket, vilket är en utökad form av JavaScript som används av flera Adobe-applikationer som Photoshop, Illustrator och InDesign

Denna handledning kommer att gå över de grundläggande begreppen och goda rutiner som krävs för att börja skriva After Effects-skript.


Skapa vår första sammansättning

Vi börjar med att använda

nytt projekt()

metod för

app

objekt och omsluta det mellan lockiga fästen.

// Skapa projekt app.newProject (); 

De

app

objektet är roten till nästan allt som ses på detta schema:

Detta schema finns i Adobe After Effects CS6 Scripting Guide som det mesta av vad jag kommer att förklara i denna handledning.

Vi skapar nu vår komposition genom att använda

app

objektets underobjekt

projekt

som innehåller projektet skapat i första raden och

objekt

delobjekt som ger dig tillgång till de mappar och kompositioner du ser i ditt projektfönster i After Effects.

// Skapa projekt app.newProject (); // Skapa comp app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24); 

Rengöring Vår kod

Att skriva ren och underhållbar kod är verkligen viktigt. Vi skriver inte snabba och smutsiga uttryck längre. Eftersom vi vill att våra skript ska vara lätt skalbara måste vi omfamna Javascript-communityens konventioner.

Så vi ska isolera nyckeldata i variabler och namnge dem i enlighet med deras innehåll. Vi kommer också att ställa villkor om det redan skulle finnas ett projekt eller en komposition i vår After Effects-fil.

// Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa 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

nyckelordet indikerar att följande variabel är en ny variabel. Det är därför, på rad 9, använder vi inte

var

sökord längre eftersom vi vill använda

currentComp

s värde (vilket är det komplement vi just har skapat).

Här är linjen för rad, vad vi gjorde på vanlig engelska:

  • Rad 3: Skapa ny variabel

    nuvarande projekt

    vilket kommer att vara lika med

    app.project

    om

    app.project

    är inte odefinierad och kommer annars att motsvara

    app.newProject ()

    .

  • Rad 6: Skapa nya variabler

    compSettings

    och

    cs

    som båda motsvarar en ny uppsättning värden.

  • Linje 7: Skapa ny variabel

    defaultCompName

    som innehåller namnet vi kommer att ge till vår komp.

  • Linje 8: Skapa ny variabel
    currentComp

    vilket kommer att vara lika med

    activeItem

    egendom av vår

    nuvarande projekt

    objekt. Om det inte är odefinierat och annars kommer det att motsvara resultatet av

    addComp

    metod för

    objekt

    delobjekt av

    nuvarande projekt

    till vem vi ska skicka en rad argument som innehåller:

    • Kompositionens namn
    • Kompositionens bredd
    • Kompositionens höjd
    • Pixelförhållande av kompositionen
    • Tid (i sekunder) av kompositionen
    • Ramhastighet för kompositionen
  • Rad 9: Använd

    currentComp

    metod

    openInViewer

    som öppnar tidslinjen för denna komposition.

Ja, det är många metoder och egenskaper. Återigen måste du titta en gång till Adobe After Effects CS6 Scripting Guide för att lära dig mer om objekten och deras tillgängliga metoder och egenskaper. Guiden är verkligen välskriven och en snabb sökning efter Projektobjekt kommer omedelbart ta dig till rätt information.


Snabb Javascript-koncept

  • Variabel: Kan lagra ett värde, en uppsättning värden eller ett objekt.
    • var myVar = "Strängvärde";
    • var myVar = 2;
  • Array: Innehåller flera värden. Arrays kan deklareras på två sätt.
    • var myVar = array ("value1", "value2", 3);
    • var myVar = ["värde1", "värde2", 3];
  • Funktion: Del av kod som är utformad för att utföra en specifik uppgift.
    • funktion myFunction (argument) // Gör något
  • Objekt: Objektet är lite mer komplext men för närvarande måste du veta att det har egenskaper och metoder.
    • Fastighet: Liknande en variabel
      myObject.myProperty = "Value"
    • Metod: Liknande ett funktionssamtal
      myObject.myMethod (argument)

Lägger till ångra grupper

Eftersom många operationer kommer att hända under ditt exekvering av manus, vill du bestämma vad som händer när du slår

en???? + Z

/

CTRL + Z

Om vi ​​gör det ganska lätt, har vi bara paketerat vår kod mellan

beginUndoGroup ()

och

endUndoGroup ()

metoder för

app

objekt. Denna metod tar ett argument som är namnet som kommer att visas i After Effects

Redigera> Historia

meny.

app.beginUndoGroup ("Demo Script"); // Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa 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 (); 

Skapa bakgrundsskiktet

För att skapa vårt bakgrundslag använder vi

skikten

delobjekt av vår

currentComp

. Ring

addSolid ()

metod och skicka det till dessa argument:

app.beginUndoGroup ("Demo Script"); // Skapa projekt var currentProject = (app.project)? app.project: app.newProject (); // Skapa 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 (); // Skapa bakgrundsskikt var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Bakgrund", cs [0], cs [1], cs [2]); app.endUndoGroup (); 

Lägga till nätverkseffekten

Det bästa sättet att skapa vårt centrerade kors är att använda Grid-effekten på vårt bakgrundsskikt. För att göra så använder vi vår

backgroundLayer

variabel som refererar till

currentComp.layers.byName ( "backgroundLayer")

och vi kommer att använda dess

effekter

fast egendom.

 // Lägga till nätverkseffekten bakgrundslayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "effekter") egendom ( "Grid") egendom ( "Anchor") setValue ([0,0])...; backgroundLayer.property ("Effects"). egendom ("Grid"). egendom ("Corner"). expression = "[bredd / 2, höjd / 2]"; backgroundLayer.property ( "effekter") egendom ( "Grid") egendom ( "färg") setValue ([0,0,0])...; backgroundLayer.property ("Effects"). Egenskap ("Grid"). Egenskap ("Blandningsläge"). setValue (2);

Det finns några saker du bör märka här. Först, det

fast egendom()

Metoden är kedjbar vilket innebär att du kan ringa det flera gånger för att nå den delfastighet du vill få.

  • backgroundLayer.property ( "Opacitet")

    : Skiktets opacitet.

  • backgroundLayer.property ( "Effekter"). egendom ( "Grid"). egendom ( "opacitet")

    : Grid-effektens opacitet.

För det andra använder vi metoden

satt värde()

när vi vill ange ett värde men inte när vi vill uttrycka ett uttryck.


Skapa torkskiktet

För att lägga till torkningseffekten skapar vi ett nytt lager och använder Radial Wipe-effekten.

 // Skapa torkningsskiktet var wipeLayer = currentComp.layers.addSolid ([0,1, 0,1, 0,1], "Torka", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Torka"). setValue (2); // WiperLayer.property ("Opacity"). SetValue (50); // Inställning av WipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Övergångsavslutning"). SetValueAtTime (0, 100); wipeLayer.property ("Effects"). egendom ("Radial Wipe"). Egenskap ("Övergångsförlängning"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). egendom ("Radial Wipe"). egendom ("Övergångsförlängning"). expression = "loopOut ('Cycle')";

Vi använde metoden

setValueAtTime ()

att ställa in nyckelbilder och a

Loopout ( "Cycle")

för att göra animationsslingan (meningsfullt rätt?).


Lägga till textlagret

Att spela med text är lite annorlunda eftersom du måste ändra egenskaperna för källtextvärdet direkt.

// Lägga till textlag var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Source Text"); var textPropertyValue = textProperty.value; // Ändra källtextinställningar textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Lägger till uttryck för källtext textProperty.expression = "Math.floor (10-tiden)"; // Justering av textlagrets ankarpunkt var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Anchor Point"). setValue ([0, textLayerHeight.height / 2 * -1]);

Vi har ändrat våra textvärdesegenskaper och används

satt värde()

att skicka det till vårt textlag. Vi använde också ett enkelt uttryck för att göra nedräkningen.

Math.floor ()

är en Javascript-funktion som tar bort decimaldelen av ett nummer. Därefter centrerar vi ankarpunkten med hjälp av

sourceRectAtTime ()

metod.


Lägger till ellipserna

För att lägga till ellipserna använder vi

addShape ()

metod och ge den en vektorgrupp och en vektorform. Vi gör också en liten funktion för att undvika kodrepetition.

// Lägga till formlag för cirklarna var shapeLayer = currentComp.layers.addShape (); // Lägga till cirkelformer grupp var shapeGroup = shapeLayer.property ("Innehåll"). AddProperty ("ADBE Vector Group"); // Lägga till cirkelformer skapaEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Lägga till svart slag till formerna var stroke = shapeGroup.property ("Innehåll") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); funktion createEllipse (shapeGroup, storlek) var ellipse = shapeGroup.property ("Innehåll"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Size"). setValue ([storlek, storlek]); 

Linje 5 är verkligen viktigt eftersom du inte kommer att kunna hitta

Innehåll

egendom i varken dokumentationen eller i ditt After Effects-gränssnitt för tillfället, tack vare Dan Ebbert för hans hjälp (http://forums.creativecow.net/thread/227/22280).

Vi använde en anpassad liten funktion istället för att duplicera ellipse skapelsen. Du kan använda funktioner som du önskar.

Grundregeln: Om du kodar kodpapper, överväg att använda en funktion.

För resten har vi just ändrat formens egenskaper. Du kanske vill referera till Adobe After Effects CS6 Scripting Guide för att se dem listade.

Du kanske har märkt det

var stroke

Linjen ser lite annorlunda ut än vad vi har skrivit än. Javascript stöder kedja över flera rader. Resultatet kommer att vara detsamma och det finns inte ett bra eller dåligt sätt, det är ett personligt kodande stilval som du kanske eller kanske inte vill anta.


Slutsats

Skriftens möjligheter är oändliga och kan göra ett riktigt kraftfullt verktyg som en gång mästar. Här är lite mer dokumentation om scripting och Javascript:

  • Adobe After Effects CS6 Scripting Guide
  • MotionScript
  • Javascript på Codeacademy
  • Introduktion till skrivskript