Transformer un fichier Ogg Vorbis en fichier WebM sans réencoder
Rédigé par antistress le 29 mai 2010 (mis à jour le 20 avril 2020) - Aucun commentaireComme vous le savez dorénavant, WebM est le nouveau format libre et ouvert de référence pour la diffusion audio et vidéo sur le Web.
Techniquement, un fichier WebM regroupe dans un conteneur Matroska un fichier vidéo encodé en VP8 (le codec récemment libéré par Google), et/ou un fichier audio encodé en Vorbis (le codec développé par la fondation Xiph.org).
WebM a vocation à remplacer les formats libres et ouverts qui étaient utilisés jusqu'alors sur le Web : Ogg Theora et Ogg Vorbis. Ces deux derniers formats partagent un même conteneur (Ogg) lequel abrite une vidéo encodée en Theora (un codec dérivé de VP3, « l'ancêtre » de VP8 utilisé dans WebM) et/ou un son encodé – comme dans le cas de WebM – en Vorbis.
Pour ceux qui se poseraient la question, voici l'avis de Lachlan Hunt, un développeur de Matroska, expliquant les avantages d'utiliser ce conteneur plutôt que Ogg dans WebM.
Puisque la différence entre un son au format WebM et le même son au format Ogg Vorbis ne tient qu'à son conteneur (le codec étant le même dans les deux cas), il est techniquement possible de convertir un son d'un format à l'autre sans qu'il soit besoin pour cela de le réencoder.
Pour cela, et bien que WebM soit un format très récent (sorti il y a une dizaine de jours seulement!), nous avons d'ores et déjà plusieurs outils à notre disposition : envisageons-en deux.
GStreamer & MKVToolNix
GStreamer
Commençons avec GStreamer, la bibliothèque multimédia de GNOME sous licence libre LGPL.
La commande magique qui vous permet de transformer un Ogg Vorbis en WebM m'est indiquée par Zaheer Abbas Merali et se base sur gst-launch-1.0, que vous trouverez au sein du paquet gstreamer1.0-tools :
gst-launch-1.0 filesrc location=nom_de_votre_fichier_audio.ogg ! oggdemux ! vorbisparse ! webmmux ! filesink location=nom_de_votre_fichier_audio.webm
MKVToolNix
MKVToolNix, distribué sous licence libre GNU GPL (et s'appuyant sur les bibliothèques libebml et libmatroska placées sous licence libre LGPL), est un jeu de quatre outils :
- mkvmerge (et mmg, son interface graphique), pour générer des fichiers WebM,
- mkvinfo, pour obtenir les caractéristiques de ces fichiers,
- mkvextract, pour extraire les pistes audio/vidéo d'un fichier,
- mkvpropedit, pour modifier les propriétés du conteneur sans avoir à le régénérer entièrement.,
Nous n'aurons besoin que du premier pour la tâche qui nous occupe (vous trouverez d'autres exemples de mise en œuvre de MKVToolNix sur cette page).
Dès lors la formule suivante effectuera la transformation pour vous :
mkvmerge -o nom_de_votre_fichier_audio.webm nom_de_votre_fichier_audio.ogg
En complément : mkvalidator & mkclean
Deux autres outils utiles (sous licence libre BSD) : mkvalidator si vous voulez vous assurer de la conformité du fichier WebM produit, et mkclean pour optimiser votre fichier WebM (cette étape est recommandée : la taille de votre fichier sera éventuellement réduite, les non-conformités seront le cas échéant corrigées, et l'index sera placé en tête du fichier pour optimiser la lecture sur Internet).
S'agissant d'outils très récents (sortis ce mois-ci!), vous devrez probablement les compiler vous même.
Cette fois c'est Lachlan Hunt qui m'a gentiment tuyauté à ce sujet. Téléchargez les sources et dans leur répertoire puis réalisez l'incantation suivante pour chacun (si votre système est 64 bits, remplacez gcc_linux par gcc_linux6x64) :
cd corec/tools/coremake/
./build.sh
cd ../../../
coremake gcc_linux
make all
sudo mv release/gcc_linux/mk* /usr/local/bin/
Ou bien, encore plus simplement : sous Debian, ouvrir un terminal à partir du dossier où vous avez décompressé les sources, puis :
sudo apt-get install build-essential checkinstall
./configure
make -C mkclean
sudo checkinstall -y
La solution préconisée à ce jour
GStreamer implémente les spécifications essentielles de WebM mais le fichier qui en ressort est loin d'être optimisé. Je recommande plutôt l'emploi de mkvmerge (issu de MKVToolNix) comme indiqué ci-dessus pour un résultat plus optimum. Il est également possible d'associer n'importe quelle version de mkvmerge – pour créer un fichier Matroska – et mkclean – pour en tirer un WebM optimisé (solution soufflée par Lachlan Hunt et que j'utilise) :
mkvmerge -o temp.mkv nom_de_votre_fichier_audio.ogg
mkclean --doctype 4 temp.mkv nom_de_votre_fichier_audio.webm
Dans tous les cas, seul l'usage de mkclean permet d'optimiser au mieux le fichier pour le Web en plaçant l'index en tête (grâce à un mixage en deux-passes).
Propos finaux
- Si vous avez lu ce précédent billet, vous savez dorénavant que les métadonnées sont inscrites directement sur la piste audio, aussi vous ne serez pas surpris d'apprendre que la transformation conserve les métadonnées du fichier initial.
- Le résultat est visible dans les différents navigateurs, selon leur version (se rapporter à la page correspondante de MDN Web Docs.
Opération inverse
L'opération inverse (retransformer votre fichier son .webm en .ogg) se fait avec les mêmes outils.
Par exemple
mkvinfo nom_de_votre_fichier_audio.webm
vous indiquera préalablement le numéro de la piste son dans le fichier : ici 0.
Avec le numéro de la piste son à l'intérieur du fichier, vous pouvez maintenant utiliser mkvextract :
mkvextract nom_de_votre_fichier_audio.webm tracks 0:nom_de_votre_fichier_audio.ogg
.
Vous pouvez aussi utiliser gst-launch-1.0, ou ffmpeg :
ffmpeg -i nom_de_votre_fichier_audio.webm
-acodec copy nom_de_votre_fichier_audio.ogg
.