From ArchWiki

GStreamer is a pipeline-based multimedia framework written in the C programming language with the type system based on GObject.

GStreamer allows a programmer to create a variety of media-handling components, including simple audio playback, audio and video playback, recording, streaming and editing. The pipeline design serves as a base to create many types of multimedia applications such as video editors, streaming media broadcasters, and media players.

Designed to be cross-platform, it is known to work on Linux (x86, PowerPC and ARM), Solaris (Intel and SPARC), macOS, Microsoft Windows and OS/400. GStreamer has bindings for programming-languages like Python, C++, Perl, GNU Guile (guile), and Ruby. GStreamer is free software, licensed under the GNU Lesser General Public License.


Install the gstreamer package.

To make GStreamer useful, install the plugins packages you require. See official documentation for list of features in each plugin.


Using gst-launch-1.0

A helpful tool of GStreamer is the gst-launch-1.0(1) command. It is an extremely versatile command line tool to create GStreamer pipelines. It is very similar to and can do many of the things the FFmpeg command can do. Here are some examples:

Convert an MP4 file to MKV:

$ gst-launch-1.0 filesrc location=source.mp4 ! qtdemux name=demux matroskamux name=mux ! filesink location=dest.mkv  demux.audio_0 ! queue ! aacparse ! queue ! mux.audio_0  demux.video_0 ! queue ! h264parse ! queue ! mux.video_0

Using gst-discoverer-1.0

Another helpful tool is gst-discoverer-1.0(1), which is the GStreamer equivalent of FFmpeg's ffprobe(1).

Get info on a video file:

$ gst-discoverer-1.0 file.mp4
  Duration: 0:02:55.613000000
  Seekable: yes
  Live: no
  container: Quicktime
    audio: MPEG-4 AAC
      Stream ID: c910ef2fa357f9f4ad365aebc98cfca88d23fdca99d832645f5113efa43b0cd3/002
      Language: <unknown>
      Channels: 2 (front-left, front-right)
      Sample rate: 44100
      Depth: 16
      Bitrate: 125588
      Max bitrate: 125588
    video: H.264 (Constrained Baseline Profile)
      Stream ID: c910ef2fa357f9f4ad365aebc98cfca88d23fdca99d832645f5113efa43b0cd3/001
      Width: 192
      Height: 144
      Depth: 24
      Frame rate: 15000/1001
      Pixel aspect ratio: 1/1
      Interlaced: false
      Bitrate: 107884
      Max bitrate: 107884



PulseAudio support is provided by the gst-plugins-good package.


PipeWire support is provided by the gst-plugin-pipewire package.

KDE / Phonon integration

See Phonon.

Hardware video acceleration

See Hardware video acceleration.

GStreamer will automatically detect and use the correct API [1]. Depending on the system install:

If the new elements do not show up after installing the packages, you may want to delete and rebuild the plugin registry. Usually it suffices to

$ rm ~/.cache/gstreamer-1.0/registry.*.bin

Gstreamer will then rebuild the registry on the next invocation, which usually takes a few seconds.

Ignore driver whitelist

GStreamer uses a whitelist of VA-API drivers. To ignore the whitelist and allow support for other drivers, set GST_VAAPI_ALL_DRIVERS=1 as environment variable.

Verify VA-API support

To verify VA-API support:

$ gst-inspect-1.0 vaapi
Plugin Details:
  Name                     vaapi
  Description              VA-API based elements
  Filename                 /usr/lib/gstreamer-1.0/
  Version                  version
  License                  LGPL
  Source module            gstreamer-vaapi
  Source release date      date
  Binary package           gstreamer-vaapi
  Origin URL     

  vaapiav1dec: VA-API AV1 decoder
  vaapidecodebin: VA-API Decode Bin
  vaapih264dec: VA-API H264 decoder
  vaapih264enc: VA-API H264 encoder
  vaapih265dec: VA-API H265 decoder
  vaapih265enc: VA-API H265 encoder
  vaapijpegdec: VA-API JPEG decoder
  vaapimpeg2dec: VA-API MPEG2 decoder
  vaapipostproc: VA-API video postprocessing
  vaapisink: VA-API sink
  vaapivc1dec: VA-API VC1 decoder
  vaapivp9dec: VA-API VP9 decoder

  12 features:
  +-- 12 elements


To verify NVDECODE/NVENCODE support:

$ gst-inspect-1.0 nvcodec
Plugin Details:
  Name                     nvcodec
  Description              GStreamer NVCODEC plugin
  Filename                 /usr/lib/gstreamer-1.0/
  Version                  version
  License                  LGPL
  Source module            gst-plugins-bad
  Source release date      date
  Binary package           GStreamer Bad Plugins (Arch Linux)
  Origin URL     

  cudadownload: CUDA downloader
  cudaupload: CUDA uploader
  nvautogpuh264enc: NVENC H.264 Video Encoder Auto GPU select Mode
  nvautogpuh265enc: NVENC H.265 Video Encoder Auto GPU select Mode
  nvav1dec: NVDEC AV1 Decoder
  nvcudah264enc: NVENC H.264 Video Encoder CUDA Mode
  nvcudah265enc: NVENC H.265 Video Encoder CUDA Mode
  nvh264dec: NVDEC h264 Video Decoder
  nvh264enc: NVENC H.264 Video Encoder
  nvh264sldec: NVDEC H.264 Stateless Decoder
  nvh265dec: NVDEC h265 Video Decoder
  nvh265enc: NVENC HEVC Video Encoder
  nvh265sldec: NVDEC H.265 Stateless Decoder
  nvjpegdec: NVDEC jpeg Video Decoder
  nvmpeg2videodec: NVDEC mpeg2video Video Decoder
  nvmpeg4videodec: NVDEC mpeg4video Video Decoder
  nvmpegvideodec: NVDEC mpegvideo Video Decoder
  nvvp8dec: NVDEC vp8 Video Decoder
  nvvp8sldec: NVDEC VP8 Stateless Decoder
  nvvp9dec: NVDEC vp9 Video Decoder
  nvvp9sldec: NVDEC VP9 Stateless Decoder

  21 features:
  +-- 21 elements

Set decoder ranks

For some NVIDIA users, gst-libav may prioritize the Libav decoder over nvcodec decoders which will inhibit hardware acceleration. The GST_PLUGIN_FEATURE_RANK environment variable can be used to rank decoders and thus alleviate this issue. See "GST_PLUGIN_FEATURE_RANK" in the documentation for more information. For example:


Those without AV1 hardware support may also want to disable AV1 decoders (e.g., for YouTube on webkit2gtk-based browsers) by appending avdec_av1:NONE and av1dec:NONE to the list above.

See also