Introduzione alle nozioni di base di After Effects Scripting

Per andare avanti con il nostro recente tutorial sul flusso di lavoro dello sviluppo di script, andremo oltre i concetti di base e le buone pratiche necessarie per iniziare a scrivere gli script di After Effects. Andremo oltre le solite azioni di After Effects come: creare un progetto, creare una composizione, creare un livello, creare forme, aggiungere effetti, cambiare valori ed espressioni, usare testo e caratteri, aggiungere fotogrammi chiave, usare funzioni, ecc..

After Effects Scripts su VideoHive

Se stai cercando una soluzione rapida con uno script di After Effects, c'è un'eccellente raccolta su VideoHive. Oppure potresti prendere in considerazione l'idea di presentare i tuoi script come autore!


Scrivi il tuo primo script

Come indicato nel tutorial sull'installazione e sull'utilizzo del pacchetto di generazione di After Effects Sublime Text, gli script sono file che utilizzano il linguaggio Adobe ExtendScript. ExtendScript è una forma estesa di JavaScript utilizzata da diverse applicazioni Adobe come Photoshop, Illustratore, e InDesign. ExtendScript è un modo efficace per ottenere tutto ciò che vuoi in After Effects.

Gli script utilizzano il linguaggio Adobe ExtendScript, una forma estesa di JavaScript utilizzata da diverse applicazioni Adobe come Photoshop, Illustrator e InDesign

Questo tutorial tratterà i concetti di base e le buone pratiche necessarie per iniziare a scrivere gli script di After Effects.


Creare la nostra prima composizione

Inizieremo usando il

nuovo progetto()

metodo del

App

oggetto e avvolgendolo tra parentesi graffe.

// Creazione del progetto app.newProject (); 

Il

App

oggetto è la radice di quasi tutto come visto su questo schema:

Questo schema può essere trovato nella Guida agli script di Adobe After Effects CS6 come la maggior parte di ciò che spiegherò in questo tutorial.

Ora creiamo la nostra composizione usando il

App

oggetti secondari dell'oggetto

progetto

che contiene il progetto creato nella prima riga e il

elementi

oggetto secondario che consente di accedere alle cartelle e alle composizioni visualizzate nella finestra del progetto in After Effects.

// Creazione del progetto app.newProject (); // Creazione di comp app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24); 

Pulizia del nostro codice

Scrivere un codice pulito e gestibile è molto importante. Non stiamo più scrivendo espressioni veloci e sporche. Dal momento che vogliamo che i nostri script siano facilmente scalabili, dobbiamo abbracciare le convenzioni della community di Javascript.

Quindi isoleremo i dati chiave in variabili e li nomineremo in base al loro contenuto. Inoltre, metteremo le condizioni nel caso in cui ci fosse già un progetto o una composizione nel nostro file After Effects.

// Creazione del progetto var currentProject = (app.project)? app.project: app.newProject (); // Creazione di 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 (); 

Il

var

parola chiave indica che la seguente variabile è una nuova variabile. Ecco perché, sulla linea 9, non usiamo il

var

parola chiave più perché vogliamo usare

currentComp

valore (che è il comp che abbiamo appena creato).

Ecco, riga per riga, cosa abbiamo fatto in inglese:

  • Riga 3: crea una nuova variabile

    progetto attuale

    che sarà uguale a

    app.project

    Se

    app.project

    non è indefinito e sarà altrimenti uguale a

    app.newProject ()

    .

  • Riga 6: crea nuove variabili

    compSettings

    e

    cs

    che è uguale a una nuova serie di valori.

  • Riga 7: crea una nuova variabile

    defaultCompName

    che contiene il nome che daremo al nostro comp.

  • Riga 8: crea una nuova variabile
    currentComp

    che sarà uguale al

    activeItem

    proprietà dei nostri

    progetto attuale

    oggetto. Se non è indefinito e sarà altrimenti uguale al risultato del

    addComp

    metodo del

    elementi

    sotto-oggetto di

    progetto attuale

    a chi invieremo una serie di argomenti contenenti:

    • Nome della composizione
    • Larghezza della composizione
    • Altezza della composizione
    • Rapporto pixel della composizione
    • Tempo (in secondi) della composizione
    • Frame rate della composizione
  • Linea 9: Usa il

    currentComp

    metodo

    openInViewer

    che aprirà la timeline per questa composizione.

Sì, ci sono molti metodi e proprietà. Anche in questo caso, è necessario dare un'occhiata ad Adobe After Effects CS6 Scripting Guide per ulteriori informazioni sugli oggetti e sui relativi metodi e proprietà disponibili. La guida è davvero ben scritta e una rapida ricerca per Oggetto del progetto ti porterà immediatamente alle informazioni giuste.


Concetti rapidi di Javascript

  • Variabile: può memorizzare un valore, una matrice di valori o un oggetto.
    • var myVar = "Valore stringa";
    • var myVar = 2;
  • Matrice: contiene più valori. Gli array possono essere dichiarati in due modi.
    • var myVar = array ("valore1", "valore2", 3);
    • var myVar = ["valore1", "valore2", 3];
  • Funzione: parte del codice progettata per eseguire un'attività specifica.
    • function myFunction (argomento) // Fai qualcosa
  • Oggetto: l'oggetto è un po 'più complesso ma, per ora, devi sapere che ha proprietà e metodi.
    • Proprietà: simile a una variabile
      myObject.myProperty = "Valore"
    • Metodo: simile a una chiamata di funzione
      myObject.myMethod (argomento)

Aggiunta di gruppi di annullamento

Dal momento che durante l'esecuzione dello script si verificano molte operazioni, dovrai decidere cosa accadrà quando colpisci

un???? + Z

/

CTRL + Z

Facendolo così piuttosto facile, abbiamo solo avvolto il nostro codice tra il

beginUndoGroup ()

e

endUndoGroup ()

metodi del

App

oggetto. Questo metodo accetta un argomento che è il nome che verrà visualizzato in After Effects

Modifica> Cronologia

menu.

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

Creazione del livello di sfondo

Per creare il nostro livello di sfondo, useremo il

strati

sub-oggetto del nostro

currentComp

. Chiama il

addSolid ()

metodo e inviarlo questi argomenti:

app.beginUndoGroup ("Demo Script"); // Creazione del progetto var currentProject = (app.project)? app.project: app.newProject (); // Creazione di 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 (); // Creazione del livello di sfondo var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Background", cs [0], cs [1], cs [2]); app.endUndoGroup (); 

Aggiunta dell'effetto griglia

Il modo migliore per creare la nostra croce centrata è usando l'effetto Grid sul nostro livello di sfondo. Per farlo, useremo il nostro

backgroundLayer

variabile a cui si riferisce

currentComp.layers.byName ( "backgroundLayer")

e useremo il suo

effetti

proprietà.

 // Aggiunta dell'effetto griglia backgroundLayer.Effects.addProperty ("Grid"); backgroundLayer.property ( "Effetti") di proprietà ( "griglia") immobili ( "ancora") setValue ([0,0])...; proprietà background ("Angolo"). backgroundLayer.property ( "Effetti") di proprietà ( "griglia") immobili ( "Colore") setValue ([0,0,0])...; backgroundLayer.property ("Effects"). proprietà ("Grid"). proprietà ("Metodo di fusione"). setValue (2);

Ci sono alcune cose che dovresti notare qui. Prima il

proprietà()

il metodo è concatenabile, il che significa che è possibile chiamarlo più volte per raggiungere la proprietà secondaria che si desidera ottenere.

  • backgroundLayer.property ( "opacità")

    : L'opacità di Layer.

  • backgroundLayer.property ( "Effetti"). La struttura ( "griglia"). La struttura ( "Opacità")

    : L'opacità dell'effetto griglia.

Secondo, usiamo il metodo

valore impostato()

quando vogliamo impostare un valore ma non quando vogliamo impostare un'espressione.


Creare il Wipe Layer

Per aggiungere l'effetto wipe, creeremo un nuovo livello e useremo l'effetto Radial Wipe.

 // Creazione del layer wipe var wipeLayer = currentComp.layers.addSolid ([0.1, 0.1, 0.1], "Wipe", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("Radial Wipe"); wipeLayer.property ("Effects"). proprietà ("Radial Wipe"). proprietà ("Wipe"). setValue (2); // In senso antiorario wipeLayer.property ("Opacity"). SetValue (50); // Impostazione wipe transizione animazione wipeLayer.property ("Effetti"). Proprietà ("Radial Wipe"). Proprietà ("Completamento transizione"). SetValueAtTime (0, 100); wipeLayer.property ("Effetti"). proprietà ("Radial Wipe"). proprietà ("Completamento della transizione"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). proprietà ("Radial Wipe"). proprietà ("Transition Completion"). expression = "loopOut ('Cycle')";

Abbiamo usato il metodo

setValueAtTime ()

per impostare i fotogrammi chiave e a

loopOut ( "Cycle")

fare il ciclo di animazione (ha senso, giusto?).


Aggiungere il livello di testo

Giocare con il testo è un po 'diverso dal momento che devi modificare direttamente le proprietà del valore del testo sorgente.

// Aggiunta del livello di testo var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Testo sorgente"); var textPropertyValue = textProperty.value; // Modifica delle impostazioni del testo di origine textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Aggiunta di espressioni al testo del testo di origineProperty.expression = "Math.floor (10-time)"; // Regolazione del punto di ancoraggio del livello di testo var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Punto di ancoraggio"). setValue ([0, textLayerHeight.height / 2 * -1]);

Abbiamo cambiato le nostre proprietà del valore del testo e utilizzate

valore impostato()

per inviarlo nuovamente al nostro livello di testo. Inoltre, abbiamo usato un'espressione semplice per fare il nostro conto alla rovescia.

Math.floor ()

è una funzione Javascript che rimuoverà la parte decimale di un numero. Successivamente, centriamo il punto di ancoraggio usando il

sourceRectAtTime ()

metodo.


Aggiungere gli ellissi

Per aggiungere le ellissi useremo il

addShape ()

metodo e dargli un gruppo vettoriale e una forma vettoriale. Faremo anche una piccola funzione per evitare la ripetizione del codice.

// Aggiunta di un livello forma per le cerchie var shapeLayer = currentComp.layers.addShape (); // Aggiunta del gruppo forme cerchio var shapeGroup = shapeLayer.property ("Contenuto"). AddProperty ("ADBE Vector Group"); // Aggiunta di forme circolari createEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Aggiunta di tratti neri alle forme var stroke = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); function createEllipse (shapeGroup, size) var ellipse = shapeGroup.property ("Contenuto"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Size"). setValue ([size, size]); 

La linea 5 è davvero importante dal momento che non sarai in grado di trovare il

Contenuto

proprietà in né la documentazione né nell'interfaccia di After Effects per il momento, grazie a Dan Ebbert per il suo aiuto (http://forums.creativecow.net/thread/227/22280).

Abbiamo usato una piccola funzione personalizzata invece di duplicare la creazione dell'ellisse. Puoi usare le funzioni come desideri.

Regola pratica di base: se stai copiando delle righe di codice, considera di usare una funzione.

Per il resto abbiamo solo modificato le proprietà della forma. Si consiglia di fare riferimento ad Adobe After Effects CS6 Scripting Guide per vederli elencati.

Potresti aver notato il

tratto var

la linea sembra un po 'diversa da quella che abbiamo già scritto. Javascript supporta il concatenamento su più linee. Il risultato sarà lo stesso e non c'è un modo buono o cattivo, è una scelta di stile di codifica personale che potresti o non vorresti adottare.


Conclusione

Le possibilità di scripting sono infinite e possono creare uno strumento davvero potente una volta padroneggiato. Ecco qualche altra documentazione su scripting e Javascript:

  • Adobe After Effects CS6 Guida allo scripting
  • MotionScript
  • Javascript su Codeacademy
  • Introduzione alla scrittura di script