Lire deux fichiers avec VLC

Lire une vidéo et sa bande son dans deux fichiers séparés

Il arrive parfois que l'on possède ou enregistre pour des raisons diverses un fichier vidéo d'un côté, ne contenant que l'image et de l'autre, une ou plusieurs bandes son (une part doublage, par exemple). Le problème est d'arriver à lire la vidéo et la bande son choisie.

Avec VLC, c'est possible sous certaines conditions.

Séparer les flux avec VLC

Pour séparer des flux avec VLC, il faut utiliser le filtre es. Par exemple :

vlc mon_fichier_source --sout=#es{access=file,mux=ps,url_audio=audio-%c.%m,url_video=video-%c.%m}

cette simple commande va créer deux fichiers séparés, un avec la bande son (stream-0-mpga.ps), l'autre avec la vidéo (stream-0-mpgv.ps).

Pour lire ensuite avec VLC ces deux flux en même temps, il faut utiliser l'option input-slave. Malheureusement, cette option étant encore expérimentale, elle ne fonctionne pas avec tous les formats. Elle ne fonctionne pas avec les formats encapsulées en PS.

Il faut donc convertir le son en un autre format.

Un format compatible est, par exemple le ogg. On convertira alors le fichier audio de la façon suivante :

vlc stream-0-mpga.ps --sout=#transcode{acodec=vorb,ab=128}:std{access=file,mux=ogg,dst=stream-0.ogg}

Nous obtenons ainsi un fichier ogg compatible avec input-slave.

Ou encore, le format mp4a :

vlc stream-0-mpga.ps --sout=#transcode{acodec=mp4a,ab=128,channels=2}:std{access=file,mux=mp4,dst=stream-0-mpga.mp4}

Nous obtenons ainsi un fichier mp4 compatible avec input-slave.

Il peut arriver que la lecture du flux d'origine en mpeg soit saccadée au moment de la lecture (problème de débit et d'accès au disque). Il faudra donc peut-être aussi convertir le fichier vidéo. Par exemple en mp4 :

vlc stream-0-mpgv.ps :sout=#transcode{deinterlace,vcodec=mp4v,vb=1024}:std{access=file,mux=mp4,dst=stream-0-mpgv.mp4}

Lire les flux

Pour lire deux flux en même temps (vidéo + audio), rien de plus facile ensuite, si toutefois le format d'entrée de l'option input-slave est accepté :

vlc stream-0-mpgv.ps --input-slave=stream-0.ogg

Problèmes

Si cette méthode permet de réaliser un mixage ad hoc, il faut cependant l'utiliser avec précautions. Cette méthode ne fonctionnera pas parfaitement si :

  • La bande son n'est pas calée sur l'image : lors d'un enregistrement réalisé par internet, le temps que les informations soient suffisantes pour afficher une image, il peut y avoir un décalage compensé au niveau de l'affichage en direct. L'on s'en rend compte au moment de certaines microcupures lors le son s'altère un peu avant l'image. La lecture de la vidéo commence alors par afficher quelques millisecondes de noir le temps de se caler pendant que le son est en train de se jouer. Lors de la séparation des flux, au moment de la lecture des deux flux, le son ayant un peu d'avance, un décalage a été introduit et persistera tout au long de la vidéo.

  • S'il est possible de faire des pauses dans la lecture, il n'est cependant pas possible de sauter des passages. L'utilisation du curseur pour déplacer la lecture provoque alors un arrêt de la lecture input-slave qui n'a plus aucune référence pour se caler.

VLC