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..
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!
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.
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);
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.
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:
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.
var myVar = "String verdi";
var myVar = 2;
var myVar = array ("value1", "value2", 3);
var myVar = ["verdi1", "verdi2", 3];
funksjon myFunction (argument) // Gjør noe
myObject.myProperty = "Verdi"
myObject.myMethod (argument)
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 ();
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 ();
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.
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?).
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.
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.
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: