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.
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.
Les exemples ci-dessous montrent comment « transcoder » un fichier audio vers du MP3 (encodé en VBR variable bitrate).
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
Si le format conteneur est Matroska :
gst-launch-1.0 filesrc location=....webm ! matroskademux ! opusdec ! audioconvert ! lamemp3enc target=quality quality=0 ! filesink location=....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
gst-launch-1.0 filesrc location=....flac ! flacparse ! flacdec ! audioconvert ! audioresample ! lamemp3enc target=quality quality=0 ! filesink location=....mp3
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.
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
Le moyen le plus simple, consiste à utiliser le plugin uridecodebin3 (ou uridecodebin) :
gst-launch-1.0 uridecodebin3 uri=... ! audioconvert ! autoaudiosink
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).
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).
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.
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