Introduksjon til Grunnleggende om Etter Effects Scripting

For å gå sammen med vår siste opplæring om skriptutviklings arbeidsflyt, vil vi gå over de grunnleggende konseptene og god praksis som er nødvendige for å begynne å skrive After Effects-skript. Vi vil gå over vanlige ettervirkninger som: lage et prosjekt, lage en sammensetning, lage et lag, lage former, legge til effekter, endre verdier og uttrykk, bruk tekst og skrifter, legg til keyframes, bruk funksjoner osv..

Ettervirkningsskript på VideoHive

Hvis du leter etter en rask løsning med et After Effects-skript, er det en flott samling over på VideoHive. Eller du kan vurdere å søke om å sende inn egne skript som forfatter!


Skrive ditt første skript

Som nevnt i After Effects Sublime Text Build-pakkeinstallasjonen og bruksveiledningen, er skript filer som bruker Adobe ExtendScript-språket. ExtendScript er en utvidet form for JavaScript som brukes av flere Adobe-applikasjoner som Photoshop, Illustrator, og InDesign. ExtendScript er en god og effektiv måte å oppnå alt du vil ha etter After Effects.

Skript bruker Adobe ExtendScript-språket, som er en utvidet form for JavaScript som brukes av flere Adobe-applikasjoner som Photoshop, Illustrator og InDesign.

Denne opplæringen vil gå over de grunnleggende konseptene og god praksis som er nødvendig for å begynne å skrive After Effects-skript.


Opprette vår første sammensetning

Vi starter med å bruke

nytt prosjekt()

metode av

app

objekt og innpakke den mellom krøllede parenteser.

// Opprette prosjektet app.newProject (); 

De

app

objekt er roten til nesten alt som sett på dette skjemaet:

Dette skjemaet finnes i Adobe After Effects CS6 Scripting Guide som det meste av det jeg vil forklare i denne opplæringen.

Vi lager nå vår sammensetning ved å bruke

app

objektets underobjekter

prosjekt

som inneholder prosjektet opprettet i første linje og

elementer

delobjekt som gir deg tilgang til mappene og komposisjonene du ser i prosjektvinduet i After Effects.

// Opprette prosjektet app.newProject (); // Opprett comp app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24); 

Rengjøring av vår kode

Skrive ren og vedlikeholdsbar kode er veldig viktig. Vi skriver ikke raske og skitne uttrykk lenger. Siden vi vil at våre skript skal være skalerbare, må vi omfavne JavaScript-fellesskapets konvensjoner.

Så, vi vil isolere nøkkeldata i variabler og navngi dem i henhold til innholdet. Også, vi vil sette forhold i tilfelle det allerede ville være et prosjekt eller en sammensetning i vår After Effects-fil.

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

Søkeordet indikerer at følgende variabel er en ny variabel. Det er derfor, på linje 9, bruker vi ikke

Var

søkeord lenger fordi vi vil bruke

currentComp

s verdi (som er kompisen vi nettopp har opprettet).

Her er linje for linje, det vi gjorde i vanlig engelsk:

  • Linje 3: Opprett ny variabel

    nåværende prosjekt

    som vil være lik

    app.project

    hvis

    app.project

    er ikke udefinert og vil ellers være lik

    app.newProject ()

    .

  • Linje 6: Opprett nye variabler

    compSettings

    og

    cs

    som begge tilsvarer et nytt utvalg av verdier.

  • Linje 7: Opprett ny variabel

    defaultCompName

    som inneholder navnet vi vil gi til vår komp.

  • Linje 8: Opprett ny variabel
    currentComp

    som vil være lik den

    activeItem

    eiendom av vår

    nåværende prosjekt

    gjenstand. Hvis det ikke er udefinert og ellers vil være lik resultatet av

    addComp

    metode av

    elementer

    delobjekt av

    nåværende prosjekt

    til hvem vi sender en rekke argumenter som inneholder:

    • Navn på sammensetningen
    • Bredde av sammensetningen
    • Sammensetningens høyde
    • Pikselforhold av sammensetningen
    • Tid (i sekunder) av sammensetningen
    • Rammehastighet av sammensetningen
  • Linje 9: Bruk

    currentComp

    metode

    openInViewer

    som åpner tidslinjen for denne sammensetningen.

Ja, det er mange metoder og egenskaper. Igjen må du se en gang til Adobe After Effects CS6 Scripting Guide for å lære mer om objektene og deres tilgjengelige metoder og egenskaper. Guiden er veldig godt skrevet og et raskt søk etter Prosjektobjekt vil umiddelbart ta deg til riktig informasjon.


Raske Javascript-konsepter

  • Variabel: Kan lagre en verdi, en rekke verdier eller et objekt.
    • var myVar = "String verdi";
    • var myVar = 2;
  • Array: Inneholder flere verdier. Arrays kan deklareres på to måter.
    • var myVar = array ("value1", "value2", 3);
    • var myVar = ["verdi1", "verdi2", 3];
  • Funksjon: Del av kode beregnet for å utføre en bestemt oppgave.
    • funksjon myFunction (argument) // Gjør noe
  • Objekt: Objektet er litt mer komplekst, men for nå må du vite at det har egenskaper og metoder.
    • Eiendom: Ligner på en variabel
      myObject.myProperty = "Verdi"
    • Metode: Ligner på et funksjonsanrop
      myObject.myMethod (argument)

Legger til Angre grupper

Siden mange operasjoner vil skje under utførelsen av scriptet, vil du bestemme hva som vil skje når du treffer

en???? + Z

/

CTRL + Z

Gjøre det ganske greit, vi har bare bryte vår kode mellom

beginUndoGroup ()

og

endUndoGroup ()

metoder for

app

gjenstand. Denne metoden tar et argument som er navnet som vil bli vist i After Effects

Rediger> Historikk

Meny.

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

Opprette bakgrunnslaget

For å lage vårt bakgrunnslag bruker vi

lagene

delobjekt av vår

currentComp

. Ring

addSolid ()

metode og send det disse argumentene:

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

Legge til grid-effekten

Den beste måten å opprette vårt sentrert kryss på er å bruke grid-effekten på bakgrunnslaget vårt. For å gjøre det, bruker vi vår

backgroundLayer

variabel som refererer til

currentComp.layers.byName ( "backgroundLayer")

og vi vil bruke sin

effekter

eiendom.

 // Legge til grid-effekten backgroundLayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "Effects") eiendom ( "grid") eiendom ( "anker") SetValue ([0,0])...; backgroundLayer.property ("Effects"). eiendom ("Grid"). eiendom ("Corner"). expression = "[bredde / 2, høyde / 2]"; backgroundLayer.property ( "Effects") eiendom ( "grid") eiendom ( "farge") SetValue ([0,0,0])...; backgroundLayer.property ("Effects"). eiendom ("Grid"). eiendom ("Blending Mode"). setValue (2);

Det er noen ting du bør legge merke til her. Først

eiendom()

Metoden er chainable, noe som betyr at du kan ringe det flere ganger for å nå den sub-eiendommen du vil få.

  • backgroundLayer.property ( "opasitet")

    : Lagets ugjennomtrengelighet.

  • backgroundLayer.property ( "Effects"). eiendom ( "Grid"). eiendom ( "Opacity")

    : Grid-effektens ugjennomtrengelighet.

For det andre bruker vi metoden

SetValue ()

når vi ønsker å sette en verdi, men ikke når vi ønsker å sette et uttrykk.


Opprette Tørklag

For å legge til tørkeffekten, lager vi et nytt lag og bruker Radial Wipe-effekten.

 // Opprett tørke laget var wipeLayer = currentComp.layers.addSolid ([0,1, 0,1, 0,1], "Tørk", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effects"). eiendom ("Radial Wipe"). eiendom ("Tørke"). setValue (2); // Vri klokken. WrapLayer.property ("Opacity"). SetValue (50); // Innstilling av overførings animasjon wipeLayer.property ("Effects"). Egenskap ("Radial Tipe"). Egenskap ("Overføring Fullføring"). SetValueAtTime (0, 100); wipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Overføring Fullføring"). setValueAtTime (1, 0); WipeLayer.property ("Effects"). Egenskap ("Radial Wipe"). Egenskap ("Overføring Fullføring"). expression = "loopOut ('Cycle')";

Vi brukte metoden

setValueAtTime ()

å angi keyframes og a

loopOut ( "Cycle")

å lage animasjonsløkken (gir mening riktig?).


Legge til tekstlaget

Spille med tekst er litt annerledes siden du må endre egenskapene for kildetekstverdier direkte.

// Legge til tekstlag var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Source Text"); var textPropertyValue = textProperty.value; // Endre kilde tekstinnstillinger textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Legge til uttrykk for kildetekst textProperty.expression = "Math.floor (10-time)"; // Justering av tekstlagsankerpunkt var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Anchor Point"). setValue ([0, textLayerHeight.height / 2 * -1]);

Vi har endret egenskapene for tekstverdier og brukt

SetValue ()

å sende den til vårt tekstlag. Også, vi brukte et enkelt uttrykk for å gjøre nedtellingen vår.

Math.floor ()

er en Javascript-funksjon som fjerner desimaldelen av et nummer. Deretter senterer vi ankerpunktet ved å bruke

sourceRectAtTime ()

metode.


Legge til ellipsene

For å legge til ellipser vil vi bruke

addShape ()

metode og gi den en vektorgruppe og en vektorform. Vi vil også gjøre en liten funksjon for å unngå kodrepetisjon.

// Legge til formlag for sirkler var shapeLayer = currentComp.layers.addShape (); // Legge til sirkelformer gruppe var shapeGroup = shapeLayer.property ("Innhold"). AddProperty ("ADBE Vector Group"); // Legge til sirkelformer createEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Legg til svart slag til figurene var slag = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); funksjon createEllipse (shapeGroup, size) var ellipse = shapeGroup.property ("Contents"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Size"). setValue ([størrelse, størrelse]); 

Linje 5 er veldig viktig siden du ikke vil kunne finne

innhold

eiendom i verken dokumentasjonen eller i ditt After Effects-grensesnitt for øyeblikket, takk til Dan Ebbert for hans hjelp (http://forums.creativecow.net/thread/227/22280).

Vi brukte en tilpasset liten funksjon i stedet for å duplisere ellipseopprettelsen. Du kan bruke funksjoner som du ønsker.

Grunnleggende tommelfingerregel: Hvis du kopierer kodelinjer, bør du vurdere å bruke en funksjon.

For resten har vi bare endret formens egenskaper. Du vil kanskje henvise til Adobe After Effects CS6 Scripting Guide for å se dem oppført.

Du har kanskje lagt merke til

var slag

Linjen ser litt annerledes ut enn hva vi har skrevet ennå. Javascript støtter kjetting på flere linjer. Resultatet vil være det samme og det er ikke en god eller dårlig måte, det er et personnal kodende stilvalg du kanskje eller kanskje ikke vil adoptere.


Konklusjon

Mulighetene for skripting er uendelige og kan gjøre et virkelig kraftig verktøy når man mestrer. Her er litt mer dokumentasjon om skripting og Javascript:

  • Adobe After Effects CS6 Scripting Guide
  • MotionScript
  • Javascript på Codeacademy
  • Introduksjon til skriving av skript