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โ
- Linux & macOS
- Windows
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.sh release
The compiled binaries will be in the Bin/Release directory, including SvtVp9EncApp.
To be filled. If you believe you can help, see our Contribution Guide.
Usageโ
Standaloneโ
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.
SvtVp9EncApp -i input.yuv -w 1920 -h 1080 -fps 24 -enc-mode 6 -q 40 -b output.ivf
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
| Parameter | Description |
|---|---|
| -qp | Quantizer 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. |
| -preset | Speed preset. Range is 0..9, with 9 being fastest and default. |
| -tune | Quality metric. Can be "vq" (default), "ssim" or "vmaf". |
| -g | Size 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. |
| -rc | Rate 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.) |
| -level | Encoder level. Range is 1..6. Generally better not to set it. |
| -socket | Index 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.