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

Ateliers et Formations

Lançons-nous dans le scripting !

Discussion dans 'Adobe After Effects' créé par Sequelles, 5 Avril 2006.

Tags:
  1. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Bon ben sympa les gars ! Vous connaissez le lievre et la tortue ?
    Genre la tortue part à point et c'est elle qui gagne parcque le lievre est trop fatigué ?
    Ben ici ça marche pas parcque j'ai essayé de vous suivre dés le début et je me suis déjà perdu......

    Bill
     
  2. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    Cela aurait pas mal de savoir des le depart ce que tu voulais avoir comme script...avant de commencer toutes les explications (bon je me suis ptet emballé rapidement aussi :lol: )

    De toute facon on a pour le moment quelquechose de plus compliqué, donc tu retires tout ce qui est condition/verifs en trop et ce qui touche au "Centre de la fonction"; je pense qu'avec les explications, tu devrais t en sortir pour mettre au point LE script que tu imagines.

    Je termine par l'etape principale...

    ---

    Ici on commence le "UndoGroup", i.e. tout ce qui sera compris entre le "begin" et le "end" pourra etre annuler par un "Ctrl+Z". Pour créer un nouveau "Point de piste", on peut dupliquer le dernier Point de piste existant (gare aux indices dans le tableau), en utilisant la methode "duplicate()". Nous pouvons le renommer comme on le souhaite...
    Pour toutes les images clés memorisees, on attribue la valeur aux proprietes par "setValueAtTime(leTemps, laValeur)", ou leTemps est l instant de la clé et laValeur , est la valeur correspondante.

    Le "moveTo" permet de positionner la propriété parmi les proprietes de son groupe. Ici nous la faisons passez en premiere position.

    [​IMG]

    c est fini, on ferme toutes les accolades necessaires....

    [​IMG]

    Sequelles, essaie de briccoler ton script avec ce qu j ai raconté et ensuite on essaiera de l'ameliorer si tu bloques sur un truc.

    Bill, il y en a des plus simples pour debuter, on en fera d autres ...:)
     
  3. bildebool

    Points Repaire:
    1 450
    Recos reçues:
    0
    Messages:
    940
    Appréciations:
    +0 / 1 / -0
    Oui je veux bien !

    Bill

    PS, t'as pas vu mon ps plus haut alors je le remet...
    PS : juste une question en passant : une sorte de script qui permettrait d'exporter les differentes comp avec les parametres etc depuis AE7 puis un script qui "comprendrait" tout ça pour ramener le tout dans AE65 c'est réalisable ou c'est purement fantastique ?
     
  4. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    je pencherais pour du "purement fantastique " :D
     
  5. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    Sequelles >> Pour créer un nouveau "Suivi" et lui ajouter un Point de piste, tu pourras te servir de ca :

    Code:
    var newTracker = myTrackersGroup.addProperty("ADBE MTracker");
    var newTrackPoint = newTracker.addProperty("ADBE MTracker Pt");
    
     
  6. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Merci beaucoup nab, je suis arrivé à quelque chose qui a l'air de fonctionner.
    C'est donc mon premier jet valide:
    Code:
    {
    var myComp = app.project.activeItem;
    if (!myComp || !(myComp instanceof CompItem))
    alert("Il n’y a pas de composition active")
    else {
    	if (myComp.selectedLayers.length != 1)
    	alert("Le calque contenant le suivi n'est pas sélectionné")
    	else {
    		var myLayer = myComp.selectedLayers[0]
    		var myTrackerGroup = myLayer.property("Motion Trackers");
    		var selectedTrackPoints = new Array()
    		for (var i = 1; i <= myTrackerGroup.numProperties; i++) {
    			var theTracker = myTrackerGroup.property(i);
    			for (var j = 1; j <= theTracker.numProperties; j++) {
    				var theTrackPoint = theTracker.property(j);
    				if (theTrackPoint.selected == true)
    				selectedTrackPoints[selectedTrackPoints.length] = theTrackPoint.property(6);
    				}
    			}
    		var nbPoints = selectedTrackPoints.length;
    		if (nbPoints < 2)
    		alert ("Vous devez sélectionner au moins deux Point de suivi.");
    		else {
    			var theAttach = new Array();
    			for (var t = 0; t <= myComp.duration; t += myComp.frameDuration) {
    				var totalAttach = [0,0]
    				for (i = 0; i < nbPoints; i++) {
    					totalAttach += selectedTrackPoints[i].valueAtTime(t, true)
    					}
    				theAttach[t] = totalAttach / nbPoints;
    				}
    			app.beginUndoGroup("pataTrack");
    			var newTracker = myTrackerGroup.addProperty("ADBE MTracker");
    			newTracker.name = "----moyenne----";
    			var newTrackPoint = newTracker.addProperty("ADBE MTracker Pt");
    			newTrackPoint.name = "pataTrack";
    			for (var t = 0; t <= myComp.duration; t += myComp.frameDuration) {
    				newTrackPoint.property(1).setValueAtTime(t , theAttach[t]);
    				newTrackPoint.property(6).setValueAtTime(t , theAttach[t]);
    				}
    			app.endUndoGroup();
    			}
    		}
    	}
    }
    
     
  7. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Maintenant j'aimerais utiliser ça dans une palette et que tous mes nouveaux Points de suivi se rangent dans mon suivi --moyenne-- et qu'il soit numéroter.:D
     
  8. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Je viens de m'appercevoir d'un truc bizarre dans mon script (mais ça marche quand même et je n'imaginais pas que ça pouvait marcher) : j'ai stocké mes valeurs de point d'attache dans un tableau où les cases, (on appel ça comment ?), ne sont pas des nombres entiers mais la valeur en seconde de l'image.

    Par exemple ce script fonctionne:
    Code:
    {
    var tableau = new Array();
    tableau[0.07] = "Comme";
    tableau[-0.458] = " c'est";
    tableau[4.1234] = " bizarre !";
    alert(tableau[0.07]+tableau[-0.458]+tableau[4.1234])
    }
     
  9. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    [​IMG] bravo champion :bravo:


    la seule chose qui "m'ennuie" c'est que tu ajoutes des points clés sur toute la durée de la comp et pas seulement là où étaient ceux d'origine. Si tu as une comp assez longue ton script va ramer le temps de créer toutes les clés (et pas moyen d arreter le processus).
    mais avoir toutes ces clés, c'est peut etre ce que tu souhaites, dans ce cas là j ai rien dit :)
    si tu comptes créer plusieurs Points...pour numéroter le nom des points tu pourrais ecrire quelque chose comme:
    Code:
    monPoint.name = "pataTrack " + i;
    avec un "i" qui augmente à chaque nouvelle creation
    --------

    pour le tableau...En fait tu n'as pas créé un tableau comme toi tu imagines ce qu'est un tableau (oula :lol: ).
    Il existe d'autres types de tableaux (peu utilisés je crois) qu'on appelle "tableaux associatifs". Chaque "case" (espace memoire, emplacement, dis ce que tu veux :D ) du tableau est definie par une chaine de caracteres. Tu n'accedes plus aux elements par l 'intemediaire d'un index (entier), mais tu y accedes en precisant une chaine de caracteres.
    Exemple (pris a l instant sur le net):
    Code:
    Vainqueurs["Grenoble- La Bastille (prologue)"] = "Alberto Lopez de Munain";
    Vainqueurs["Grenoble - Lyon"] = "Frédéric Guesdon";
    Vainqueurs["Châtillon sur Chalaronne - Saint Etienne"] = "Fabrice Gougot";
    
    Et pour avoir acces aux elements du tableau Vainqueurs, on ne fait pas une boucle "classique" sur l'index, on utilise un autre type de boucle for..in..
    de la maniere suivante (pour les faire afficher par exemple):
    Code:
    for(Etape in Vainqueurs)
           alert(Vainqueurs[Etape]);
    
    Il faut faire attention car ce type de tableaux ne possede pas l'attribut length (on dit "attribut" pour AE mais dans le javascript général c'est "propriété"..pour ne pas confondre avec les proprietes de AE , les effets, etc)
    Je pense que dans ton exemple, il interprete le "0.07" comme une chaine de caractere, pareil pour les autres. Tu as donc créé un tableau associatif (si tu fais afficher sa taille avec length, il va te donner 0).
    Dans la somme à la fin, tu fais référence à chaque element en précisant les bonnes chaine de caracteres (celles que tu as definies en remplissant le tableau), donc c est correct...
     
  10. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Oui ça peut être ennuyeux, mais j'utilise toujours les Contrôles de suivi dans une composition propre à la durée de la portion du plan que je souhaite tracker.

    Mais avant de m'occuper éventuellement de ce problème je voudrais faire d'autres modifs:
    Plutôt que d'utiliser tous les points de suivis sélectionnés, je voudrais sélectionner le Suivi et utiliser tous les points de suivis contenus à l'intérieur.

    Est-ce qu'il y quelque chose d'équivalent au selectedLayers qui me créerait un tableau avec tous mes suivis sélectionné ?
     
  11. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    non tu ne peux avoir ca directement, mais il faut simplement rajouter un test dans la boucle qui parcourt les Suivis:

    Code:
    for (var i = 1; i <= myTrackerGroup.numProperties; i++) {
        var theTracker = myTrackerGroup.property(i);
        if (theTracker.selected == true) {
            //...    
            // là tu sais que c'est un Suivi sélectionné
            //... 
       }
    } 
    
     
  12. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    je n'y arrrive pas :(

    Mon script ne marche pas. Je voudrais tester si je peux récupérer le nom du premier Suivi sélectionné. Je ne suis pas sur d'avoir bien compris l'utilisation de la fonction break.
     

    Fichiers attachés:

    • no.gif
      no.gif
      Taille de fichier:
      7.5 KB
      Nb. vues:
      168
    #27 Sequelles, 8 Avril 2006
    Dernière édition: 8 Avril 2006
  13. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    le break sert à interrompre la boucle en cours ...
    ton script ne marche pas comme tu veux car le break n'est pas inclus dans le if(..)...Il faut que tu mettes des accolades.

    conseil d'ami: TOUJOURS indenter les blocs d instructions:
    Code:
    for (...) {
            //...je décale un peu vers la droite
    }
    if (...) {
           //... là aussi
    }
    pour ton test du premier Suivi sélectionné, tu pourrais ecrire:
    Code:
    var myComp = app.project.activeItem;
    if (!myComp || !(myComp instanceof CompItem))
    	alert("Il n’y a pas de composition active")
    else {
    	if (myComp.selectedLayers.length != 1)
    		alert("Le calque contenant le suivi n'est pas sélectionné")
    	else {
    		var myLayer = myComp.selectedLayers[0]
    		var myTrackerGroup = myLayer.property("Motion Trackers");
    		for (var i = 1; i <= myTrackerGroup.numProperties; i++) {
    			var theTracker = myTrackerGroup.property(i);
    			if(theTracker.selected == true) {
    				alert(theTracker.name);
    				break;
    			}
    		}
    	}
    }
    
    je précise aussi car je ne l ai pas dit , qu'un bloc d' instructions peut se passer d'accolodes UNIQUEMENT QUAND le bloc ne contient qu'UNE SEULE instruction. (dans tous les autres cas il faudra mettre des accolades)
     
  14. Sequelles

    Sequelles Modérateur
    Modérateur So

    Points Repaire:
    11 780
    Recos reçues:
    20
    Messages:
    4 261
    Appréciations:
    +2 / 13 / -0
    Ok ça marche! merci :bravo: :bravo:

    j'avais fais ça finalement:
    Code:
    {
    var myComp = app.project.activeItem;
    if (!myComp || !(myComp instanceof CompItem))
    alert("Il n’y a pas de composition active")
    else {
     if (myComp.selectedLayers.length != 1)
     alert("Le calque contenant le suivi n'est pas sélectionné correctement")
     else {
      var myLayer = myComp.selectedLayers[0]
      var myTrackerGroup = myLayer.property("Motion Trackers");
      for (var i = 1; i <= myTrackerGroup.numProperties; i++) {
       var selectedTracker = null
       if (myTrackerGroup.property(i).selected == true) {
        selectedTracker = myTrackerGroup.property(i);
        break;
        }
       }
      if (selectedTracker == null)
      alert("Vous devez sélectionner un Suvi")
      else {
       alert(selectedTracker.name)
       }
      }
     }
    }
     
  15. nab17connection

    Points Repaire:
    1 900
    Recos reçues:
    1
    Messages:
    1 051
    Appréciations:
    +0 / 0 / -0
    salut,
    es tu arrivé faire ce que tu voulais ?
    pour la creation d'une palette, ce n'est pas tres compliqué à mettre en place. Tu peux regarder n'importe lequel des scripts que j'ai postés pour avoir des exemples (et sur nabscripts pour avoir des informations)
    je ne sais pas ce que tu comptes mettre sur ta palette, mais il y aura sans doute des ptites fonctions a faire correspondre a tes boutons ou champs de texte...

    derniere chose: je vois que dans mon code précédent il manque certains ";" en fin d' instructions car j'avais copié-collé le debut de ton code....c'est pas tres academique, je te conseillerai (afin d eviter les erreurs) de TOUJOURS mettre un point virgule en fin d'instructions.
     
Chargement...
Discussions similaires - Lançons scripting
  1. geoay
    Réponses:
    1
    Nb. vues:
    899

Partager cette page