Skip to main content

SVT-VP9

SVT-VP9 is a VP9 encoder developed by Intel & licensed under BSD+Patent.
Like its siblings in the SVT encoder family, it scales very well on multicore processors by default.

The reference encoder beats it in rate control flexibility and supports 10-bit color,
but SVT-VP9 is much faster out of the box. Development is slow (version 0.3.1 was tagged in December 2025), so don't expect rapid feature growth.

Installationโ€‹

To build SVT-VP9 from source, first clone the repository & enter the build directory.

git clone https://github.com/OpenVisualCloud/SVT-VP9
cd SVT-VP9/Build/linux

In the directory, simply run ./build.sh [flags] to build. Be aware that building requires CMake & either GCC or Clang.

Build release
./build.sh release

The compiled binaries will be in the Bin/Release directory, including SvtVp9EncApp.

Usageโ€‹

Standaloneโ€‹

Raw YUV input only

Unlike its siblings, SvtVp9EncApp has no Y4M support. Feeding it a .y4m file fails with the misleading error Input yuv does not contain enough frames (the frame counter does file size รท raw frame size math & the Y4M header breaks it). Feed it raw YUV & always set -w, -h & -fps yourself.

Simple raw YUV input, preset 6
SvtVp9EncApp -i input.yuv -w 1920 -h 1080 -fps 24 -enc-mode 6 -q 40 -b output.ivf
Piping raw YUV from FFmpeg (stdin is supported)
ffmpeg -v error -i input.mkv -f rawvideo -pix_fmt yuv420p - | SvtVp9EncApp -i stdin -w 1920 -h 1080 -fps 24 -enc-mode 6 -q 40 -b output.ivf

Note that -n (frames to encode) is effectively required when reading from a pipe, since the encoder can't know the length of stdin. The most useful parameters:

  • -enc-mode [0-9]

Speed preset; 0 is the slowest/best, 9 the fastest (the FFmpeg wrapper calls this preset).

  • -q [0-63]

Quantizer value for constant-QP mode (the default rate control). Note this is the VP9 quantizer range, not HEVC's 0-51.

  • -tune [0-2]

0 = VQ (visually optimized), 1 = OQ (PSNR/SSIM, the default), 2 = VMAF.

  • -rc [0-2] & -tbr

Rate control: 0 = CQP (default), 1 = VBR, 2 = CBR, with the target bitrate set via -tbr.

  • -intra-period [-2..255]

Distance between keyframes; -1 disables intra updates, -2 is auto. There is no scene change detection.

The output is an IVF stream; remux it with FFmpeg (ffmpeg -i output.ivf -c copy output.webm).

FFmpegโ€‹

There are patches bundled in the SVT-VP9 source code for an FFmpeg plugin that adds the libsvt_vp9 encoder.
The wrapper has never been merged into mainline FFmpeg, so a custom build with the plugin patch applied is required.
(An easy way to do so on Windows is using media-autobuild_suite.)

Operation is not too different from the SVT-AV1 FFmpeg integration. Your commands will generally look like this:
ffmpeg -i video.mp4 -c:v libsvt_vp9 -qp 38 -tune ssim -preset 7 -g 255 video_vp9.webm

Parameters
ParameterDescription
-qpQuantizer value, higher = lower quality. Range is 1..51 in current patches, but -qmin/-qmax can be set as high as 69 for extreme low bitrates.
-presetSpeed preset. Range is 0..9, with 9 being fastest and default.
-tuneQuality metric. Can be "vq" (default), "ssim" or "vmaf".
-gSize of the Group of Pictures. Range is -2..255, with -1 = no intraframe updates ever, -2 = "auto".
We recommend you set it as high as possible for encode efficiency.
-rcRate control mode.
Can be "cqp" (Constant Quantizer, default), "vbr" (Variable Bitrate) or "cbr" (Constant Bitrate).
(Consider using vpxenc's two-pass mode if you really need to match a target bitrate.)
-levelEncoder level. Range is 1..6. Generally better not to set it.
-socketIndex of the CPU socket to use. By default it's -1, which uses "all available processors".

Supported Color Spaceโ€‹

SVT-VP9 only supports 8-bit yuv420p.