Table des matières

GStreamer

GStreamer est un framework multimédia capable de manipuler des flux audio, vidéo, des images, etc.

Il utilise un système de plugins pour implémenter les différents codecs, et une des particularités, les différents éléments de la chaîne de traitement sont connectés les uns aux autres par un système de pipe.

Aperçu

Cette section va résumer les commandes essentielles que l'on peut utiliser avec un fichier multimédia (audio, vidéo, etc.).

Pour connaître la topologie d'un fichier multimédia, c'est à dire le type de conteneur, les codecs utilisés, on emploie la commande gst-discover-1.0.

Si l'on souhaite savoir si un codec est présent sur le système, on utilise la commande gst-inspect-1.0.

Voici par exmple en ce qui concerne le format sonore Vorbis :

gst-inspect-1.0 | grep vorbis                    
rtp:  rtpvorbispay: RTP Vorbis payloader
rtp:  rtpvorbisdepay: RTP Vorbis depayloader
typefindfunctions: audio/x-vorbis: no extensions
vorbis:  vorbistag: VorbisTag
vorbis:  vorbisparse: VorbisParse
vorbis:  vorbisdec: Vorbis audio decoder
vorbis:  vorbisenc: Vorbis audio encoder

La commande gst-launch-1.0 est quant à elle destinée au traitement.

Convertir un fichier audio

Les exemples ci-dessous montrent comment « transcoder » un fichier audio vers du MP3 (encodé en VBR variable bitrate).

vorbis → mp3

Si le format conteneur est Ogg :

gst-launch-1.0 filesrc location=....ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! lamemp3enc target=quality quality=0 ! filesink location=....mp3

Si le fichier original contient des méta-données (titre de la chanson, titre de l'album, etc.), on peut utiliser l'élément id3v2mux.

gst-launch-1.0 filesrc location=....ogg ! oggdemux ! vorbisdec ! audioconvert ! audioresample ! lamemp3enc target=quality quality=0 ! id3v2mux ! filesink location=....mp3

opus → mp3

Si le format conteneur est Matroska :

gst-launch-1.0 filesrc location=....webm ! matroskademux ! opusdec ! audioconvert ! lamemp3enc target=quality quality=0 ! filesink location=....mp3

AAC → mp3

Si le format conteneur est MP4 (QuickTime) :

gst-launch-1.0 filesrc location=....mp4 ! qtdemux ! faad ! audioconvert ! lamemp3enc target=quality quality=0 ! filesink location=....mp3

FLAC → mp3

gst-launch-1.0 filesrc location=....flac ! flacparse ! flacdec ! audioconvert ! audioresample ! lamemp3enc target=quality quality=0 ! filesink location=....mp3

Extraire une piste audio (à partir d'une vidéo)

Dans cette section nous allons voir comment extraire une piste audio à partir d'une vidéo. Une vidéo est constituée de deux flux :

Les deux flux sont situés dans un conteneur.

H.264 (codec vidéo), AAC (codec audio) → mp3

Si le conteneur est MP4 (QuickTime) :

gst-launch-1.0 filesrc location=....mp4 ! qtdemux name=demux demux.audio_0 ! queue ! faad ! audioconvert ! lamemp3enc target=bitrate cbr=true bitrate=192 ! filesink location=....mp3

Lire un fichier audio

Le moyen le plus simple, consiste à utiliser le plugin uridecodebin3 (ou uridecodebin) :

gst-launch-1.0 uridecodebin3 uri=... ! audioconvert ! autoaudiosink

Lire une vidéo

Si l'on obtient ce message : There may be a timestamping problem, or this computer is too slow.

Il faut désactiver la propriété sync=false (⇒ on perd l'audio).

Conteneur : Matroska, H.264 (vidéo), AAC (audio)

gst-launch-1.0 filesrc location=....mkv ! matroskademux name=demux demux.audio_0 ! queue ! avdec_aac ! audioconvert ! audioresample ! autoaudiosink demux.video_0 ! queue ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=1920,height=1080 ! autovideosink sync=false

Au passage, on « redimensionne » la vidéo (1920×1080).

Webcam

Par défaut le support v4l2 est désactivé pour des raisons de sécurité.

Ce n'est pas toujours actifs sous toutes les distributions linux.

Prendre une photo

La plupart des webcams sont capables de prendre une photo. Il faut l'encodeur/le décodeur jpeg.

GST_V4L2_USE_LIBV4L2=1 gst-launch-1.0 v4l2src num-buffers=1 ! jpegenc ! filesink location=capture-webcam.jpg

Si l'on souhaite redimensionner l'image qui va être générée :

GST_V4L2_USE_LIBV4L2=1 gst-launch-1.0 v4l2src num-buffers=1 ! videoscale ! video/x-raw,width=1366,height=768 ! jpegenc ! filesink location=capture-1366x768.jpg

On peut également effectuer un « effet » sur la capture :

GST_V4L2_USE_LIBV4L2=1 gst-launch-1.0 v4l2src num-buffers=1 ! videoscale ! video/x-raw,width=1366,height=768 ! videoflip method="rotate-180" ! videoconvert ! jpegenc ! filesink location=capture-1366x768.jpg