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

Améliorer le Scan de Chaines avec WinTV

Voilà un petit article qui pourrait dépanner les utilisateurs du logiciel WinTV, de Hauppauge. Je vais préciser d’emblée que cela concerne les chaines satellite. Je me suis dit que ça valait le coup de faire un article, car j’ai bien galéré pour m’en sortir. Et je vais bien détailler car c’est un produit grand public (qui permet de visionner au travers d’une carte, la TNT et le satellite sur un PC).

Tout a commencé par un message classique : cette chaine a changé de fréquence, veuillez procéder à une nouvelle recherche de chaines. Les chaines en question, c’était Canale 5, Italia 1 et Rete 4, des chaines du groupe italien Mediaset. J’ai procédé à un scan plusieurs fois, et à chaque fois, impossible de trouver les nouvelles fréquences.

En cherchant sur le web, j’ai pu constater que d’autres rencontraient les mêmes problèmes, mais avec un démodulateur de salon. Et d’autres leur répondaient qu’ils captaient bien les nouvelles fréquences. En fait, les nouvelles fréquences étaient connues. Les vraies questions étaient : comment les entrer manuellement dans WinTV ? Et pourquoi un scan automatique ne trouve-t-il pas les nouvelles fréquences ?

Pour la première question, WinTV ne permet pas de modifier les paramètres d’une chaine. J’ai donc tenté de modifier la base des chaines directement. J’ai récupéré les informations des fréquences sur le site King of Sat, puis j’ai tenté de mettre à jour la base de données des chaines. C’est une base Microsoft SQL, un fichier MDB. J’ai essayé, j’ai abandonné. C’est du SQL assez classique, mais j’ai un peu galéré avec la structure des tables et je n’avais pas envie d’y passer plus de temps.

Finalement, je me suis tourné vers la deuxième question.
En fait, un scan automatique dans WinTV s’appuie sur une liste prédéfinie de transpondeurs et de fréquences. Ça, je ne le savais pas, je l’ai appris en fouillant les forums de Hauppauge. Avec le temps, cette liste peut s’éloigner de ce qui est réellement disponible. C’est pour cela que lors d’un nouveau scan, vous pouvez passer à côté de certaines chaines. Si cela arrive, il vous faut aller mettre à jour cette liste pour que la prochaine recherche de chaine soit plus efficace.

Voilà comment faire.
D’abord, récupérez les informations sur la ou les chaines qui vous manquent. Puis ouvrez le fichier satellites.xml situé dans votre dossier utilisateur (C:\Users\Public\WinTV\ chez moi).

Maintenant, recherchez votre satellite.
Pour les chaines italiennes que j’ai citées plus haut, c’était sur 13.0E HOTBIRD 6,8,9.

Il vous reste maintenant à rajouter le transpondeur à scanner.
Dans mon cas, ça ressemblait à :

<sat name="13.0E HOTBIRD 6,8,9" flags="5" position="0">
	<!-- Transpondeurs Manuels -->
	<transponder frequency="11373000" symbol_rate="29900000" polarization="H" fec_inner="3/4" broadcast_type="DVB-S1"></transponder>
	<!-- Transpondeurs Manuels -->
	
	<transponder...

Pensez bien que la fréquence et le symbol rate doivent être suivis de 3 zéros. Rajoutez autant de transpondeurs que nécessaires. Vérifiez que vous n’avez pas de doublon dans vos transpondeurs, même si ce n’est pas forcément gênant. Dans mon cas, cette fréquence était présente mais associée à un flux DVB-S2 et avec un autre fec_inner.

Sauvegardez le fichier et refaites un nouveau scan.
Cette fois, les chaines qui étaient passées au travers devraient être trouvées.