Introduction aux bases du script After Effects

Pour accompagner notre récent tutoriel sur le flux de travail de développement de scripts, nous allons passer en revue les concepts de base et les bonnes pratiques nécessaires pour commencer à écrire des scripts After Effects. Nous allons passer en revue les actions After Effects habituelles telles que: créer un projet, créer une composition, créer un calque, créer des formes, ajouter des effets, modifier les valeurs et les expressions, utiliser du texte et des polices, ajouter des images clés, des fonctions, etc..

Scripts After Effects sur VideoHive

Si vous recherchez une solution rapide avec un script After Effects, VideoHive propose une excellente collection. Ou, vous pourriez envisager de postuler pour soumettre vos propres scripts en tant qu'auteur!


Écrire votre premier script

Comme indiqué dans le tutoriel d'installation et d'utilisation du package de génération After Effects Sublime Text, les scripts sont des fichiers qui utilisent le langage Adobe ExtendScript. ExtendScript est une forme étendue de JavaScript utilisée par plusieurs applications Adobe telles que Photoshop, Illustrateur, et InDesign. ExtendScript est un moyen efficace d’atteindre tout ce que vous voulez dans After Effects..

Les scripts utilisent le langage Adobe ExtendScript, qui est une forme étendue de JavaScript utilisée par plusieurs applications Adobe telles que Photoshop, Illustrator et InDesign.

Ce didacticiel présente les concepts de base et les bonnes pratiques nécessaires pour commencer à écrire des scripts After Effects..


Créer notre première composition

Nous allons commencer par utiliser le

nouveau projet()

méthode du

app

objet et en l'enveloppant entre accolades.

// Création du projet app.newProject (); 

le

app

objet est la racine de presque tout ce qui est vu sur ce schéma:

Ce schéma se trouve dans le Guide de script Adobe After Effects CS6, comme l'essentiel de ce que je vais expliquer dans ce didacticiel..

Nous créons maintenant notre composition en utilisant le

app

sous-objets d'objet

projet

qui contient le projet créé dans la première ligne et le

articles

sous-objet qui vous donne accès aux dossiers et aux compositions que vous voyez dans la fenêtre de votre projet dans After Effects.

// Création du projet app.newProject (); // Création de l'application app.project.items.addComp ("Demo", 1280, 720, 1, 10, 24); 

Nettoyage de notre code

Écrire du code propre et maintenable est vraiment important. Nous n'écrivons plus d'expressions rapides et sales. Puisque nous voulons que nos scripts soient facilement évolutifs, nous devons adopter les conventions de la communauté Javascript..

Nous allons donc isoler les données clés en variables et les nommer en fonction de leur contenu. De plus, nous poserons des conditions au cas où il y aurait déjà un projet ou une composition dans notre fichier After Effects..

// Création du projet var currentProject = (app.project)? app.project: app.newProject (); // Création de 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 (); 

le

var

mot-clé indique que la variable suivante est une nouvelle variable. C'est pourquoi, à la ligne 9, nous n'utilisons pas le

var

mot-clé plus parce que nous voulons utiliser

currentComp

La valeur de (qui est la composition que nous venons de créer).

Voici, ligne par ligne, ce que nous avons fait en clair:

  • Ligne 3: Créer une nouvelle variable

    Projet en cours

    qui sera égal à

    app.project

    si

    app.project

    n'est pas indéfini et sera autrement égal à

    app.newProject ()

    .

  • Ligne 6: Créer de nouvelles variables

    compSettings

    et

    cs

    qui équivaut à un nouveau tableau de valeurs.

  • Ligne 7: Créer une nouvelle variable

    defaultCompName

    qui contient le nom que nous allons donner à notre composition.

  • Ligne 8: Créer une nouvelle variable
    currentComp

    qui sera égal à la

    activeItem

    propriété de notre

    Projet en cours

    objet. Si ce n'est pas indéfini et sera autrement égal au résultat de la

    addComp

    méthode du

    articles

    sous-objet de

    Projet en cours

    à qui nous enverrons un tableau d'arguments contenant:

    • Nom de la composition
    • Largeur de la composition
    • Hauteur de la composition
    • Ratio pixel de la composition
    • Temps (en secondes) de la composition
    • Fréquence d'image de la composition
  • Ligne 9: utilisez le

    currentComp

    méthode

    openInViewer

    qui ouvrira la chronologie de cette composition.

Oui, cela fait beaucoup de méthodes et de propriétés. Encore une fois, vous devrez consulter le Guide de script Adobe After Effects CS6 à un moment ou à un autre pour en savoir plus sur les objets, leurs méthodes et propriétés disponibles. Le guide est vraiment bien écrit et une recherche rapide pour Objet de projet vous mènera immédiatement à la bonne information.


Concepts Javascript rapides

  • Variable: peut stocker une valeur, un tableau de valeurs ou un objet.
    • var myVar = "valeur de chaîne";
    • var myVar = 2;
  • Tableau: contient plusieurs valeurs. Les tableaux peuvent être déclarés de deux manières.
    • var myVar = array ("valeur1", "valeur2", 3);
    • var myVar = ["valeur1", "valeur2", 3];
  • Fonction: partie du code conçue pour effectuer une tâche spécifique.
    • function myFunction (argument) // Faire quelque chose
  • Objet: L'objet est un peu plus complexe mais, pour le moment, vous devez savoir qu'il a des propriétés et des méthodes.
    • Propriété: similaire à une variable
      myObject.myProperty = "Valeur"
    • Méthode: similaire à un appel de fonction
      myObject.myMethod (argument)

Ajout de groupes d'annulation

Étant donné que de nombreuses opérations se produiront au cours de l’exécution de votre script, vous devrez décider de ce qui se passera lorsque vous appuierez sur.

une???? + Z

/

CTRL + Z

Ce faisant, c’est assez facile, nous venons d’envelopper notre code entre les

beginUndoGroup ()

et

endUndoGroup ()

méthodes de la

app

objet. Cette méthode prend un argument qui est le nom qui sera affiché dans After Effects.

Édition> Histoire

menu.

app.beginUndoGroup ("Script de démonstration"); // Création du projet var currentProject = (app.project)? app.project: app.newProject (); // Création de comp var compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Démo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); app.endUndoGroup (); 

Création du calque d'arrière-plan

Pour créer notre couche d’arrière-plan, nous allons utiliser le

couches

sous-objet de notre

currentComp

. Appeler le

addSolid ()

méthode et envoyez-lui ces arguments:

app.beginUndoGroup ("Script de démonstration"); // Création du projet var currentProject = (app.project)? app.project: app.newProject (); // Création de comp var compSettings = cs = [1280, 720, 1, 10, 24]; var defaultCompName = "Démo" var currentComp = (currentProject.activeItem)? currentProject.activeItem: currentProject.items.addComp (defaultCompName, cs [0], cs [1], cs [2], cs [3], cs [4]); currentComp.openInViewer (); // Création d'un calque d'arrière-plan var backgroundLayer = currentComp.layers.addSolid ([93, 5, 2], "Arrière-plan", cs [0], cs [1], cs [2]); app.endUndoGroup (); 

Ajout de l'effet de grille

La meilleure façon de créer notre croix centrée est d'utiliser l'effet Grid sur notre calque d'arrière-plan. Pour ce faire, nous allons utiliser notre

backgroundLayer

variable qui fait référence à

currentComp.layers.byName ("backgroundLayer")

et nous allons utiliser sa

Effets

propriété.

 // Ajout de l'effet de grille backgroundLayer.Effects.addProperty ("Grid"); backgroundLayer.property ("Effects"). property ("Grid"). property ("Anchor"). setValue ([0,0]); backgroundLayer.property ("Effects"). property ("Grid"). property ("Corner"). expression = "[largeur / 2, hauteur / 2]"; backgroundLayer.property ("Effects"). property ("Grid"). property ("Color"). setValue ([0,0,0]); backgroundLayer.property ("Effects"). property ("Grid"). property ("Blending Mode"). setValue (2);

Il y a certaines choses que vous devriez remarquer ici. Premièrement le

propriété()

méthode est chainable, ce qui signifie que vous pouvez l'appeler plusieurs fois pour atteindre la sous-propriété que vous souhaitez obtenir..

  • backgroundLayer.property ("Opacity")

    : L'opacité du calque.

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

    : L'opacité de l'effet de grille.

Deuxièmement, nous utilisons la méthode

setValue ()

quand on veut définir une valeur mais pas quand on veut définir une expression.


Création du calque d'effacement

Pour ajouter l'effet de volet, nous allons créer un nouveau calque et utiliser l'effet de volet radial..

 // Création du calque de balayage var wipeLayer = currentComp.layers.addSolid ([0.1, 0.1, 0.1], "Wipe", cs [0], cs [1], cs [2]); wipeLayer.Effects.addProperty ("lingette radiale"); wipeLayer.property ("Effects"). propriété ("Radial Wipe"). propriété ("Wipe"). setValue (2); // sens inverse des aiguilles d'une montre wipeLayer.property ("Opacity"). SetValue (50); // Définition de l'animation de transition wipe wipeLayer.property ("Effets"). Propriété ("Essuyage radial"). Propriété ("Achèvement de la transition"). SetValueAtTime (0, 100); wipeLayer.property ("Effects"). property ("Radial Wipe"). property ("Transition Completion"). setValueAtTime (1, 0); wipeLayer.property ("Effects"). propriété ("Radial Wipe"). propriété ("Transition Completion"). expression = "loopOut ('Cycle')";

Nous avons utilisé la méthode

setValueAtTime ()

définir des images clés et un

loopOut ("Cycle")

pour faire la boucle d'animation (c'est logique, non?).


Ajout du calque de texte

Jouer avec le texte est un peu différent car vous devez modifier directement les propriétés de la valeur du texte source.

// Ajout d'un calque de texte var textLayer = currentComp.layers.addText ("Countdown"); var textProperty = textLayer.property ("Texte source"); var textPropertyValue = textProperty.value; // Modification des paramètres du texte source textPropertyValue.resetCharStyle (); textPropertyValue.fontSize = 200; textPropertyValue.fillColor = [0, 0, 0]; textPropertyValue.justification = ParagraphJustification.CENTER_JUSTIFY; textProperty.setValue (textPropertyValue); // Ajout d'une expression au texte source textProperty.expression = "Math.floor (10-time)"; // Réglage du point d'ancrage du calque de texte var textLayerHeight = textLayer.sourceRectAtTime (0, false); textLayer.property ("Point d'ancrage"). setValue ([0, textLayerHeight.height / 2 * -1]);

Nous avons changé nos propriétés de valeur de texte et utilisé

setValue ()

pour le renvoyer à notre couche de texte. En outre, nous avons utilisé une expression simple pour faire notre compte à rebours.

Math.floor ()

est une fonction Javascript qui va supprimer la partie décimale d’un nombre. Ensuite, nous centrons le point d’ancrage en utilisant le

sourceRectAtTime ()

méthode.


Ajout des ellipses

Pour ajouter les ellipses, nous utiliserons le

addShape ()

méthode et lui donner un groupe de vecteurs et une forme vectorielle. Nous allons également faire une petite fonction pour éviter la répétition de code.

// Ajout d'un calque de forme pour les cercles var shapeLayer = currentComp.layers.addShape (); // Ajout du groupe de formes de cercle var shapeGroup = shapeLayer.property ("Contents"). AddProperty ("ADBE Vector Group"); // Ajout de formes de cercle createEllipse (shapeGroup, 200); createEllipse (shapeGroup, 400); // Ajout d'un trait noir aux formes var stroke = shapeGroup.property ("Contents") .addProperty ("ADBE Vector Graphic - Stroke") .property ("Color"). SetValue ([0, 0, 0]); function createEllipse (shapeGroup, size) var ellipse = shapeGroup.property ("Contents"). addProperty ("ADBE Vector Shape - Ellipse"); var ellipseSize = ellipse.property ("Taille"). setValue ([taille, taille]); 

La ligne 5 est vraiment importante car vous ne pourrez pas trouver le

Contenu

propriété ni dans la documentation ni dans votre interface After Effects pour le moment, merci à Dan Ebbert pour son aide (http://forums.creativecow.net/thread/227/22280).

Nous avons utilisé une petite fonction personnalisée au lieu de dupliquer la création d'ellipse. Vous pouvez utiliser les fonctions comme vous le souhaitez.

Principe de base: si vous copiez-collez des lignes de code, envisagez d'utiliser une fonction..

Pour le reste, nous venons de modifier les propriétés de la forme. Vous voudrez peut-être consulter le Guide de script Adobe After Effects CS6 pour les voir énumérés..

Vous avez peut-être remarqué le

accident vasculaire cérébral

La ligne est un peu différente de ce que nous avons encore écrit. Javascript prend en charge le chaînage sur plusieurs lignes. Le résultat sera le même et il n’y aura pas de bonne ou de mauvaise solution, c’est un choix personnel de style de codage que vous voudrez peut-être ou non adopter..


Conclusion

Les possibilités de script sont infinies et peuvent devenir un outil vraiment puissant une fois maîtrisé. Voici une documentation supplémentaire sur les scripts et Javascript:

  • Guide de création de scripts Adobe After Effects CS6
  • MotionScript
  • Javascript sur Codeacademy
  • Introduction à l'écriture de scripts