Nous allons dans ce billet voir comment effectuer ce transcodage dans trois formats “standard” (industriellement parlant…):
- MP4 avec codec vidéo H.264 et codec audio AAC
- OGG avec codec vidéo Theora et codec audio Vorbis
- WEBM avec codec vidéo VP8 et codec audio Vorbis
Installation des plugins GStreamer
L’installation standard de GStreamer n’inclue pas la prise en charge de tout les codecs vidéos et audios. Afin de remédier à ça, je vous conseille d’installer “la totale” avec les commandes suivantes:
wget http://svn.nicolargo.com/ubuntupostinstall/trunk/gstreamerinstall.sh chmod a+x ./gstreamerinstall.sh sudo ./gstreamerinstall.sh rm ./gstreamerinstall
Ces commandes vont récupérer un script maison qui va installer le PPA de l’équipe de développement de GStreamer, puis installer les paquets GStreamer.
Un peu de pipeline
Je donnerai en fin d’article un lien vers trois scripts shell qui vont automatiser les phases de transcodage. Cependant, nous allons dans ce paragraphe voir comment faire un transcodage à la main en utilisant la commande gst-launch.
Pour illustrer notre exemple, prenons une vidéo au format .MOV (H.264 + AAC) que l’on soughaite convertir dans un format plus “libre”, c’est à dire WEBM (VP8 + VORBIS). La pipeline (ligne de commande) correspondante est la suivante:
gst-launch -t filesrc location=source.mov ! progressreport ! decodebin name=decoder \ decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \ webmmux name=muxer \ decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \ muxer. muxer. ! queue ! filesink location=destination.webm
La première ligne (filesrc location=source.mov ! progressreport ! decodebin name=decoder \) permet de charger le fichier source au format .MOV et de décoder les pistes audio et vidéo.
La seconde ligne (decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \) prend la piste audio du fichier source et la transcode au format VORBIS.
La troisième ligne (webmmux name=muxer \) précise que l’on utilisera un conteneur multimédia de destination de type Webm.
La quatrième ligne (decoder. ! queue ! ffmpegcolorspace ! vp8enc ! queue ! \) prend la piste vidéo du fichier source et la transcode au format VP8.
Enfin la dernière ligne (muxer. muxer. ! queue ! filesink location=destination.webm) prend les pistes audio et vidéo transcodées puis génère le fichier destination au format .WEBM.
Des scripts ! Des scripts !
“C’est bien beau la théorie mais moi je veux juste faire rapidement un transcodage…”…
Ok Michel, voici trois script shell permettant de faire un transcodage de n’importe quel type de vidéo vers un des formats suivants:
- Script mp4encoder.sh pour transcoder en MP4 avec codec vidéo H.264 et codec audio AAC
- Script oggencoder.sh pour transcoder en OGG avec codec vidéo Theora et codec audio Vorbis
- Script webmencoder.sh pour transcoder en WEBM avec codec vidéo VP8 et codec audio Vorbis
Pour les utiliser, il faut dans un premier temps les rendre executable avec la commande:
chmod a+x *encoder.sh
L’utilisation est des plus simple. Exemple de transcodage en MP4:
./mp4encoder.sh Inception-1080p.mov
Exemple de transcodage en OGG:
./oggencoder.sh Inception-1080p.mov
Exemple de transcodage en WEBM:
./webmencoder.sh Inception-1080p.mov
Et si je veux modifier les paramètres de transcodage ?
Ben c’est possible Miche, Nicolargo a pensé à toi. Il suffit d’éditer le script puis de mettre les paramètres dans la variable AUDIO_ENCODER_PARAMETERS pour le codec audio et VIDEO_ENCODER_PARAMETERS pour le codec vidéo.
Par exemple pour modifier le script webmencoder.sh afin d’encoder avec une qualité vidéo supérieure, il faut éditer le fichier et modifier la ligne suivante:
VIDEO_ENCODER_PARAMETERS="quality=7 speed=2"
Pour avoir la liste des paramètres pour un codec (par exemple pour l’encodeur VP8 ; vp8enc), il faut saisir la commande suivante:
gst-inspect vp8enc
Conclusion
C’est à vous de jouer pour intégrer ces scripts dans vos processus d’automatisation de transcodage de vidéo/audio !