module inscription newsletter haut de page forum mobile

Ateliers et Formations

Scripts After Effects jsx

Discussion dans 'Archives moteurs' créé par minirecif, 7 Décembre 2004.

Tags:
  1. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    Scripting JSX - special furieux duplication de calques ! :)

    Bonjour.

    Je commence à regarder d'assez prêt le scripting d'after effects.

    voici un premier programme qui montre quelques possibilites de la bete... (pour donner envie de creuser quoi).

    testé sous AE 6.5

    PHP:
    //---------------------------------------------------
    // Minirecif
    // Premier programme pour tester le scripting JSX
    //
    //---------------------------------------------------

    // demander le nombre de duplication de couche a effectuer.

    var nbd=0;
    do
    {
        
    nbd prompt("combien de fois voulez-vous dupliquer les 'layers' selectionnes (entre 1 et 10)");
    }
    while (
    nbd>10 || nbd<1)

    var 
    ActiveComposition app.project.activeItem;

    // verifie qu'au moins une composition est active

    if (ActiveComposition != null)
    {
        
    // recupere les layers selectionnees dans un tableau

        
    var selectedLayers ActiveComposition.selectedLayers;

        
    // pour chaque layer du tableau

        
    for (var 0selectedLayers.lengthi++) 
        {

            var 
    curLayer selectedLayers[i];   // layer courant

            
    app.beginUndoGroup("dupliquer layer : "+curLayer.name);  // creer un groupe de undo

            // duplique nbd fois

            
    for (var n=0n<nbd n++)
            {
                
    curLayer.duplicate()
            }

            
    app.endUndoGroup();  // fermer le undo.

        
    }
    }

    Ce script demande le nombre de fois que vous souhaitez dupliquer les layers selectionnees et fait le job pour vous.
    Comment l'utiliser :
    1/ créez un fichier test.jsx et copiez le code à l'interieur.
    2/ Lancez AE, créez une comp et autant de layer que vous le souaitez à l'intérieur.
    3/ sélectionnez une ou plusieurs layers (couches en français)
    4/ Menu fichier / executer script / choisir le script et sélectionnez votre test.jsx
    5/ une boite de dialogue apparait, tapez un nombre entre 1 et 10.
    6/ Obersvez
    7/ essayez le menu undo.

    enjoy ....
     
  2. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    bon ben ça n'a pas l'air d'intéresser grand monde le JSX ;)
     
  3. luc_iman

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    2 238
    Appréciations:
    +0 / 0 / -0
    si si.

    Quand on voit toutes ces lignes, on sait que dans 99% des cas, une succession de CTRL+D iront plus vite.
    Mais ca servira surement un jour.

    Mais l'important n'est pas la, alors on regarde, on apprecie et on imagine que les possibilites sont nombreuses.

    Mais elles l'etaient deja sans cela.

    :)
     
  4. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    je pense effectivement que l'intérêt est dans l'automatisation de la production, pas dans la créativité ! :)

    je pensais à des "convertisseurs" de .aep par exemple
    tu lances le script et ça génère un fichier de documentation du projet au format .txt , xml, html , etc... c'est tout à fait faisable.
    La doc dit que c'est surtout utile pour les tâches d'automatisation du rendu, tu peux même envoyer des mails avec A.E !!

    ou alors des compos type avec un des params qui changent (genre la sphere d'oscarus), tu fais le script, il te pose les 3 questions qui vont bien go, il te créé la comp, les layers ... fait la précomp, un pre-rendu, etc ... :)

    mais comme tu dis, pour dupliquer 3 calques, no interest ;), c'était juste pour l'exemple
     
  5. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    :lol: ok cette discutions n'a intéressé personne de 22h14 à 22h53

    Mais c'est un sujet qui m'intéresse au plus au point. Je maîtrise bien les expressions mes je ne connais rien aux script, c'est une grosse lacune que j'aimerais combler. Donc j'espère que cette discussion sera fructueuse.

    J'ai du mal à passer des expressions aux scripts. Je crois que l'on peut se passer de vraies connaissances en JavaScript pour les expressions mais pas pour les scripts.

    Tous d'abord à quoi sert ce terme "var" pour variable je suppose.
    Est-ce que dans les scripts la définitions des variables et différentes. Je crois qu’elles sont définies et reste en mémoire contrairement aux expressions qui ne peuvent récupérer aucune variable définie en dehors.

    Pourquoi as-tu définie une valeur max pour le nombre de dupli?
    Est ce que tu peux me faire ce script pour dupliquer une comp ?
     
  6. luc_iman

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    2 238
    Appréciations:
    +0 / 0 / -0
    oops - erreur

    :)
     
  7. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    oui, var = déclaration de variable.

    en javascript les variables ont une portée locale à l'endroit où elles sont déclarée (pour faire simple)

    PHP:

    function x()
    {
    var 
    b=2;
    if (
    b==2)
       {
       var 
    c=3;
       }

    c=4;   // erreur car C est déclaré dans un bloc {}  non accessible

    Le mieux est d'acheter un petit bouquin sur javascript pour apréhender les concepts de programmation.

    La valeur max c'était pour faire joujou avec le "prompt" et controler qu'on ne met pas 1000000000000 par exemple !!!
    mlagré cela j'ai réussi à planter mon A.E à cause de ce langage "merdique".
    je n'aime pas ce langage car il est trop permissif.

    si tu écris
    var nbd = 0;
    ndd= prompt("entrez une valeur");
    for (int i=0;i<nbd;i++
    {
    // faire qqe chose
    }

    ça fait rien ! et t'as pas de message d'erreur !! et pourtant y'en a une ... subtile... ndd au lieu de nbd !! et c'est la que la puissance de javascript est son principale défaut.
    tout compilateur normal te dirait que tu n'as pas déclaré la variable ndd et refuserait de l'utiliser. Javascript ne dit rien et créé cette variable pour toi. On passe souvent du temps à débugger à cause de petites fautes de frappe comme ça !

    pire sur les noms des méthodes.

    tu tapes layer.Diplucate(); je crois que tu n'as pas d'erreur !! ça fait rien c'est tout ! :)

    Easy pour dupliquer une comp.





    PHP:
    //---------------------------------------------------
    // Minirecif
    // Premier programme pour tester le scripting JSX
    //
    //---------------------------------------------------

    // demander le nombre de duplication de couche a effectuer.

    var nbd=0//nombre de dupli.

    do
    {
        
    nbd prompt("combien de fois voulez-vous dupliquer la comp active (entre 1 et 10)");
    }
    while (
    nbd>10 || nbd<1)

    var 
    ActiveComposition app.project.activeItem;

    // verifie qu'au moins une composition est active

    if (ActiveComposition != null)
    {
        
    // recupere les layers selectionnees dans un tableau

            
    app.beginUndoGroup("dupliquer comp: "+ActiveComposition.name);  
            for (var 
    n=0n<nbd n++)
            {
                
    ActiveComposition.duplicate()
            }

            
    app.endUndoGroup();  // fermer le undo.

    }
     
  8. luc_iman

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    2 238
    Appréciations:
    +0 / 0 / -0
    Dans la serie, on fait bosser l'informaticien minirecif (je ne me trompe pas, n'est-ce pas ?)

    Dans le premier script, tu dupliques les calques en leur laissant leur propre nom. Quelle serait la commande a ajouter dans la derniere boucle FOR pour que le calque soit renomme par une incrementation de n.

    (le resultat ne serait bien evidemment pas exhaustif car le nouveau nom pourrait etre present par la duplication du calque selectionne precedent, ou meme d'un calque non selectionne.)

    J'ai bien essaye d'ajoute .name, mais c'est le nom du layer en cours que je modifiais et donc ils s'appelaient 11 puis 112 puis 1123 etc..

    hors celui qu'il faudrait modifié c'est le numero du calque cree.
     
  9. giroudf

    So

    Points Repaire:
    15 400
    Recos reçues:
    538
    Messages:
    19 850
    Appréciations:
    +855 / 3 807 / -37
    le probleme c'est que ce language est une sorte de javascript issu lui meme du C,qui etait deja connu pour une syntaxe pourrie avec plein de contraintes debile (les point virgules en fin de ligne, les delimiteurs de bloc {}, les instructions pas clair C==2 ou n++.
    on disait souvent que cetait du code "write only" parce que souvent 2 jours apres l'avoir ecris, quand tu le relisais tu savais deja plus ce que ca faisait.
    quand tu as
    for (var n=0; n<nbd ; n++)
    c'est quand meme plus lisible en basic d'ecrire
    for n=0 to nbd-1

    mais bon , on arrete pas le progres.
     
  10. luc_iman

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    2 238
    Appréciations:
    +0 / 0 / -0
    apres moul essais, car je ne connais pas le javascript, j'ai trouve une solution un peu bestiales mais qui donne quand meme un resultat.

    Apres la ligne :
    var curLayer = selectedLayers; // layer courant

    J'ai ajoute :
    curLayer.name = curLayer.name + " " + 1;

    Du coup AE constate que le calque est numerote et incremente les calques dupliques.

    Pas terrible car en plus si j'en demande 3, il termineront dans cet ordre :
    Calque 2
    Calque 3
    Calque 4
    Calque 1
     
  11. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    voici en français ce que tu dois faire :

    dupliquer le calque et lui donner le nom du calque d'orgine + le compteur actuel de duplication. (normalement tu peux écrire le code maintenant )... mais voici une solution.

    Le point important que tu n'avais pas avant c'est de récupérer dans newlayer l'objet que tu viens de créer pour le manipuler de suite, avant de sortir de la boucle.

    On peut faire sans originalName, mais je trouve ce code plus simple à lire.

    Attention à bien afficher le nom des calques et non le nom des sources dans fenetre de montage ! sinon on croit que ça ne marche pas :)

    PHP:
    if (ActiveComposition != null)
    {
        
    // recupere les layers selectionnees dans un tableau

        
    var selectedLayers ActiveComposition.selectedLayers;

        
    // pour chaque layer du tableau

        
    for (var 0selectedLayers.lengthi++) 
        {

            var 
    curLayer selectedLayers[i];   // layer courant

            
    var originalName curLayer.name;  // mémorise le nom d'origine

            
    app.beginUndoGroup("dupliquer layer : "+originalName);  // creer un groupe de undo

            // duplique nbd fois

            
    for (var n=0n<nbd n++)
            {
                
    newlayer curLayer.duplicate();   //recupere l'instance créée dans newlayer

                
    newlayer.name originalName " "+n;      // change son nom

            
    }

            
    app.endUndoGroup();  // fermer le undo.

        
    }
    }
    voici l'autre version, en fait ce je n'aime pas c'est que curLayer, n'est plus vraiment curLayer quand tu as duplique. (original ou oldlayer , me plait plus), mais c'est du pinaillage...
    j'ai aussi ajouté un "bonus".

    PHP:
    if (ActiveComposition != null)
    {
        
    // recupere les layers selectionnees dans un tableau

        
    var selectedLayers ActiveComposition.selectedLayers;

        
    // pour chaque layer du tableau

        
    for (var 0selectedLayers.lengthi++) 
        {

            var 
    curLayer selectedLayers[i];   // layer courant

           
    app.beginUndoGroup("dupliquer layer : "+curLayer.name);  // creer un groupe de undo

            // duplique nbd fois

            
    for (var n=0n<nbd n++)
            {
                
    newlayer curLayer.duplicate();   //recupere l'instance créée dans newlayer

                
    newlayer.name curLayer.name" "+n;      // change 
    son nom
                
    // en option, pour ajouter un effet colorame aux calques dupliques
                
    newlayer("Effects").addProperty("colorama");


            }

            
    app.endUndoGroup();  // fermer le undo.

        
    }
    }
    si l'ordre de numérotation ne te plait pas tu peux faire
    for( var n=nbd;n>0;n--) pour compter mais à l'envers ...
     
    #11 minirecif, 10 Décembre 2004
    Dernière édition: 10 Décembre 2004
  12. l-o

    l-o

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    478
    Appréciations:
    +0 / 1 / -0
    hmmm si t'es motivé pour faire un script (ou expliquer c encore mieux) permettant d'envoyer un mail allertant la fin d'un rendu je suis preneur et t'offrirai toute ma considération en échange :love:
     
  13. minirecif

    Points Repaire:
    1 200
    Recos reçues:
    2
    Messages:
    1 271
    Appréciations:
    +0 / 0 / -0
    Adobe A.E 6.5 scripting guide, examples : render and email ;)
     
  14. luc_iman

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    2 238
    Appréciations:
    +0 / 0 / -0
    MiniRecif, j'ai apprecie les 2 methodes.

    La premiere parcequ'elle existe.

    La seconde parcequ'informaticien moi meme, je prefere les choses claires. Et la il n'y a rien a dire.

    Quand a la numerotation inverse, je l'avais deja fait mais dans differentes versions, non completement satisfaisantes et ecrites entre mes 2 messages de la nuit.

    Merci.

    PS = Pour activer le "Renommage", j'avais essaye de voir s'il y avait une autre option que le prompt ? un msgbox de valider/annuler par exemple mais je me suis heurte a la dure loi de celui qui ne connais pas : j'ai fouille, passe du temps, mais rien n'en ai sorti. Bref est-ce faisable ? une reponse et une orientation me suffiront a fouiller mais bien sur si tu nous livre le resultat...
     
  15. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Pour les compositions ça s'incrémente tous seul, cool. Et pour garder un ordre numérique et alphabétique identique on peu appeler la première " 001" il faut bien garder l'espace avant le chiffre, avec un nom avant si on veut.

    Pour le script, écrit à la je m'en fou, en mauvaise Housekeeping ;)
    Au plus cours j'ai besoin de ça:
    Code:
    nbd=prompt("Nombre de comp:");
    app.beginUndoGroup("script dupliquer comp");
    for(n=1;n<nbd;n++){app.project.activeItem.duplicate()};
    app.endUndoGroup()



    ;) http://www.motionscript.com/ae-scripting/getting-started-3.html
     
Chargement...

Dernières occasions

 

Partager cette page