Magazine High tech

Encodage de vidéo avec GStreamer

Publié le 17 novembre 2009 par Nicolargo

Si vous suivez régulièrement ce blog, vous savez que je m’intéresse au Framework multimédia GStreamer présent de base dans les systèmes d’exploitations GNU/Linux.  Nous allons dans ce billet voir comment encoder en ligne de commande une source vidéo vers des fichiers aux formats OGG (Theora/Vorbis) et/ou MP4 (H264/AAC).

Pourquoi ces formats ?

Je me limite à ces deux formats pour la simple et bonne raison qu’il se complète dans mon utilisation quotidienne. En effet, le format OGG (Theora/Vorbis), outre le fait qu’il soit basée sur des codecs libres, permet une intégration simplifié des vidéos dans les navigateurs supportant le HTML5 (lire ce billet), de son coté le format MP4 (H264/AAC) est un standard qui permet de lire ce type de fichiers sur une PlayStation 3.

Avant d’encoder…

Avant de commencer, il faut choisir une source de bonne qualité. Les codecs ne font pas des miracles et si la source est mauvaise, les fichiers encodés le seront aussi. Pour mes tests, j’ai récupéré un trailer haute définition sur le site HD-Trailers.net.  Les caractéristiques du fichier sont les suivantes:

ffmpeg -i shutterisland-tlr1r2r_h720p.mov
Duration: 00:02:22.27, start: 0.000000, bitrate: 6178 kb/s
Stream #0.0(eng): Video: h264, yuv420p, 1280x544, 23.98 tbr, 23.98 tbn, 47.95 tbc
Stream #0.1(eng): Audio: aac, 48000 Hz, 5.1, s16

Pour jouer cette vidéo sur votre machine, il faut saisir la pipeline suivante:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! audioresample ! autoaudiosink \
 decoder. ! queue ! ffmpegcolorspace ! autovideosink

Voici le résultat:

shutterisland-tlr1r2r_h720p.mov
Fichier source

Comment encoder ?

En basse qualité

Nous obtiendrons ici des fichiers dont la taille sera réduite mais avec une qualité plus basse, notamment lors des phases ou la caméra bouge beaucoup (par exemple sur les travelings).

Encodage OGG (Theora/Vorbis)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \
 oggmux name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! theoraenc ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_lq.ogv

Le fichier a une taille 1.7 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_lq.ogv
Fichier basse qualité OGG

Encodage MP4 (H264/AAC)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! faac profile=2 ! queue ! \
 ffmux_mp4 name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! x264enc pass=4 quantizer=30 subme=4 threads=0 ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_lq.mp4

Le fichier a une taille 2 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_lq.mp4
Fichier basse qualité MP4

En moyenne qualité

Nous obtiendrons ici un bon compromis entre la taille des fichiers et la qualité de l’image.

Encodage OGG (Theora/Vorbis)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \
 oggmux name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! theoraenc quality=32 ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_mq.ogv

Le fichier a une taille 2.8 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_mq.ogv
Fichier moyenne qualité OGG

Encodage MP4 (H264/AAC)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! faac profile=2 ! queue ! \
 ffmux_mp4 name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! x264enc pass=4 quantizer=25 subme=5 me=2 ref=3 threads=0 ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_mq.mp4

Le fichier a une taille 3.6 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_mq.mp4
Fichier moyenne qualité MP4

En haute qualité

Nous obtiendrons ici une très bonne qualité d’image mais une taille importante des fichiers.

Encodage OGG (Theora/Vorbis)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! vorbisenc ! queue ! \
 oggmux name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! theoraenc quality=48 ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_hq.ogv

Le fichier a une taille 5 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_hq.ogv
Fichier haute qualité OGG

Encodage MP4 (H264/AAC)

La pipeline:

gst-launch filesrc location=~/Vidéos/shutterisland-tlr1r2r_h720p.mov ! decodebin name=decoder \
 decoder. ! queue ! audioconvert ! faac profile=2 ! queue ! \
 ffmux_mp4 name=muxer \
 decoder. ! queue ! ffmpegcolorspace ! x264enc pass=4 quantizer=20 subme=6 me=2 ref=3 threads=0 ! queue ! \
 muxer. muxer. ! queue ! filesink location=~/Vidéos/shutterisland-tlr1r2r_h720p_hq.mp4

Le fichier a une taille 7.3 Mo de donne le résultat suivant:

shutterisland-tlr1r2r_h720p_hq.mp4
Fichier haute qualité MP4

Pour conclure

Nous avons vu dans ce billet les bases de l’encodage de fichiers vidéos avec GStreamer. Il est imporant de signaler que par la magie des pipeline, on pourrait très bien appliquer ces méthodes avec une source live comme une Webcam ou un flux venant d’un serveur de streaming vidéo.

Si vous avez des pipelines d’encodages que vous voulez partager avec les lecteurs de ce blog, les commentaires sont là pour ça !


Retour à La Une de Logo Paperblog

LES COMMENTAIRES (1)

Par Toon
posté le 18 mai à 18:08
Signaler un abus

Sympa,

tu parle d'appliquer cela à du live, as tu des exemple de pipeline, live audio + video vers un fichier

A propos de l’auteur


Nicolargo 417 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog