ArchWiki / GStreamer
ArchWiki / GStreamer
de:GStreamer hu:GStreamer ja:GStreamer zh-hans:GStreamer From Wikipedia:
GStreamer is a pipeline-based multimedia framework that links together a wide variety of media processing systems to complete complex workflows. For instance, GStreamer can be used to build a system that reads files in one format, processes them, and exports them in another. The formats and processes can be changed in a plug and play fashion.
GStreamer supports a wide 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, transcoders, streaming media broadcasters and media players.
Installation
Install the gstreamer package.
To make GStreamer useful, install the plugins packages you require. See official documentation for list of features in each plugin.
Common set of packages that cover the majority of use-cases:
gst-libav — Libav-based plugin containing many decoders and encoders.
gst-plugin-pipewire — Support for the PipeWire audio system.
gst-plugin-va — Support for the VA-API system.
gst-plugins-bad — Plugins that need more quality, testing or documentation.
gst-plugins-base — Essential exemplary set of elements.
gst-plugins-good — Good-quality plugins under the LGPL license. Also contains support for PulseAudio.
gst-plugins-ugly — Good-quality plugins that might pose distribution problems.
Usage
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_0Using 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:
Properties:
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$ gst-discoverer-1.0 file.mp4Integration
PulseAudio
PulseAudio support is provided by the gst-plugins-good package.
PipeWire
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 https://gstreamer.freedesktop.org/documentation/tutorials/playback/hardware-accelerated-video-decoding.html. Depending on the system install:
gst-plugin-va for VA-API support.
gst-plugins-bad and nvidia-utils for NVDECODE/NVENCODE support.
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.*.binGStreamer will then rebuild the registry on the next invocation, which usually takes a few seconds.
Verify VA-API support
To verify VA-API support:
Plugin Details:
Name va
Description VA-API codecs plugin
Filename /usr/lib/gstreamer-1.0/libgstva.so
Version version
License LGPL
Source module gst-plugins-bad
Documentation https://gstreamer.freedesktop.org/documentation/va/
Source release date date
Binary package Arch Linux gst-plugins-bad version
Origin URL https://archlinux.org/
vaav1dec: VA-API AV1 Decoder
vacompositor: VA-API Video Compositor
vadeinterlace: VA-API Deinterlacer
vah264dec: VA-API H.264 Decoder
vah264enc: VA-API H.264 Encoder
vah264lpenc: VA-API H.264 Low Power Encoder
vah265dec: VA-API H.265 Decoder
vah265enc: VA-API H.265 Encoder
vah265lpenc: VA-API H.265 Low Power Encoder
vajpegdec: VA-API JPEG Decoder
vampeg2dec: VA-API Mpeg2 Decoder
vapostproc: VA-API Video Postprocessor
vavp8dec: VA-API VP8 Decoder
vavp9dec: VA-API VP9 Decoder
14 features:
+-- 14 elements$ gst-inspect-1.0 vaVerify NVDECODE/NVENCODE support
To verify NVDECODE/NVENCODE support:
Plugin Details:
Name nvcodec
Description GStreamer NVCODEC plugin
Filename /usr/lib/gstreamer-1.0/libgstnvcodec.so
Version version
License LGPL
Source module gst-plugins-bad
Source release date datehttps://archlinux.org/
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$ gst-inspect-1.0 nvcodecSet 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:
GST_PLUGIN_FEATURE_RANK=nvmpegvideodec:MAX,nvmpeg2videodec:MAX,nvmpeg4videodec:MAX,nvh264sldec:MAX,nvh264dec:MAX,nvjpegdec:MAX,nvh265sldec:MAX,nvh265dec:MAX,nvvp9dec:MAXThose 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.