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..
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!
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..
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);
É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.
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:
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.
var myVar = "valeur de chaîne";
var myVar = 2;
var myVar = array ("valeur1", "valeur2", 3);
var myVar = ["valeur1", "valeur2", 3];
function myFunction (argument) // Faire quelque chose
myObject.myProperty = "Valeur"
myObject.myMethod (argument)
É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 ();
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 ();
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.
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?).
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.
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..
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: