module inscription newsletter haut de page forum mobile

Rejeter la notice

formations etalonnage sur davinci resolve

Nos Formations Etalonnage avec Forest reviennent en octobre !
Adoptez une réelle méthodologie d'étalonnage professionnelle et atteignez vos objectifs créatifs avec nos formations intensives sur 3 jours
Toutes les infos
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

Formation Lumière - Pratique Intensive du 14 au 16 octobre à Paris
Formez-vous avec cet atelier de pratique intensive dans des conditions exceptionnelles ! Formation finançable.
Toutes les infos

Ateliers et Formations

[CommentFaire?] expression pour audio react aléatoire

Discussion dans 'Adobe After Effects' créé par florian.lorber, 18 Février 2013.

  1. florian.lorber

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    8
    Appréciations:
    +0 / 0 / -0
    Bonjour,

    J'ai conscience que mon intitulé n'est pas très clair, désolé. Voici ce que j'essaye de faire : j'ai une piste audio qui comporte des beats. J'ai crée un calque "audio amplitude" (convert audio to keyframe). J'ai à côté de ça une vidéo. J'aimerais qu'à chaque beat la teinte de ma vidéo change. Pour cela j'ai lié chaque composante (RVBA) de l'array de ma teinte à un slider, qui comprend cette expression :
    if (thisComp.layer("Audio Amplitude").effect("Both Channels")("Slider").valueAtTime(time) > 20) {
    random(0,1);
    }else{
    value;
    }
    Voilà, cette expression me donne comme résultat un changement de teinte aléatoire à chaque image pendant la durée du beat. Ce que moi j'aimerais, c'est un seul changement aléatoire qui reste jusqu'au beat suivant.
    Merci d'avance pour vos solutions :D
     
  2. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    Je pense qu'il faut utiliser une boucle "while" qui vérifie la condition dans la continuité. Ainsi il pourrait garder une valeur en attendant d'en atteindre une autre.
    Je maîtrise pas bien ça, si j'ai du temps, je verrais, en attendant tu vas peut être trouver tout seul, ou bien un vrai spécialiste des expressions va nous trouver ça avant nous.
     
  3. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    J'ai la solution.
    A mon avis florian.lorber est passé à autre chose depuis un moment, mais j'ai quand même la solution, pour la beauté du geste.
    A noter que je ne l'ai pas trouvé tout seul, j'étais sur la bonne piste, mais c'est le grand Dan Ebberts lui même qui a résolu le problème.

    Sur ton calque qui doit changer de couleur, il faut coller cette expression qui fait référence au calque où se trouve les images clefs audio :

    Code:
    threshold = 25.0;
    
    audioLev = thisComp.layer("Audio Amplitude").effect("Both Channels")("Slider");
    
    above = false;
    frame = timeToFrames(time);
    while (true){
      t = framesToTime(frame);
      if (above){
        if (audioLev.valueAtTime(t) < threshold){
          frame++;
          break;
        }
      }else if (audioLev.valueAtTime(t) >= threshold){
        above = true;
      }
      if (frame == 0){
        break;
      }
      frame--
    }
    
    seedRandom(frame,true);
    random([0,0,0,1],[1,1,1,1])
    Une explication rapide :
    Le seedRandom à la toute fin est ce qui permet le changement aléatoire controlé. De base c'est seedRandom(seed, false/true) ou seed détermine le changement, une fois pour toute dans le cas du second argument en "true" (timeless) ou à chaque image dans le cas de "false".
    Dans cette expression le true permet donc de ne fixer le changement qu'à chaque changement de "frame".

    "frame" est déterminé par un code while/do et un if/else
    Là ça se complique vraiment (c'est là où je buttais).
    Pour simplifier, Dan a créer un statement déterminé par le treshold qui correspond au seuil audio de la piste son. Quand ce seuil est dépassé, le frame qui donc donne le seed du seedRandom incrémente, sinon il reste en état.
    Le break permet de sortir du loop qui serait sinon sans fin (là aussi je coinçais)

    Bref, pas spécialement simple.

    En fait, pour résoudre le problème posé, le plus simple était encore une fois de le faire à la main :
    - Utiliser le graphique pour selectionner toutes les images clefs en dessous du seuil (disons 20)
    - Supprimer ces images
    - Utiliser k et l pour sauter d'une image clef à l'autre et synchroniser le changement de couleur avec des images clefs de maintien.

    Bien sûr l'avantage des expressions, outre l'extrême élégance du procédé, est qu'on peut changer les paramètres de détection et l'expression fait tout le boulot pour nous.
    Le problème étant, à moins de s'appeler Dan Ebberts, Lloyd Alvarez ou Nabscript, ça prend des jours à l'écrire...
     
    • Je recommande ! Je recommande ! x 1
  4. florian.lorber

    Points Repaire:
    100
    Recos reçues:
    0
    Messages:
    8
    Appréciations:
    +0 / 0 / -0
    Merci beaucoup Viclio, et un grand merci à Dan Ebberts, ça marche du tonnerre :)
     
  5. viclio

    Points Repaire:
    1 970
    Recos reçues:
    11
    Messages:
    656
    Appréciations:
    +0 / 4 / -0
    En fait, je viens de remarquer que c'est une déclinaison d'une expression trouvée sur son vite.
    Je vois bien effectivement comment il l'a décliné pour cette utilisation là.

    Ce site est extraordinaire, avec celui de nabscript, c'est l'une des meilleures sources pour apprendre les expressions.

    Dan Ebberts's Expressioneering Design Guide
    Nabscripts::Expression
     
Chargement...

Dernières occasions

 

Partager cette page

Dernières Occasions

 
Vous souhaitez annoncer sur le Repaire ? Contactez-nous