1. Overview[edit | edit source]
gst-transcoder (gst-transcoder-1.0) is a GStreamer command line utility available with GStreamer-1.X.
This utility transcodes audio / video multimedia content using complex GStreamer elements such as decodebin and encodebin into various audio / video multimedia content. It takes as an input either individual files or URL.
2. Usage[edit | edit source]
gst-transcoder accepts the following options:
gst-transcoder-1.0 --help
Usage: gst-transcoder [OPTION?] <source uri> <destination uri> [<encoding format>[/<encoding profile name>]] gst-transcoder-1.0 transcodes a stream defined by its first <input-uri> argument to the place defined by its second <output-uri> argument into the format described in its third <encoding-format> argument, or using the given <output-uri> file extension. The <encoding-format> argument: =============================== If the encoding format is not defined, it will be guessed with the given <output-uri> file extension. <encoding-format> describe the media format into which the input stream is going to be transcoded. We have two different ways of describing the format: GstEncodingProfile serialization format --------------------------------------- GStreamer encoding profiles can be described with a quite extensive syntax which is described in the GstEncodingProfile documentation. The simple case looks like: muxer_source_caps:videoencoder_source_caps:audioencoder_source_caps Name and category of serialized GstEncodingTarget ------------------------------------------------- Encoding targets describe well known formats which those are provided in '.gep' files. You can list available ones using the `--list-targets` argument. Help Options: -h, --help Show help options --help-all Show all help options --help-gst Show GStreamer Options Application Options: -c, --cpu-usage The CPU usage to target in the transcoding process -l, --list-targets List all encoding targets -s, --size set frame size (WxH or abbreviation) -r, --audio-rate set audio sampling rate (in Hz) -f, --framerate set video framerate as a fraction (24/1 for 24fps) or a single number (24 for 24fps)) -v, --video-encoder The video encoder to use.
3. List the available output profiles[edit | edit source]
Use -l option to get the list of available destination multimedia content:
gst-transcoder-1.0 -l
dvd (device): Encoding target suitable for DVDs * Profiles: - dvd: This is an encoding profile usable for DVDs avi (file-extension): Default target for files with a .avi extension * Profiles: - default: Default profile for files with a .avi extension. mp3 (file-extension): Default target for files with a .mp3 extension * Profiles: - default: Default profile for files with a .mp3 extension. oga (file-extension): Default target for files with a .ogg and friends extension * Profiles: - default: Default target for files with a .ogg and friends extension ogv;ogg (file-extension): Default target for files with a .ogg and friends extension * Profiles: - default: Default target for files with a .ogg and friends extension webm (file-extension): Default target for files with a .webm extension * Profiles: - default: Default profile for files with a .webm extension. Audio stream can be either vorbis (default) or opus depending on what is available on the system. Video stream will be either in vp8 (default) or vp9.
4. Examples[edit | edit source]
4.1. Media file format conversion[edit | edit source]
Transcode from H264/AAC encapsulated in mp4 container to VP8/Vorbis encapsulated in webm container:
gst-transcoder-1.0 big_buck_bunny_720p_H264_AAC_25fps_3400K_short.mp4 av_vp8_720p_vorbis.webm webm
Encoding to: Container: default: Default profile for files with a .webm extension. Audio stream can be either vorbis (default) or opus depending on what is available on the system. Video stream will be either in vp8 (def) - Audio: audio/x-vorbis; audio/x-opus - Video: video/x-vp8; video/x-vp9 Starting transcoding... 0:00:03.9 / 0:00:04.0 DONE.
Verification of encoded video details:
gst-discoverer-1.0 av_vp8_720p_vorbis.webm
container #0: WebM audio #1: Vorbis Channels: 2 (front-left, front-right) Sample rate: 44100 Depth: 32 Bitrate: 112000 video #2: VP8 Width: 1280 Height: 720 Depth: 24 Frame rate: 25/1 Pixel aspect ratio: 1/1 Interlaced: false
Transcode from VP8/Vorbis encapsulated in webm container to H264/AAC encapsulated in Quicktime container:
gst-transcoder-1.0 av_vp8_720p_vorbis.webm av_h264_720p_aac.mp4 mp4
Container: default: Default profile for files with a .mp4 extension. Suitable for uploading to youtube. (Quicktime) - Audio: audio/mpeg, mpegversion=(int)4, base-profile=(string)lc, rate=(int){ 48000, 96000 }, channels=(int)2; audio/mpeg, mpegversion=(int)4, base-profile=(string)lc, rate=( int){ 48000, 96000 } - Video: H.264 - Audio: MPEG-4 AAC - Video: H.264 Starting transcoding... 0:00:09.9 / 0:00:10.0 DONE.
Verification of encoded video details:
gst-discoverer-1.0 av_h264_720p_aac.mp4
container #0: Quicktime video #1: H.264 (Main Profile) Width: 640 Height: 480 Depth: 24 Frame rate: 30/1 Pixel aspect ratio: 1/1 Interlaced: false Bitrate: 0 Max bitrate: 0 audio #2: MPEG-4 AAC Language: <unknown> Channels: 2 (front-left, front-right) Sample rate: 48000 Depth: 32 Bitrate: 0 Max bitrate: 0
4.2. Rescale video track[edit | edit source]
More control can be given to the transcoding process by giving a control string as the last argument. Here is an example with resolution downscaled to 640x480 from original 1280x720 resolution.
gst-transcoder-1.0 big_buck_bunny_720p_H264_AAC_25fps_3400K_short.mp4 av_vp8_640x480_vorbis.webm "video/webm:video/x-raw,width=640,height=480->video/x-vp8:audio/x-vorbis"
Verification of encoded video details:
gst-discoverer-1.0 av_vp8_640x480_vorbis.webm container #0: WebM audio #1: Vorbis Language: en Channels: 2 (front-left, front-right) Sample rate: 44100 Depth: 32 Bitrate: 112000 video #2: VP8 Width: 640 Height: 480 Depth: 24 Frame rate: 25/1 Pixel aspect ratio: 853/640 Interlaced: false