Le langage utilisé




Javascript


Un script After Effects utilise le langage de programmation Javascript. Pour connaitre en détails les spécifications techniques, mots-clés et opérateurs de la norme ECMA prise en charge par le moteur de création de script d'After Effects, nous pouvons consulter cette page : Ecma-262.

Les mots-clés courant du langage vus dans le Repaire des Expressions sont valables pour nos scripts. On retrouvera par exemple les boucles "for/while", les instructions conditionnelles "if/else", les tableaux, les chaînes de caractères, etc.
Néanmoins, le langage des scripts est un langage beaucoup plus riche que celui des expressions et les 274 pages du Scripting Guide d'After Effects nous le confirme.

Dans la partie Ressources se trouvent quelques liens utiles sur le Javascript mais n'hésitons pas à "googler" en cas de besoin car les sites sur le sujet sont disponibles en grand nombre. Notons toutefois que le Javascript est plutôt réservé aux applications web, certaines méthodes ne fonctionneront pas dans After Effects.

Les expressions et les scripts sont certes basés sur le même langage mais leur fonctionnement et leur utilisation sont clairement différents. Avant d'aller plus loin, il serait bon d'examiner les distinctions fondamentales entre un script et une expression car la confusion est fréquente.


Script versus Expression


Une expression est un ensemble d'instructions écrit sur une propriété d'un calque pour lui attribuer une valeur. Une expression est évaluée à chaque image de l'animation et ce qui est calculé à une image est immédiatement oublié à l'image suivante. Une expression n'a pas de "mémoire".
Elle est également incapable de créer un objet. Aucune expression, aussi compliquée soit-elle ne peut créer un calque par exemple.

Un script est externe à After Effects. Il est écrit dans un éditeur à part, il est indépendant et réutilisable à volonté. On l'exécute, il fait son travail et on "reprend la main".
Un script permet de contrôler l'application, il peut créer des objets (compositions, calques, effets, etc), les animer avec des images clés ou bien avec des expressions, automatiser une procédure, accéder à la file de rendu, etc.
Son spectre est global, il peut garder en mémoire les données qu'il veut.

Mais ne nous méprenons pas, alors qu'on peut utiliser les expressions sans trop connaître le Javascript, par exemple simplement en liant des propriétés avec "l'escargot" (le sélecteur d'expressions) ou en écrivant une opération mathématique pour calculer une valeur, le scripting va nous demander plus d'efforts et une meilleure compréhension du langage. Alors qu'une expression tient souvent en moins de cinq lignes, un script va en général être beaucoup plus long et sera un programme informatique à part entière.

Bien qu'il y ait certaines choses qui peuvent être réalisées à la fois avec une expression et à la fois avec un script, en général notre choix va se porter clairement vers l'un ou l'autre en fonction de ce que nous souhaitons faire.


Les variables (var)


Si nous avons déjà examiné un script, nous avons pu constater que le terme var était très souvent utilisé (mais n'est pas obligatoire du point de vue syntaxique). Il s'agit de la syntaxe Javascript pour déclarer une variable locale.

La majorité des scripts est constituée de fonctions ("locales") et du script principal ("global"). Les fonctions sont introduites par le mot-clé function suivi du nom de la fonction, de la liste de ses paramètres entre parenthèses (cette liste peut être vide) et d'un ensemble d'instructions dans un bloc délimité par des accolades.

Dans une fonction toute variable déclarée avec le terme "var" a une portée locale. En d'autres termes elle ne pourra pas perturber une variable du même nom qui serait utilisée dans le corps du script. Toutes les autres variables sont globales (avec ou sans "var"), elles sont "visibles" partout dans le script.

Les exemples suivants montrent les différents cas de figures lorsque nous utilisons des fonctions dans notre script, car c'est là que le terme "var" peut prendre son importance (notons que "alert()" permet d'afficher des données dans une fenêtre qui apparaît dans l'interface, nous le verrons dans la partie suivante).

Cas 1

Cas 2

Cas 3

Cas 4

      function F() {
         x = 10;
      }
      x = 5;
      F();
      alert(x);
      // affiche 10


      function F() {
         var x = 10;
      }
      x = 5;
      F();
      alert(x);
      // affiche 5


      function F() {
         x = 10;
      }
      var x = 5;
      F();
      alert(x);
      // affiche 10


      function F() {
         var x = 10;
      }
      var x = 5;
      F();
      alert(x);
      // affiche 5


Dans le cas 2 et le cas 4, nous avons déclaré la variable en utilisant le terme "var", elle "meurt" donc à la fin de l'exécution de la fonction "F()" et ne modifie pas la valeur initiale de la variable "x" du script principal.

Notons toutefois que toutes les variables d'un script perdurent une fois l'exécution du script terminée et "errent" dans l'environnement. Si nous écrivons par exemple

      x = 10;

cela ne va rien faire, ou plutôt rien faire de visible, mais en réalité il y a maintenant une variable "x" de valeur 10, qui se "ballade" quelque part dans l'environnement (tant que After Effects reste ouvert).

Pour le vérifier écrivons un deuxième script contenant l'instruction

      alert(x);

Cette instruction peut sembler étrange car nous n'avons pas défini le "x", néanmoins After Effects a toujours en mémoire notre précédent script dans lequel nous avions attribué une valeur de 10 à une variable portant ce même nom "x". Il nous affiche donc "10". Cette particularité peut être parfois utilisée pour transmettre de l'information d'un script à un autre.

On ajoute en général une paire d'accolades, une ouverte au début et une fermée à la fin du script, afin de limiter la portée des variables utilisées. On écrit ainsi un script plus propre qui "nettoie" ses variables une fois qu'il a fini d'être exécuté.

      {
       ...monScript...
      }



remarque 1

Dans les scripts que nous allons voir pour notre apprentissage, nous noterons que le terme "var" n'apparaît pas car nos scripts seront en général très courts (bien souvent représentés par une seule instruction), dans lesquels nous ne définirons pas de fonctions et nous prendrons soin de toujours affecter une valeur à nos variables avant de les utiliser afin d'éviter d'éventuels désagréments.

Lorsque nous serons amenés à écrire des scripts plus élaborés, la déclaration de nos variables sera en général toujours introduite par "var" (cela rend également un script plus lisible).

remarque 2

Il est d'usage de donner un nom explicite à nos variables et également de mettre un préfixe "my" pour indiquer clairement qu'il s'agit de notre propre variable et de ne pas la confondre avec les mots-clés du scripting. On nomme en général "myProj" une variable représentant le projet en cours, "myComp" la composition, "myLayer" un calque en particulier, "myEffect" un effet, etc...
On peut bien entendu choisir les noms que l'on veut, cependant cette notation est assez 'standard' et est utilisée par beaucoup de gens.