Transformer un fichier Ogg Vorbis en fichier WebM sans réencoder

Magicien effectuant un tour

Comme 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 (il vous faudra une version récente de GStreamer ; sous Ubuntu vous pourrez pour cela ajouter le PPA qui va bien).

La commande magique qui vous permet de transformer un Ogg Vorbis en WebM m'est indiquée par Zaheer Abbas Merali :

gst-launch-0.10 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.

La dernière version officielle en date à ce jour (3.4.0), que vous pourrez installer facilement à partir de cette page, ne supporte pas WebM : il vous faudra soit attendre la prochaine mise à jour (prévue pour la semaine prochaine d'après Moritz Bunkus, son développeur), soit compiler la version modifiée mkvtoolnix-3.4.0-webmedia-244 dont vous trouverez ici les sources (instructions ).

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/

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-3.4.0-webmedia-244 ou supérieur) 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

  1. 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.
  2. Le résultat est visible par exemple dans Epiphany, le navigateur Web du bureau GNOME (avec une version récente de GStreamer comme indiqué plus haut), ou encore dans Firefox (à partir de la version 4).

2 commentaires

#1 dimanche 06 juin 2010 @ 02:54 antistress a dit :

MKVToolnix v4.0.0 vient de sortir, apportant le support de WebM, et les binaires fournis par le développeur ont été mis à jour

#2 mercredi 09 juin 2010 @ 16:53 antistress a dit :

mkclean 0.3.0 vient de sortir :
"After weeks of various development a new reworked version of mkclean is out. The main change with the 0.2.x version is the reworked remuxer that now put the audio before the matching video Blocks (a requirement for WebM). It can also split laced Blocks so they fit in their corresponding Cluster.
For those who don't understand all these words, it's just better for seeking. You will need to use the "--remux" command-line option. "

Écrire un commentaire

NB : en publiant votre commentaire, vous acceptez qu'il soit placé sous la licence CC BY-SA comme indiqué aux conditions d'utilisation du site

Quelle est la cinquième lettre du mot sugquk ? :