Introducere în Bazele de Scripting după efecte

Pentru a merge împreună cu tutorialul nostru recent despre fluxul de lucru pentru dezvoltarea scenariilor, vom trece peste conceptele de bază și bunele practici necesare pentru a începe să scriem scripturile After Effects. Vom trece peste acțiunile obișnuite After Effects cum ar fi: crearea unui proiect, crearea unei compoziții, crearea unui strat, crearea de forme, adăugarea de efecte, schimbarea valorilor și a expresiilor, utilizarea textului și a fonturilor, adăugarea cadrelor cheie, utilizarea funcțiilor etc..

After Effects Scripturi pe VideoHive

Dacă sunteți în căutarea unei soluții rapide cu un script After Effects, există o colecție minunată pe VideoHive. Sau, puteți lua în considerare solicitarea de a trimite propriile scenarii ca autor!


Scrierea primului tău script

Așa cum se menționează în tutorialul de instalare și utilizare a pachetelor de construire After Effects Sublime Text, script-urile sunt fișiere care folosesc limbajul Adobe ExtendScript. ExtendScript este o formă extinsă de JavaScript folosit de mai multe aplicații Adobe, cum ar fi Photoshop, Ilustrator, și InDesign. ExtendScript este o modalitate bună și eficientă de a obține tot ce doriți în After Effects.

Scripturile utilizează limbajul Adobe ExtendScript, care este o formă extinsă de JavaScript folosit de mai multe aplicații Adobe, cum ar fi Photoshop, Illustrator și InDesign

Acest tutorial va trece peste conceptele de bază și bunele practici necesare pentru a începe să scrieți scripturile After Effects.


Crearea primei noastre compoziții

Vom începe prin utilizarea funcției

proiect nou()

metodă a

aplicaţia

obiecte și împachetați-le între paranteze curbate.

// Crearea proiectului app.newProject (); 
aplicaţia

obiect este rădăcina a aproape tot ceea ce se vede pe această schemă:

Această schemă poate fi găsită în Ghidul de scriptare Adobe After Effects CS6, precum cele mai multe dintre ceea ce voi explica în acest tutorial.

Acum creăm compoziția noastră folosind

aplicaţia

obiecte sub-obiecte

proiect

care conține proiectul creat în prima linie și

articole

sub-obiect care vă oferă acces la folderele și compozițiile pe care le vedeți în fereastra de proiect din After Effects.

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

Curățarea Codului nostru

Scrierea unui cod curat și întreținut este foarte important. Nu mai scriem expresii rapide și murdare. Deoarece vrem ca scripturile noastre să fie ușor de scalabil, trebuie să îmbrățișăm convențiile comunității Javascript.

Deci, vom izola datele cheie în variabile și le vom numi în funcție de conținutul lor. De asemenea, vom pune condiții în cazul în care ar exista deja un proiect sau o compoziție în fișierul nostru After Effects.

// Crearea proiectului var currentProject = (app.project)? app.project: app.newProject (); // Crearea comp compSettings comp = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Demo"; Var curentComp = (actualProject.activeItem)? actualProject.activeItem: currentProject.items.addComp (implicitCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); 
var

cuvântul cheie indică faptul că următoarea variabilă este o nouă variabilă. De aceea, pe linia 9, nu folosim

var

cuvântul cheie mai mult pentru că vrem să îl folosim

currentComp

(care este componenta pe care tocmai am creat-o).

Iată, pe rând, ceea ce am făcut în engleză:

  • Linia 3: Creați o nouă variabilă

    proiectul actual

    care va fi egal cu

    app.project

    dacă

    app.project

    nu este nedefinit și altfel va fi egal cu

    app.newProject ()

    .

  • Linia 6: Creați noi variabile

    compSettings

    și

    cs

    care este egal cu o nouă serie de valori.

  • Linia 7: Creați o nouă variabilă

    defaultCompName

    care conține numele pe care îl vom da comp.

  • Linia 8: Creați o nouă variabilă
    currentComp

    care va fi egal cu

    activeItem

    proprietatea noastră

    proiectul actual

    obiect. Dacă nu este nedefinit și altfel va fi egal cu rezultatul

    addComp

    metodă a

    articole

    sub-obiect al

    proiectul actual

    la care vom trimite o serie de argumente care conțin:

    • Numele compoziției
    • Lățimea compoziției
    • Înălțimea compoziției
    • Rată pixel a compoziției
    • Timpul (în secunde) al compoziției
    • Rata cadrelor din compoziție
  • Linia 9: Utilizați

    currentComp

    metodă

    openInViewer

    care va deschide cronologia acestei compoziții.

Da, sunt multe metode și proprietăți. Din nou, va trebui să aruncați o privire la o dată sau alta în Adobe After Effects CS6 Scripting Guide pentru a afla mai multe despre obiectele și metodele și proprietățile lor disponibile. Ghidul este foarte bine scris și o căutare rapidă Obiectul proiectului vă va duce imediat la informațiile corecte.


Concepte rapide de Javascript

  • Variabila: poate stoca o valoare, o serie de valori sau un obiect.
    • var myVar = "Valoarea șirului";
    • var myVar = 2;
  • Array: Conține mai multe valori. Arrays pot fi declarate în două moduri.
    • var myVar = array ("valoare1", "valoare2", 3);
    • var myVar = ["valoare1", "valoare2", 3];
  • Funcție: O parte a codului conceput pentru a efectua o anumită sarcină.
    • funcția myFunction (argument) // Do ceva
  • Obiect: Obiectul este un pic mai complex, dar, deocamdată, trebuie să știți că are proprietăți și metode.
    • Proprietate: Similar unei variabile
      myObject.myProperty = "Valoare"
    • Metodă: Similar cu un apel de funcție
      myObject.myMethod (argument)

Adăugarea grupurilor de dezactivare

Din moment ce o mulțime de operațiuni se va întâmpla în timpul executării scenariului dvs., veți dori să decideți ce se va întâmpla când ați lovit

A???? + Z

/

CTRL + Z

Așa că este destul de ușor, ne-am împachetat codul între

beginUndoGroup ()

și

endUndoGroup ()

metode ale

aplicaţia

obiect. Această metodă are un argument care este numele care va fi afișat în After Effects

Editați> Istoric

meniul.

app.beginUndoGroup ("Script demo"); // Crearea proiectului var currentProject = (app.project)? app.project: app.newProject (); // Crearea comp compSettings comp = cs = [1280, 720, 1, 10, 24]; var implicitCompName = "Demo" var currentComp = (actualProject.activeItem)? actualProject.activeItem: currentProject.items.addComp (implicitCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); app.endUndoGroup (); 

Crearea stratului de fundal

Pentru a crea stratul de fundal, vom folosi

straturi

sub-obiect al nostru

currentComp

. Suna

addSolid ()

și trimiteți aceste argumente:

app.beginUndoGroup ("Script demo"); // Crearea proiectului var currentProject = (app.project)? app.project: app.newProject (); // Crearea comp compSettings comp = cs = [1280, 720, 1, 10, 24]; var implicitCompName = "Demo" var currentComp = (actualProject.activeItem)? actualProject.activeItem: currentProject.items.addComp (implicitCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); // Crearea stratului de background var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Background", cs [0], cs [1], cs [2]); app.endUndoGroup (); 

Adăugarea efectului de rețea

Cea mai bună modalitate de a crea o cruce centrat este folosirea efectului Grid pe stratul de fundal. Pentru a face asta, ne vom folosi pe noi

backgroundLayer

variabilă care se referă la

currentComp.layers.byName ( "backgroundLayer")

și o vom folosi

Efecte

proprietate.

 // Adăugarea efectului grilei backgroundLayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "Effects") proprietatea ( "Grid") proprietate ( "ancora") SetValue ([0,0])...; (= "Lățime / 2, înălțime / 2"); backgroundLayer.property ( "Effects") proprietatea ( "Grid") proprietate ( "Color") SetValue ([0,0,0])...; ("Grid"). proprietate ("Mod de amestecare") setValue (2);

Există câteva lucruri pe care ar trebui să le observați aici. În primul rând,

proprietate()

metoda este flexibilă, ceea ce înseamnă că o puteți numi de mai multe ori pentru a ajunge la sub-proprietatea pe care doriți să o obțineți.

  • backgroundLayer.property ( "Opacitate")

    : Opacitatea stratului.

  • backgroundLayer.property ( "Effects"). proprietate ( "Grid"). proprietate ( "Opacitate")

    Opacitatea efectului de rețea.

În al doilea rând, vom folosi metoda

SetValue ()

când vrem să stabilim o valoare, dar nu când vrem să stabilim o expresie.


Crearea stratului de ștergere

Pentru a adăuga efectul de ștergere, vom crea un nou strat și vom folosi efectul Radial Wipe.

 // Crearea stratului de ștergere var wipeLayer = actualComp.layers.addSolid ([0,1, 0,1, 0,1], "Ștergeți", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Efecte") proprietate ("Radial Wipe") proprietate ("șterge") setValue (2); / / Opacitate "(counterclockwise) wipeLayer.property (" opacitate ") setValue (50); // Setarea ștergerii de tranziție animație wipeLayer.property ("Efecte"). Proprietate ("Radial Wipe") proprietate ("Terminare tranziție") setValueAtTime (0, 100); wipeLayer.property ("Efecte"), proprietate ("Radial Wipe") proprietate ("Transition Completion") setValueAtTime (1, 0); wipeLayer.property ("Efecte"), proprietatea ("Radial Wipe") proprietate ("Transition Completion").

Am folosit metoda

setValueAtTime ()

pentru a seta cadrele cheie și a

loopOut ( "ciclu")

pentru a face buclă de animație (are sens?).


Adăugarea stratului de text

Redarea cu text este puțin diferită, deoarece trebuie să modificați direct proprietățile valorii textului sursă.

// Adăugarea textului text var textLayer = actualComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Text sursă"); var textPropertyValue = textProperty.value; // Modificarea setărilor textului sursă textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Adăugarea expresiei textului sursă textProperty.expression = "Math.floor (de 10 ori)"; // Ajustarea punctului de ancorare a stratului de text var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Punct de ancorare") setValue ([0, textLayerHeight.height / 2 * -1]);

Am schimbat proprietățile de valoare text și am folosit

SetValue ()

să o retrimitem în stratul nostru de text. De asemenea, am folosit o expresie simplă pentru a face numărătoarea inversă.

Math.floor ()

este o funcție Javascript care va elimina partea zecimală a unui număr. După aceea, centrarea punctului de ancorare cu ajutorul

sourceRectAtTime ()

metodă.


Adăugarea elipsei

Pentru a adăuga elipsele vom folosi

addShape ()

și dați-i un grup vector și o formă de vector. De asemenea, vom face o mică funcție pentru a evita repetarea codului.

// Adăugarea stratului de formă pentru cercurile var shapeLayer = currentComp.layers.addShape (); // Adăugarea grupurilor de cercuri din grupul var shapeGroup = shapeLayer.property ("Contents"). AddProperty ("ADBE Vector Group"); // Adăugarea de forme ale cercurilor createEllipse (shapeGroup, 200); createEllipse (formaGrup, 400); // Adăugarea cursei neagră la formele var stroke = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color") setValue ([0, 0, 0]); funcția createEllipse (shapeGroup, dimensiune) var ellipse = shapeGroup.property ("Cuprins") addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = elipse.property ("Dimensiune"). setValue ([size, size]); 

Linia 5 este foarte importantă, deoarece nu veți putea găsi

Cuprins

proprietate în nici o documentație, nici în interfața dvs. After Effects pentru moment, datorită lui Dan Ebbert pentru ajutorul său (http://forums.creativecow.net/thread/227/22280).

Am folosit o functie personalizata in loc de a duplica crearea de elipsa. Puteți utiliza funcțiile după cum doriți.

Regula de bază: Dacă utilizați linii de copiere prin copiere, luați în considerare utilizarea unei funcții.

În rest, am modificat proprietățile formei. S-ar putea să vă referiți la Ghidul de scriptare Adobe After Effects CS6 pentru a le vedea în listă.

S-ar putea să fi observat

var accident vascular cerebral

line este diferit de ceea ce am scris încă. Javascript acceptă înlănțuirea pe mai multe linii. Rezultatul va fi același și nu există un mod bun sau rău, este o alegere personală de stil de codare pe care ați putea dori sau nu să o adoptați.


Concluzie

Posibilitățile de scripting sunt nesfârșite și pot deveni un instrument cu adevărat puternic odată stăpânit. Iată câteva documente despre scripting și Javascript:

  • Adobe After Effects CS6 Ghid de scriere
  • MotionScript
  • Javascript pe Codeacademy
  • Introducere în scrierea de scripturi