====== 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