Skip to content

uvg266

currentMigrated from docs/encoders/uvg266.mdx at 37c3317fd058; modified for Encode Wiki · CC BY-SA 4.0

An open-source VVC encoder based on Kvazaar

Latest release
v0.8.1
Last commit
License
BSD-3-Clause
Stars
296

uvg266 is an open-source C encoder for H.266 / VVC from Tampere University’s Ultra Video Group. It is derived from their HEVC encoder Kvazaar, uses x264-style preset names, and is BSD-3-Clause licensed. The README still describes it as under development with speed and rate-distortion performance improving.

For serious VVC work VVenC is the encoder with FFmpeg integration and perceptual optimisation, but uvg266 is a quick, simple alternative with a Kvazaar-style command line.

There are no official binaries. The last tagged release is v0.8.1 (July 2024), but master has had newer work, including a rewritten CMake build in April 2026. Build from master unless you need the tag:

Terminal window
git clone https://github.com/ultravideo/uvg266.git
cmake -S uvg266 -B uvg266/build -DCMAKE_BUILD_TYPE=Release
cmake --build uvg266/build --parallel

The binary is uvg266/build/bin/uvg266.

Terminal window
uvg266 -i input.y4m --preset medium --qp 30 -o output.266

Y4M input carries its own resolution and frame rate. Raw YUV needs --input-res=1920x1080 --input-fps 24 (and --input-bitdepth 10 on a 10-bit build). To feed it from FFmpeg:

Terminal window
ffmpeg -i input.mkv -f yuv4mpegpipe - | uvg266 -i - --input-file-format y4m -o output.266

For 10-bit sources, use -pix_fmt yuv420p10le -strict -1 in FFmpeg (it refuses to write 10-bit Y4M otherwise) and add --input-bitdepth 10. uvg266 ignores the bit depth in the Y4M header: without that option a 10-bit build reads 10-bit input as 8-bit and silently encodes garbage.

The output is a bare VVC stream. Wrap it with ffmpeg -framerate 24 -i output.266 -c copy output.mp4 or MP4Box, and decode with FFmpeg 7.1 or newer or VVdeC.

OptionDefaultNotes
--presetmediumultrafast … veryslow, placebo, as in x264. The README has the per-preset tool table.
-q, --qp22Fixed quantizer. There is no CRF mode; the rate–quality trade-off is set by QP.
--bitrate0 (off)Target bits per second; enables rate control. --rc-algorithm picks lambda or oba.
-p, --period64Intra period in frames (0 = first frame only, 1 = all intra).
--goppreset-based8 or 16 for B-frame pyramids, or lp-… for low-delay structures.
-r, --refpreset-basedReference frames, 1–15.
--threadsautoNumber of encoder threads.

Run uvg266 --help for the full list.