Jump to: navigation, search

Montage aléatoire

Introduction

Montage-aleatoire-whiteboard.jpg

Recherches concernant les solutions pour créer une montage vidéo aléatoirement.

Cette page concerne tout autant l'investigation:

  • des implications artistico/narratives d'une oeuvre vidéo dans laquelle le montage n'est pas déterminé une fois pour toute;
  • ainsi que la technique logico/programmatique nécessaire à la création d'un tel système.

Cette recherche concerne Gavin et Loïc Vanden Bemden.

Séquenceur vidéo

Code proclipse ( aisément protable dans processing.org ) ; https://bitbucket.org/frankiezafe/videosequencer

Ce code contient 2 classes importantes;

  • VideoPlayer: un thread qui se charge de la tête de lecture de la vidéo qui lui est attribuée. Cette classe gère les séquences à lire.
  • VideoCue; une classe toute simple qui contient la configuration d'une séquence, càd:
    • point d'entrée
    • point de sortie
    • vitesse de lecture
    • boucle normale ou palindrome ( va et vient, lecture du début à la fin et de la fin au début ) - ne fonctionne pas, erreur gstreamer quand le palindrome est activé.

Reste encore à faire: création d'un événement quand le fin d'une cue est atteinte, ce qui permettrait passer à une autre automatiquement dans VideoPlayer...

Aléatoire contraint

Utilisation de chaînes de chaînes de markov qui permettent d'utiliser l'aléatoire tout en balisant le chemin à prendre.

pseudo code pour chaine de markov:

/// object State

   color my_color
   array <Link>links
   float total_chance
   public State() {
       total_chance = 0
       addLink( this, 1 )
   }
   public void addlink( s, chance ) {
       Link l;
       l.origin = this
       l.target = s
       l.chance = chance
       links.add( l )
       total_chance+= chance;
   }
   public void change() {
       float r = random() * total_chance;
       float c = 0;
       foreach ( l in links ) {
           c += l.chance
           if ( c > r ) return l.target
       }
   }

/// object Link

State orign
State target
float chance

/// main

State A
State B
State current

//setup

A.my_color = red
A.addlink( B, 3 ) 
B.my_color = blue
B.addlink( A, 2  )
current = A

//draw

current = current.change()
backgroud( current.my_color )

Description de séquences

Recherche-montage-aléatoire-videosequence.png

Plutôt que de découper les fichiers vidéos en multiples petites séquences, l'utilisation d'un fichier décrivant les séquences contenues dans le fichier permet l'édition rapide et rend plus flexible la phase de travail.

Description d'une séquence:

  • nom
  • point d'entrée (% ou h:m:s:f)
  • point de sortie (% ou h:m:s:f)

Les tags peuvent être attribuées à chaque séquence.

Utilisation de tags

Tir aléatoire de tags avec règles de non-répétitions et de relation entre les tags. Tag (metadata) sur wikipedia

Organisation des fichiers sur le disque dur (dans un dossier data):

   sound01.wav
   sound02.wav
   sound03.wav
   sound04.wav
   video01.mkv
   video02.mkv
   video03.mkv
   videos.xml

Le xml contenu dans le dossier permet de décrire les fichiers qui'il contient.

dans le xml


   <tags>
       <categories>
           <category name="spacial">
               <tag name="vide"/>
               <tag name="dehors"/>
               <tag name="dedans" opposite="dehors"/>
               <tag name="ouvert"/>
               <tag name="fermé" opposite="ouvert"/>
               <tag name="fenêtre"/>
           </category>
           <category name="people">
               <tag name="vieux" opposite="jeune"/>
               <tag name="infirmière"/>
               <tag name="assis"/>
           </category>
           <category name="color">
               <tag name="vert"/>
               <tag name="noir"/>
               <tag name="blanc" opposite="noir"/>
               <tag name="bleu"/>
           </category>
           <category name="sound">
               <tag name="voix"/>
               <tag name="musique"/>
           </category>
       </categories>
   </tags>
   <videos>
       <video path="video01.mkv">
           <tags>
               <tag name="vide"/>
               <tag name="blanc"/>
               <tag name="vieux"/>
           </tags>
           <events>
               <event time="03:45" duration="00:12" description="une personne se lève">
                   <tag name="vieux"/>
               </event>
           </events>
       </video>
       <video path="video02.mkv">
           <tags>
               <tag name="fenêtre"/>
               <tag name="infirmière"/>
           </tags>
           <events>
               <event time="01:20" duration="00:05" description="rayon de soleil par la fenêtre">
                   <tag name="fenêtre"/>
               </event>
           </events>
       </video>
   </videos>
   <sounds>
       <sound path="sound01.mkv">
           <tags>
               <tag name="voix"/>
               <tag name="dedans"/>
           </tags>
       </video>
   </sounds>

Outils