# SVT-VP9

Canonical URL: https://encode.wiki/tools/software-encoders/svt-vp9/
Content version: ca42e61ede0a24f789d7287a0001244ad22f4abf
Status: current
License: CC BY-SA 4.0
Checksum (SHA-256): 09ec7a8569d9bc0d551fa59ea48db2e39f8af0467401706a7d19ba6ae0595cae

> **Repository:** [OpenVisualCloud/SVT-VP9](https://github.com/OpenVisualCloud/SVT-VP9). SVT VP9 encoder. Scalable Video Technology (SVT) is a software-based video coding technology that is highly optimized for Intel® Xeon® processors. Using the open source SVT-VP9 encoder, it is possible to spread video encoding processing ac…. Latest release: [v0.3.1](https://github.com/OpenVisualCloud/SVT-VP9/releases/tag/v0.3.1), Dec 4, 2025. Last commit: Dec 30, 2025. Stars: 249.

SVT-VP9 is the [VP9](/codecs/video/vp9/) member of Intel's Scalable Video Technology family, alongside [SVT-HEVC](/tools/software-encoders/svt-hevc/) and [SVT-AV1](/tools/software-encoders/svt-av1/). Like its siblings, it was built for throughput on many-core servers, and its presets are much faster than [libvpx](/tools/software-encoders/vpxenc/)'s good-quality mode. It is limited, though: **8-bit 4:2:0 only** (VP9 profile 0), raw YUV input, and fewer rate-control options than libvpx.

## Status

The repository is not archived, but it is not under active development. v0.3.1 (December 2025) was the first release since v0.3.0 in 2020. Recent commits are mostly upkeep: rebasing the FFmpeg patch, build fixes and occasional bug fixes. For quality-focused VP9, especially 10-bit, use libvpx. Use SVT-VP9 when you need 8-bit VP9 fast.

## Build

```sh
git clone --branch v0.3.1 https://github.com/OpenVisualCloud/SVT-VP9.git
cmake -S SVT-VP9 -B SVT-VP9/Build -DCMAKE_BUILD_TYPE=Release
cmake --build SVT-VP9/Build -j"$(nproc)"
```

The encoder is written to `SVT-VP9/Bin/Release/SvtVp9EncApp`.

## Encode

`SvtVp9EncApp` takes raw 8-bit YUV 4:2:0, so give it the dimensions and frame rate, and pipe from FFmpeg:

```sh
ffmpeg -i input.mkv -pix_fmt yuv420p -f rawvideo - | \
  SvtVp9EncApp -i stdin -w 1920 -h 1080 -fps 24 -n 1000 -enc-mode 4 -tune 0 -q 40 -b output.ivf
```

When reading from `stdin`, set `-n` to the number of frames. Without it, the encoder can hang at the end of the input. Width and height must both be multiples of 8, so crop or pad sources such as 1920×1036 first (for example `-vf crop=1920:1032`). The output is IVF; mux it into WebM or MKV with FFmpeg (`ffmpeg -i output.ivf -i input.mkv -map 0:v -map 1:a -c:v copy -c:a libopus final.webm`).

| Option          | App default            | Notes                                                                                  |
| --------------- | ---------------------- | -------------------------------------------------------------------------------------- |
| `-enc-mode`     | 9                      | Preset, 0 (best quality) to 9 (fastest).                                               |
| `-tune`         | 1                      | 0 = visual quality, 1 = PSNR/SSIM, 2 = VMAF. Use 0 unless you are tuning for a metric. |
| `-rc`           | 0                      | 0 = constant QP, 1 = VBR, 2 = CBR.                                                     |
| `-q`            | 45                     | QP, 0–63, used with `-rc 0`. Lower is higher quality.                                  |
| `-tbr`          | 7000000                | Target bitrate in **bits** per second, for `-rc 1`/`-rc 2`.                            |
| `-intra-period` | −2 (auto)              | Keyframe interval in frames, up to 255. −1 means only the first frame is a keyframe.   |
| `-lp`, `-ss`    | all cores, all sockets | Logical-processor count and CPU socket, for running several encodes side by side.      |

## FFmpeg

FFmpeg does not include SVT-VP9. The repository ships a patch (`ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch`) that adds a `libsvt_vp9` encoder when FFmpeg is configured with `--enable-libsvtvp9`. Its options are `-preset` (0–9, default 9), `-tune` (`vq`, `ssim`, `vmaf`; default `vq`), `-rc` (`cqp`, `vbr`, `cbr`), `-qp` (0–51, default 32), `-level` and `-socket`, plus FFmpeg's `-b:v` and `-g`:

```sh
ffmpeg -i input.mkv -c:v libsvt_vp9 -preset 4 -tune vq -rc cqp -qp 32 -g 240 -c:a libopus output.webm
```
