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 :
- 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 (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