====== GStreamer ======
[[http://gstreamer.freedesktop.org/|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 :
* la partie vidéo
* la partie audio
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 (1920x1080).
===== Webcam =====
Par défaut le support [[https://fr.wikipedia.org/wiki/Video4Linux|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