module inscription newsletter haut de page forum mobile

Rejeter la notice

ateliers live resolve avec forest

Ateliers Live Resolve - Formez-vous en ligne tous les mois avec Forest !
Faites rapidement évoluer la qualité de vos étalonnage avec nos ateliers mensuels de 3h.
Toutes les infos
Rejeter la notice

Nouvelle Formation Prise de son : les inscriptions sont ouvertes !
Maîtrisez la qualité de vos prises de son avec notre formation théorique et pratique de 3 jours ! Du 14 au 16 mai 2024 à Paris.

Script: masque et suivi de mouvement

Discussion dans 'Adobe After Effects' créé par nab17connection, 9 Octobre 2005.

Tags:
  1. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut,

    il y a quelques temps Sequelles avait eu l'idée (ou se demandait s'il etait possible..) d'utiliser le scripting pour créer et animer automatiquement un masque autour d'une zone traquée, lors d'un suivi de mouvement (motion track).

    j avais un peu galéré y a qqes semaines pour ecrire un tel script, en y arrivant toutefois mais par une petite dérobade :D (cf le post sur AE et Shake de Reglisse22)
    comme ce n etait pas vraiment satisfaisant, je viens d y jeter un oeil frais, et cela m'est apparu plus clair...et plus simple

    voila donc le script en question.
    a copier/coller et a enregistrer sous le nom " mask_motion_track.jsx ".
    le lancer sur le calque qui contient le Suivi de mouvement.
    Code:
    ////////////////////////////////////////////////////////////////
    // "mask_motion_track.jsx"
    //
    // Recupere les informations du suivi de mouvement
    // et les utilise pour animer un masque autour de la zone ciblee
    //
    //  ecrit par nab17connection 10.2005
    //
    ////////////////////////////////////////////////////////////////
    //
    // Selectionner le calque contenant le suivi
    // Lancer le script
    //
    ////////////////////////////////////////////////////////////////
    {
     app.beginUndoGroup("mask_motion_track.jsx");
     var myComp = app.project.activeItem;
     if (myComp == null || !(myComp instanceof CompItem) || 
         myComp.selectedLayers.length != 1 ){
            alert("Selectionner le calque contenant le suivi de cible.");
     }
     else {
          var myLayer = myComp.selectedLayers[0];
          var myGroup = myLayer.property("Suivis de cible");
          if(myGroup != null) {
             var myPointPiste = new Array();
             var mySuivi ;
             for (var i = 1; i <= myGroup.numProperties; i++) {
                mySuivi = myGroup.property(i);
                for (var j = 1; j <= mySuivi.numProperties; j++) {
                   myPointPiste[myPointPiste.length] = mySuivi.property(j);
                }
             }
             var centre = new Array();
             for (i = 0  ; i < myPointPiste.length ; i++) {
                centre[i] = myPointPiste[i].property(1);
             }
    
             mySolid = myComp.layers.addSolid([1,1,0], "Masque", myComp.width, myComp.height, 1);
             newMask = mySolid.Masks.addProperty("Mask");
             newMask.inverted = true;
             myMaskShape = newMask.property("maskShape");
             myShape = myMaskShape.value;
             i = 0 ;
             var coords = new Array();
             var tabcoords = new Array();
             while (i < myComp.duration ) {
                for (var j = 0  ; j < myPointPiste.length ; j++) {
                   coords[j] = centre[j].valueAtTime(i,true);
                   tabcoords.push(coords[j]);
                }
    
                myShape.vertices = tabcoords;
                myShape.closed = true;
                myMaskShape.setValueAtTime(i,myShape);
                for (var j = 0  ; j < myPointPiste.length ; j++) {
                   tabcoords.pop();
                }
                i+=1/25;
             }
          }
          else {
             alert("Pas de suivi de cible sur ce calque");
          }
     }
     app.endUndoGroup();
    }
    
     
    #1 nab17connection, 9 Octobre 2005
    Dernière édition: 10 Octobre 2005
  2. jonz

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    352
    Appréciations:
    +0 / 0 / -0
  3. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    oui je connaissais ce lien puisque je l avais moi-meme posté y a 10jours dans le post "AE et shake" pour illustrer ce que faisait le script.

    il agit donc comme sur la video du tramway, sauf qu il n y a aucune manipulation a faire (pas besoin d associer fastidieusement chaque point de masque a un point de track), et fonctionnne pour un nombre quelconque de points (pas seulement 4)
     
  4. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 260
    Appréciations:
    +2 / 13 / -0
    tabarnak !

    :bravo: :bravo: :bravo: :bravo: :bravo: :bravo: :bravo:
    Tu es carrément génial!

    L'édition de masque est tellement limitée dans After, que c'est un bon domaine pour se lancer dans les scripts
    à quand quelque pages du style "le repaire des expressions" consacrée aux script?

    Mais pour commencer peux-tu m'expliquer un peu ton script.
    Par exemple où puis-je modifier le type de masque, pour utiliser un RotoBézier

    Et selon toi est-ce que un script peut permettre de modifier l'ensemble des images clés de Forme de masque pour modifier globalement les Tension RotoBézier à tous les points du masque.. à chaque image?
     
    #4 Sequelles, 15 Octobre 2005
    Dernière édition: 15 Octobre 2005
  5. wib

    wib

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    268
    Appréciations:
    +0 / 0 / -0
    vous êtes en train de réinventer after effects là ! pas besoin d'attendre la 7 !
     
  6. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut :) ,

    avec le scripting tu peux créer le masque de ton choix, en precisant les coordonnees des points de controle.
    tu peux animer ces coordonnees au cours du temps....c est a dire leur attribuer une nouvelle valeur a chaque image, et par consequent ton masque change de forme ...

    pour indiquer qu il s agit d un masque rotobezier...cela doit etre assez simple, mettre qqe chose du type "mask(index).rotobezier = true".
    bon j ai pas essaye, mais je sais que la fonction "rotobezier" existe....tout comme plein d autres fonctions sur les points de controles (tangentes notamment)

    pour "Le Repaire des Scripts", faudra attendre un peu....
    je ne maitrise pas encore suffisamment la chose et cela prend du temps, pas mal de temps ( pour papa noel peut-etre :D )

    on apprend en pratiquant, avec de nouveaux scripts...

    ma principale limitation dans le scripting, c est le manque d idées. je ne connais AE que depuis quelques mois et donc beaucoup de choses m echappent....

    j ai vu que sur un autre forum, ils avaient une section "script request"... j y prend parfois des idées pour ecrire de nouveaux scripts

    je pense que le pouvoir du scripting est "enorme", et qu il n'est pas encore tres exploité
     
  7. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    je viens de faire trois petites anims sur les masques et le scripting. Pour toi Sequelles ;) et pour tous ceux qui s interessent aux possibilites du scripting ....

    les deux premieres montrent une animation des points de controle du masque.
    dans ces deux exemples les tangentes ne sont pas modifiées.
    A noter que dans la deuxieme, il ne s agit pas d'une rotation mais bien d'un deplacement de chaque point du masque au cours du temps.

    anim_mask1

    anim_mask2


    Et dans la troisieme, je ne modifie pas les cooordonnes des points (qui sont fixent donc), je modifie en revanche les tangentes (in et out) du point de droite.

    anim_mask3
     
  8. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    j'ajoute une anim qui utilise cette fois-ci un masque rotoBezier, dont les points sont animes au cours du temps:

    anim_mask_rotobezier
     
  9. herbert_muda

    herbert_muda Conseiller Technique Effets spéciaux visuels
    Conseiller Technique

    Points Repaire:
    1 000
    Recos reçues:
    0
    Messages:
    764
    Appréciations:
    +0 / 0 / -0
    en creusant les expressions, on a la malheureuse surprise de consater que les masques ne peuvent être régis via les expressions...:hum:
     
  10. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Bien le bonjour,

    bon alors je viens de decouvrir ce script grace au dernier message, et j'avoue que je comprend pas grand chose...

    Deja j'obtiens l'image ci dessous lorsque je fais un track 4 coins et que j'execute le script. J'ai vérifié pls fois, mes coins sont aux bons endroits...

    Ensuite, les exemples que tu donnes en dessous à propos des animations de masques, ont ils un rapport avec ce script ? Parcque je ne vois pas du tout comment t'arrives à faire ça !

    Bon désolé pour ceux qui ont compris du 1er coup, mais là j'ai du mal a suivre !

    Bill
     

    Fichiers attachés:

    • couper.jpg
      couper.jpg
      Taille de fichier:
      6.9 KB
      Nb. vues:
      322
  11. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    ah Bill heureusement que tu es la pour tester mes scripts ;)

    oui tu as raison le script ne fonctionne pas si tu utilises l option "track 4 coins" prédéfnie dans After.
    en fait tu obtiens un masque (en forme de sablier) car le script va lire tes points de track, du premier au dernier, et a chaque fois qu il trouve un nouveau point, il crée immediatement le point equivalent sur un masque.
    Il faut donc que ces points soient "dans l ordre" (dans le sens des aiguilles d une montre ou dans le sens inverse, mais il faut qu ils soient ordonnés ). OR qd tu utilises l option "4 coins" d'After, tu remarqueras que ces points ne sont pas "dans l ordre".
    Tu vas avoir :

    *P1------*P2
    | :D:D:D |
    | :D:D:D |
    *P3------*P4

    alors qu on voudrait avoir :
    *P1------*P2
    | :D:D:D |
    | :D:D:D |
    *P4------*P3
    ou bien :
    *P1------*P4
    | :D:D:D |
    | :D:D:D |
    *P2------*P3

    donc ca va te faire le sablier que tu as...car P3 et P4 sont inversés (et si tu les permutent manuellement, il va qd meme te les remetrre dans le "mauvais" ordre....)

    DONC, si tu souhaites faire un track 4 points, prends l option par defaut "Transformer", tu places ton premier point, puis tu le dupliques, tu replaces le nouveau point, etc... là ca marchera normalement.

    Tout a l heure, j ecrirai un nouveau script pour l option "track 4 points", c est juste un ptit truc a changer par rapport a l autre (simplement lui dire d inverser les points 3 et 4...)

    Sinon pour les autres animations de masques, oui cela n a pas de rapport direct avec le tracking, c etait juste pour aller un peu plus loin et montrer qu on pouvait animer ses points de controle ainsi que les tangentes, créer des masques rotobezier, les animer... (alors que tout ceci est impossible à faire avec les expressions).

    Je te mettrai un peu plus tard un ptit script de construction et d animation de masque, tu pourras t en servir de base pour voir comment ca marche.

    ps: Sequelles si tu passes par là, j en profite pour te poser une question: serait il envisageable d avoir une "sous rubrique", un post dedié ou quelque chose où on puisse regrouper les scripts et les discussions qui s y rattachent), afin de pas tout melanger ?
    ( ce serait sans doute plus simple pour ceux qui apprendront le scripting dans une semaine, dans un mois ou l annee prochaine)
     
  12. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Merci pour les explications j'ai tout compris et ça me rassure !!

    Pour ta proposition sur les rubriques, si c'est possible, je dirais meme d'aller un peu plus loin, en ayant genre deux sous rubriques pour les expressions et les scripts, où l'on pourrait parler librement de tout ça sans se meler aux autres questions qui sont plus d'ordre d'utilisation générale/effets d'AE...
    (j'avais d'ailleurs penser à essayer de faire un mini site regroupant les expressions et script, mais je suis pas pres de comprendre toute les expressions du "jeu des expressions...")

    Mais j'ai lu aussi sur la chartre (ou autre...) qu'ils voulaient limiter le nombre de rubriques/sous-rubrique pour pas s'embrouiller plus que ça (ce que je comprends d'ailleurs)

    Voilà en tout cas je vote pour.

    Bill
     
  13. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
  14. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    Pour en revenir au scripting/masque, voila un script-exemple pour creer un masque, parametrer les tangentes des points et animer ces points au cours du temps...
    Dans cet exemple, j ai fait un cercle qui se deforme progressivement.
    J ai commenté le code en detail (note: ouvrir un projet , lancer le script) : anim_mask_exemple.jsx

    Et la ptite anim (on se moque pas (trop) du "design" :D):
    anim_mask_exemple.mov
    [​IMG]

    Pour continuer sur la meme lancée, deux autres anims de masques (ces deux anims ne font que qqes dizianes de kilos, je trouve ca cool :D):
    anim_mask5.swf anim_mask6.swf
     
  15. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Ok je reviens là parcque sinon on mélange tout ;)

    Donc pour ton script, en fait il suffit de l'éditer et de redéfinir les positions, nbr de point, et une expression qui va redefinir l'emplacement de chaque point c'est bien ça ? Et les anims que t'as fait sont simpàlement faites avec le meme script de base que tu as modifié... J'ai bien tout suivi ? Bon apres faut trouver les expressions j'en suis pas là mais c'est deja bien si je suis sur la bonne voie.... :D

    Bill
     
Chargement...

Partager cette page