Automatiser la création d’aperçus vidéo avec VLC

Voilà un post que je voulais faire depuis quelques temps.
Les articles de mes blogs ont vocation à la fois à aider les autres qui plancheraient sur des problèmes que j’ai déjà rencontrés, mais aussi à me servir de rappel, des fois que j’aie oublié comment j’ai solutionné tel ou tel truc.

Il existe pas mal de logiciels qui permettent de visualiser une vidéo image par image. Bien souvent, ce sont des logiciels de montage vidéo. Il est cependant rare que ceux-ci soient portables d’un système d’exploitation à l’autre. Par ailleurs, ils sont rarement optimisés pour la simple création d’aperçus. Ou alors, il ne faut pas vouloir en faire 50.

Il existe aussi 3 solutions qui vous permettent d’extraire des images d’une vidéo.
La première, c’est VirtualDub, avec son option d’export de séquence d’images. Vous sélectionnez votre scène, vous allez dans Fichier > Export Image Sequence, et votre scène va être décomposée en images qui seront sauvegardées dans un répertoire. Malheureusement, VirtualDub est un logiciel qui tourne seulement sur Windows. On peut bien sîur bricoler pour essayer de le faire tourner sur Linux, mais il y a sans doute plus simple. Dans le même genre, il y a AviDemux. Mais l’extraction d’aperçus est moins bonne qu’avec VirtualDub.

Une deuxième solution, c’est FFmpeg. Je ne vais pas la documenter ici. Je ne la trouve pas géniale dans la mesure où elle ne considère que le temps comme paramètre. En gros, vous pouvez générer une image toutes les secondes, toutes les minutes, etc. Mais quand vous voulez extraire plusieurs images par seconde, et bien, là, je n’ai pas trouvé comment faire.

Reste enfin VLC.
Je ne vais pas parler ici de la capture (snapshot) manuelle. Je préfère me focaliser sur l’extraction par lot.

Tout comme FFmpeg, VLC tourne sur plusieurs plate-formes (Windows, Linux, Mac…). Et on peut choisir la périodicité des aperçus de manière très fine. On touche vraiment à la notion de frame (25 par seconde en général, c’est le FPS). Il est possible d’utiliser l’extraction d’images de 2 manières : en mode graphique, et en ligne de commande.

Pour l’approche utilisant l’interface graphique, je vous renvoie à cet article. Il est en anglais, mais il est aussi accompagné de capture d’écrans. Attention, celle-ci nécessite de modiier vos préférences. Pour revenir en mode normal, vous devrez rétablir vos anciennes préférences.

Voyons maintenant l’option en ligne de commande.

vlc fichier-video --video-filter=scene --vout=dummy --scene-ratio=10 --scene-prefix=$DIR --scene-path=$ROOT/previews/$DIR/ vlc://quit

Sous Windows, remplacez vlc par le-chemin-de-vlc/vlc.exe.
Détaillons les différents paramètres.

  • fichier-video> : le fichier dont on veut extraire des images.
  • –video-filter=scene : on veut extraire des images.
  • –vout=dummy : on ne veut pas jouer la vidéo pendant que VLC réalise les aperçus.
  • –scene-ratio=10 : on veut sauvegarder un aperçu toutes les 10 frames.
  • –scene-prefix=$DIR : remplacez $DIR par le nom à utiliser pour vos images.
  • –scene-path=… : le chemin où sauvegarder vos images.
  • vlc://quit : cela indique à VLC de se fermer après qu’il ait réalisé les aperçus.

Les images générées le seront au format PNG, avec une très bonne qualité.
Ce format est préférable au JPG, qui rend moins bien avec VLC. Il vaut alors mieux réencoder vos PNG en JPG via une autre solution si vous voulez impérativement du JPG.

J’ai aussi publié un Gist illustrant l’utilisation de cette fonctionnalité dans un script Linux.
Voir ici : https://gist.github.com/vincent-zurczak/7647e60f63dd134d2172

Publicités

About this entry