Skip to content

SVT-AV1-HDR

current

An all-purpose AV1 video encoder designed for visually-optimal SDR and HDR image and video encoding.

Latest release
pgo-build-2026-09-29-a46bc2d
Last commit
License
BSD-3-Clause-Clear
Stars
273

SVT-AV1-HDR is a fork of SVT-AV1 maintained by Julio Barba (juliobbv-p), the successor to SVT-AV1-PSY. It aims for the best perceptual quality from SVT-AV1 for both SDR and HDR video, with extra work on PQ HDR and on content with film grain. Despite the name, it is a general-purpose encoder: use it for SDR sources too.

Its defaults are tuned for detail retention and differ a lot from mainline. Bits are allocated differently, so the same CRF does not give the same file size as mainline SVT-AV1; pick the CRF that hits your size or quality target.

The current source release is v4.2.0 (tagged September 2026), rebased onto mainline SVT-AV1 4.2.0. The fork rebases onto mainline only on major versions; minor releases happen when they happen.

Standalone LTO + PGO builds of SvtAv1EncApp are published on the Releases page, built from main by an automated pipeline. The newest as of October 2026 is pgo-build-2026-09-29-a46bc2d (v4.2.0 plus three fixes), for Linux and Windows x86-64, Windows arm64 and macOS arm64, with Dolby Vision and HDR10+ support compiled in. On x86-64, try the icelake-server+znver5 build first when it is offered, then znver2, then x86-64-v3+znver2. A build that crashes immediately needs CPU features your machine lacks.

Community HandBrake and FFmpeg builds also exist. To build it yourself, follow the mainline build guide; add enable-dovi and/or enable-hdr10plus to Build/linux/build.sh to get --dolby-vision-rpu and --hdr10plus-json.

The fork’s own guidance is that most users only need tune, CRF and preset. Feed it 10-bit Y4M from FFmpeg; -strict -1 is required because 10-bit Y4M is outside the official Y4M spec.

Terminal window
ffmpeg -i input.mkv -strict -1 -f yuv4mpegpipe -pix_fmt yuv420p10le - | SvtAv1EncApp -i - --tune 0 --crf 35 --preset 4 -b output.ivf
GoalUpstream suggestion
General video, maximum detail (tune VQ)--tune 0 --crf 35 (any CRF), presets 2–6
Film grain retention--tune 6 --crf 30 (20–40 recommended), preset 1 or 2 strongly recommended
Still images / AVIF (tune IQ)--tune 3 --crf 30 --avif 1, presets 2–6

Tune 6 is a shortcut for --tune 0 --enable-tf 0 --enable-restoration 0 --enable-cdef 0 --complex-hvs 1 --tx-bias 1 --ac-bias 4.00. It keeps grain by spending bits on it, so expect larger files than tune 0 at the same CRF. It is meant for moderate to heavy grain and lowers metric scores, as the encoder warns when you select it.

Y4M carries no colour description, so pass the source’s colour flags yourself (for BT.709 SDR: --color-primaries bt709 --transfer-characteristics bt709 --matrix-coefficients bt709). Mux the IVF with MKVToolNix or FFmpeg afterwards, for example mkvmerge -o final.mkv output.ivf --no-video input.mkv.

—tuneNameNotes
0VQPsychovisual tuning; the usual choice for video.
1PSNRDefault.
2SSIM--alt-ssim-tuning 1 adds VQ optimizations and an alternative SSIM path.
3IQStill images; not recommended outside all-intra encoding.
4MS-SSIMMS-SSIM/SSIMULACRA2-optimized mode from mainline.
5VMAFFrom mainline 4.2.
6Film GrainFork-specific; see above.
SettingSVT-AV1-HDR 4.2Mainline 4.2
--preset48
--input-depth (raw YUV input)108
--keyint -2 (auto)about 10 seconds, capped at about 300 framesabout 5 seconds
--enable-qm / --qm-min / --qm-max1 / 6 / 100 / 8 / 15
--enable-variance-boost10
--tf-strength1 (4× weaker than mainline)3
--kf-tf-strength1not available
--sharpness10
--ac-bias1.0, with --sharp-tx 10.0
--qp-scale-compress-strength1.00

These are not in mainline SVT-AV1 4.2. Everything else behaves as documented on the SVT-AV1 page, subject to the defaults above.

OptionRange (default)What it does
--variance-boost-curve 30–3 (0)PQ-optimized variance boost curve. Selected automatically when variance boost is on and --transfer-characteristics is PQ (16 / smpte2084). Mainline stops at curve 2.
--noise0–200 (0)Generates a film-grain table at this strength and uses it as the grain table. 50 is roughly equivalent to --film-grain 50.
--noise-chroma−1–200 (−1)Chroma grain strength; −1 uses about 60% of --noise, 0 turns it off.
--noise-chroma-from-luma0–1 (0)Derive chroma noise from luma, so grain also appears on grayscale content.
--noise-size−1–13 (−1)Grain size for the generated table; −1 picks it from the resolution.
--complex-hvs0–1 (0)Highest-complexity psychovisual model; slower.
--tx-bias0–3 (0)Biases transform size/type choices toward sharpness and detail, at some risk of blocking and banding. 1 = full, 2 = transform size only, 3 = interpolation filter only.
--sharp-tx0–1 (1)Sharp transform optimizations that support --ac-bias. Upstream suggests disabling it if you set --ac-bias 0.
--kf-tf-strength0–4 (1)Temporal filtering strength on keyframes; each step doubles it.
--noise-norm-strength0–4 (1)Boosts some AC coefficients to keep fine texture in otherwise flat areas.
--noise-adaptive-filtering0–4 (2)Whether high detected noise disables CDEF/restoration: 0 off, 1 both, 2 tune default, 3 CDEF only, 4 restoration only.
--cdef-scaling1–30 (15)Scales CDEF strength: 1 ≈ 0.06×, 15 = 1×, 30 = 2×. Lower is sharper with more ringing; users report 10–12 as useful.
--enable-qmpsnr−1–1 (−1)QM-weighted distortion in RD search; on for tune 3 by default.
--alt-ssim-tuning0–1 (0)Alternative SSIM tuning; only affects tune 2.
--alt-lambda-factors0–1 (0)RDO lambda factors from SVT-AV1 3.0.2.
--dolby-vision-rpufileDolby Vision RPU to embed (build needs enable-dovi).
--hdr10plus-jsonfileHDR10+ JSON metadata to embed (build needs enable-hdr10plus).

Several tools that started in this fork or in SVT-AV1-PSY are now in mainline (--variance-boost-strength, --variance-octile, --ac-bias, --tf-strength, --sharpness, --luminance-qp-bias, --max-tx-size, --adaptive-film-grain, --hbd-mds, extended CRF up to 70 in quarter steps). The fork mostly changes their defaults.

Tune 6 keeps the source grain as real coded detail. AV1 film-grain synthesis is the alternative: --film-grain N estimates grain parameters from the source (the coded picture is only denoised with --film-grain-denoise 1), while --noise N or --fgs-table supplies a grain table without analysing the source. Synthesized grain saves a lot of bits, but it is a decoder-side effect that does not match the source grain exactly. Do not combine a high synthesis strength with tune 6 unless you want visibly more grain than the source had.

Take the HDR10 signalling from the source’s metadata (read it with ffprobe or MediaInfo). For BT.2020 PQ:

Terminal window
ffmpeg -i input.mkv -strict -1 -f yuv4mpegpipe -pix_fmt yuv420p10le - | SvtAv1EncApp -i - --tune 0 --crf 30 --preset 4 \
--color-primaries bt2020 --transfer-characteristics smpte2084 --matrix-coefficients bt2020-ncl \
--mastering-display "G(0.265,0.690)B(0.150,0.060)R(0.680,0.320)WP(0.3127,0.3290)L(1000,0.0001)" \
--content-light 1000,400 -b output.ivf

Replace the mastering-display and content-light values with the source’s own; --color-help prints the syntax. Signalling PQ also switches on the PQ variance boost curve. For HLG, signal --transfer-characteristics hlg instead.

For Dolby Vision or HDR10+, extract the metadata with dovi_tool or hdr10plus_tool and pass it with --dolby-vision-rpu or --hdr10plus-json. The metadata must match the encoded frames one-to-one, so apply any trims or frame-rate changes to the metadata too.

Every option SVT-AV1-HDR v4.2.0 accepts, grouped by purpose; aliases share a row. Options not mentioned in the sections above behave as in mainline SVT-AV1, with the fork’s defaults shown here. “auto” defaults are resolved from the preset, tune and input.

Input, output and application (20 options)
OptionDefaultDescription
--help—Print the option list and exit.
--version—Print the library version and exit.
--input, -irequiredInput file, Y4M or raw YUV; - or stdin reads from a pipe. Raw YUV also needs --width, --height, the frame rate and --input-depth.
--allow-mmap-file1Memory-map regular input files instead of reading them (0 or 1); the speed difference depends on the platform.
--output, -bnoneOutput file; - or stdout writes to a pipe. An .obu extension selects raw OBU output, anything else IVF.
--ivfonWrite an IVF file (the default unless the output name ends in .obu).
--obuoffWrite a raw OBU stream without the IVF wrapper; an .obu output extension does the same.
--config, -cnoneRead options from a configuration file of Name : value lines (the config-file names, e.g. EncoderMode).
--errlogstderrWrite warnings and errors to this file.
--recon, -ononeWrite the reconstructed (decoded) frames as raw YUV, for debugging or metrics.
--stat-filenoneWrite per-frame PSNR and SSIM to this file; needs --enable-stat-report 1.
--progress1Progress output: 0 none, 1 normal, 2 detailed.
--no-progress0--no-progress 1 is the same as --progress 0.
--svtav1-paramsnoneColon-separated key=value list using option names without --, e.g. tune=0:enable-variance-boost=1. Handy when a wrapper passes a single parameter string.
--frames, -n0 (all)Number of frames to encode; 0 encodes to the end of the input. A count longer than the input loops back to the start.
--skip0Skip this many frames at the start of the input.
--nb-1 (off)Preload this many frames into memory and encode only those, for benchmarking without I/O.
--inj0Feed frames to the encoder at a fixed rate (--inj-frm-rt) to simulate live input.
--inj-frm-rt60Injection rate in frames per second (0–240) for --inj 1.
--enable-stat-report0Compute PSNR and SSIM against the source and print a summary at the end; per-frame values go to --stat-file. Slows encoding.
Source format, profile and level (11 options)
OptionDefaultDescription
--width, -w0 (from Y4M)Frame width in pixels, 4–16384. Required for raw YUV; Y4M headers supply it.
--height, -h0 (from Y4M)Frame height in pixels, 4–8704. Required for raw YUV.
--forced-max-frame-width0 (input width)Maximum frame width written to the sequence header (4–16384), for streams whose frame size changes later.
--forced-max-frame-height0 (input height)Maximum frame height written to the sequence header (4–8704).
--color-format1 (4:2:0)Chroma format: 1 or 420 for 4:2:0, 3 or 444 for 4:4:4. A 4:4:4 Y4M selects 4:4:4 automatically.
--profile0 (main)AV1 profile: 0 main (switched to high automatically for 4:4:4), 1 high, 2 professional.
--level0 (auto)AV1 level to signal, 2.0–7.3 (e.g. 5.1); 0 derives it from the input.
--fps-num60000Frame-rate numerator for raw input; Y4M headers override it.
--fps-denom1000Frame-rate denominator; the default pair means 60 fps.
--input-depth10Bit depth of raw input and of the encode, 8 or 10; Y4M headers supply it. Raw input defaults to 10-bit.
--tier0 (main)AV1 tier: 0 main, 1 high (higher bitrate limits for levels 4.0 and up). Accepted but not listed in --help.
Preset, tune and threading (6 options)
OptionDefaultDescription
--preset4Speed/efficiency trade-off, −3–13; lower is slower and more efficient. −2 and −3 are extremely slow research modes. Above 11 runs as 11 except in RTC mode (all-intra stops at 9), and 8K inputs need preset 2 or faster.
--asmmaxHighest instruction set to use. x86: c, mmx, sse … sse4_2, avx, avx2, avx512, max; Arm: c, neon, crc32, neon_dotprod, neon_i8mm, sve, sve2, max. Lower it only to debug or compare.
--lp0 (auto)Level of parallelism, 1–6: higher levels create more threads and picture buffers and use more memory. 0 picks a level from the core count. It is not a thread count.
--fast-decode0Decoder-speed optimizations, 0–2 (2 decodes fastest) at a small efficiency cost. Developed with --tune 1; the encoder warns when it is combined with --tune 0. Try it before tiles.
--tune1 (PSNR)0 VQ, 1 PSNR, 2 SSIM, 3 IQ (still images; all-intra or low delay), 4 MS-SSIM, 5 VMAF, 6 Film Grain (tune 0 with TF, restoration and CDEF off plus --complex-hvs 1 --tx-bias 1 --ac-bias 4).
--hbd-mds-1 (preset)Precision of mode decision for 10-bit input: −1 preset default, 0 8-bit, 1 10-bit (slower), 2 hybrid 8/10-bit.
Rate control and passes (23 options)
OptionDefaultDescription
--rc0Rate-control mode: 0 CRF (or CQP with --aq-mode 0), 1 VBR, 2 CBR, both with --tbr. VBR needs random access and CBR needs low delay (--pred-struct 1).
--qp, -q35Base QP, 1–63: the fixed QP in CQP and the starting point otherwise. For constant quality use --crf.
--crf35Constant rate factor, 1–70 in 0.25 steps; lower is higher quality and larger. Same as --rc 0 --aq-mode 2 --qp N on a finer scale.
--cqpoffConstant QP, 1–70 in 0.25 steps; same as --rc 0 --aq-mode 0 --qp N. No adaptive quantization, so it is mainly for testing.
--tbr2000 kbpsTarget bitrate for VBR and CBR in kbps (1–100000); b, k and m suffixes are accepted, e.g. --tbr 3.5m.
--mbr0 (off)Maximum bitrate for capped CRF, in kbps (same suffixes). Dropped with a warning when TPL is off: --aq-mode 0, all-intra or low-delay.
--max-qp63Highest QP rate control may use, 0–63; mainly for VBR and CBR.
--min-qpauto (0 for CRF, 4 for VBR/CBR)Lowest QP rate control may use, 0–63; mainly for VBR and CBR.
--undershoot-pctauto (50 for VBR, 25 for CBR)How far below the target VBR/CBR may undershoot, in percent (0–100).
--overshoot-pctauto (25)How far above the target VBR/CBR may overshoot, in percent (0–100).
--mbr-overshoot-pct50Allowed overshoot of --mbr in capped CRF, in percent (0–100).
--max-intra-bitrate-pct300Cap intra frames at this percentage of the per-frame target bitrate; 0 removes the cap. VBR/CBR only.
--max-inter-bitrate-pct0 (off)Cap inter frames at this percentage of the per-frame target bitrate; 0 means no cap. VBR/CBR only.
--gop-constraint-rc0Make VBR hit the target within each GOP instead of over the whole clip; useful for chunked or segmented encoding.
--buf-sz1000CBR decoder buffer size in milliseconds (20–10000).
--buf-initial-sz600CBR initial buffer level in milliseconds (20–10000); must be below --buf-sz.
--buf-optimal-sz600CBR target buffer level in milliseconds (20–10000).
--recode-loop4 (preset-based)Re-encode frames that miss the rate target (VBR, capped CRF and RTC CBR only): 0 off, 1 key frames and oversized frames, 2 key/alt-ref/golden frames, 3 all frames, 4 auto (level 2 for capped CRF and presets ≤3, otherwise 1).
--minsection-pct0VBR: lowest bitrate a GOP may get, as a percentage of the target (0–100).
--maxsection-pct2000VBR: highest bitrate a GOP may get, as a percentage of the target (0–10000).
--pass0Run one pass of a two-pass encode: 0 single pass, 1 first pass, 2 second pass (VBR only). Use the same --stats file in both.
--statssvtav1_2pass.logStatistics file written by the first pass and read by the second.
--passes1--passes 2 runs both passes of a VBR two-pass encode in one command.
Quantization offsets and matrices (20 options)
OptionDefaultDescription
--use-q-file0Take per-frame QPs from --qpfile instead of the encoder’s own assignment.
--qpfilenoneFile with one QP per line, one line per frame, for --use-q-file 1.
--aq-mode2Adaptive quantization: 0 off (constant QP), 1 variance-based segments, 2 delta-q from TPL prediction efficiency.
--use-fixed-qindex-offsets0Override per-layer QP assignment: 1 use the base q-index plus --qindex-offsets and --key-frame-qindex-offset, 2 add those offsets on top of the encoder’s own assignment.
--key-frame-qindex-offset0Q-index offset for key frames, −64–63, used with --use-fixed-qindex-offsets. Q-index runs 0–255, about four steps per QP.
--key-frame-chroma-qindex-offset0Chroma q-index offset for key frames, −64–63.
--qindex-offsets0 per layerComma-separated luma q-index offsets, one per temporal layer (each −64–63), for --use-fixed-qindex-offsets.
--chroma-qindex-offsets0 per layerComma-separated chroma q-index offsets, one per temporal layer (each −64–63).
--luma-y-dc-qindex-offset0Luma DC quantizer offset in q-index steps (−64–63); positive values quantize DC more coarsely.
--chroma-u-dc-qindex-offset0Cb DC quantizer offset in q-index steps (−64–63).
--chroma-u-ac-qindex-offset0Cb AC quantizer offset in q-index steps (−64–63).
--chroma-v-dc-qindex-offset0Cr DC quantizer offset in q-index steps (−64–63).
--chroma-v-ac-qindex-offset0Cr AC quantizer offset in q-index steps (−64–63).
--lambda-scale-factors128 for every frame typeComma-separated RD lambda multipliers per frame-update type, in units of 1/128 (128 = 1.0). A research control.
--enable-qm1Use quantization matrices, which quantize high frequencies more coarsely than low ones.
--qm-min6Lowest (steepest) luma QM level the encoder may pick, 0–15; 15 is flat.
--qm-max10Highest (flattest) luma QM level, 0–15.
--chroma-qm-min8Lowest chroma QM level, 0–15.
--chroma-qm-max15Highest chroma QM level, 0–15.
--roi-map-filenoneRegion-of-interest file giving per-block QP offsets for chosen frames.
GOP structure and keyframes (12 options)
OptionDefaultDescription
--keyint-2 (about 10 s)Maximum keyframe interval in frames, or seconds with an s suffix. −2 is about 10 seconds, at most 305 frames; −1 or 0 means no periodic keyframes (CRF only).
--irefresh-type2 (closed GOP)Keyframe type at each interval: 1 forward keyframe (open GOP), 2 key frame (closed GOP). Open GOP is slightly more efficient; closed GOP makes every keyframe a clean seek point.
--scd0Scene-change detection. v4.2.0 switches it back off with a warning: scene changes are handled inside mode decision and no keyframe is inserted.
--lookahead-1 (auto)Frames of extra look-ahead for rate control and TPL, 0–120, beyond the mini-GOP and temporal-filter window.
--hierarchical-levelsauto (5; 4 above preset 12)Temporal layers above the base layer, 0–5; 5 gives 32-frame mini-GOPs. Fewer levels lower latency and memory use.
--pred-struct2 (random access)Prediction structure: 1 low delay, 2 random access (normal for files). 0 all-intra is also accepted.
--rtc0Real-time mode: fast low-delay settings; forces --pred-struct 1.
--force-key-framesnoneComma-separated keyframe positions: a number followed by f for frames or s for seconds (e.g. 0f,120f,30.5s).
--startup-mg-size0 (off)Use a smaller mini-GOP right after each keyframe: 2, 3 or 4 temporal layers (4, 8 or 16 frames). CRF only, and not above --hierarchical-levels.
--startup-qp-offset0QP offset (−63–63) for that startup mini-GOP.
--enable-dg1Dynamic mini-GOP: adapt the hierarchical structure to the content.
--intra-period-2Deprecated form of --keyint, counted as keyint − 1. Not listed in --help.
Filters and coding tools (18 options)
OptionDefaultDescription
--tf-strength1Alt-ref temporal filter strength, 0–4; each step doubles it. The default 1 is 4× weaker than mainline’s 3, which keeps more detail and grain.
--tile-rowsautoTile rows as log2 (0–6; 2 means 4 rows). Tiles help decoder threading at a small efficiency cost; the encoder does not need them for its own threading.
--tile-columnsautoTile columns as log2 (0–4); at most 128 tiles in total.
--enable-dlf1Deblocking filter: 0 off, 1 on, 2 more accurate and slower.
--enable-cdefauto (on)CDEF deringing filter, 0 or 1.
--enable-restorationauto (on)Loop restoration filter (Wiener and self-guided), 0 or 1.
--enable-mfmv-1 (auto)Motion-field motion vector projection, 0 or 1; −1 lets the preset decide.
--enable-tf1Temporal filtering of alt-ref frames: 0 off, 1 on, 2 adaptive strength per 64×64 block (overrides --tf-strength).
--enable-kf-tf1Apply temporal filtering to key frames as well.
--enable-overlays0Insert overlay frames after filtered alt-refs as extra references. Not supported with low delay or multi-pass.
--scm2 (detect)Screen-content tools (palette, intra block copy): 0 off, 1 on, 2 detect per frame, 3 detect with anti-aliasing awareness.
--enable-intrabc1Allow intra block copy when screen-content tools are active (preset-dependent).
--lossless0Lossless coding.
--avif0Still-picture mode for AVIF and single images: better efficiency and less memory.
--max-tx-size64Largest transform size, 32 or 64. 32 can help detail at high-fidelity CRFs.
--kf-tf-strength1Temporal filter strength on key frames, 0–4; each step doubles it (1 is 4× weaker than mainline). Removes keyframe artifacts from strong filtering.
--noise-adaptive-filtering2Noise-adaptive filtering turns CDEF and restoration off on noisy frames: 0 off, 1 both, 2 tune default, 3 CDEF only, 4 restoration only.
--cdef-scaling15 (1×)Scale CDEF strength, 1–30: 1 ≈ 0.06×, 15 = 1×, 30 = 2×. Lower is sharper but rings more; users report 10–12 as useful.
Super-resolution, resizing and switch frames (16 options)
OptionDefaultDescription
--superres-mode0 (off)Super-resolution (code at reduced width, upscale in the decoder): 0 off, 1 fixed, 2 random, 3 by QP threshold, 4 auto. Not available with two-pass.
--superres-denom8Mode 1 scale: width × 8/denom, 8–16 (8 none, 16 half width).
--superres-kf-denom8Mode 1 scale for key frames, 8–16.
--superres-qthres43Mode 3: frames with QP above this (0–63) use super-resolution.
--superres-kf-qthres43Mode 3 threshold for key frames, 0–63.
--sframe-dist0 (off)Insert a switch frame every N frames; S-frames let a decoder switch between streams.
--sframe-mode2S-frame placement: 1 only if that frame is an alt-ref, 2 the next alt-ref, 3 exactly at --sframe-posi (mini-GOP adjusted), 4 the same in decode order.
--sframe-posinoneComma-separated frame numbers (0-based) for S-frames in modes 3 and 4.
--sframe-qpnoneQP for each S-frame (1–63), comma-separated; a single value applies to all.
--sframe-qp-offsetnoneQP offset for each S-frame (−63–63), comma-separated; a single value applies to all.
--resize-mode0 (off)Reference scaling (resize frames inside the codec loop): 0 off, 1 fixed, 2 random, 3 dynamic, 4 per-event list.
--resize-denom8Mode 1 scale 8/denom, 8–16.
--resize-kf-denom8Mode 1 scale for key frames, 8–16.
--frame-resz-eventsnoneMode 4: comma-separated frame numbers (0-based) where a new scale starts.
--frame-resz-kf-denomsnoneMode 4: key-frame denominators (8–16), one per event.
--frame-resz-denomsnoneMode 4: denominators (8–16), one per event.
Film grain (8 options)
OptionDefaultDescription
--film-grain0 (off)Film-grain synthesis, 1–50: estimate grain from the source and signal it for the decoder to add back. Saves a lot of bitrate on grainy sources; the encoder warns about the compute cost above preset 6.
--film-grain-denoise01 also codes a denoised picture at the --film-grain strength; 0 codes the source picture and only adds the grain parameters.
--fgs-tablenoneUse a pre-made grain table file (aomenc --film-grain-table format) instead of estimating grain.
--noise0 (off)Generate a film-grain table at this strength (0–200) and use it as the grain table, without analysing the source; 50 is roughly --film-grain 50.
--noise-chroma-1Chroma grain strength: −1 about 60% of --noise, 0 none, 1–200 set independently.
--noise-chroma-from-luma0Derive chroma noise from luma, so grain also appears on grayscale content.
--noise-size-1 (auto)Grain size of the generated table, 0–13; −1 picks it from the resolution.
--adaptive-film-grain1Choose the grain-estimation block size from the resolution, which reduces visible repeating grain patterns.
Colour and HDR metadata (10 options)
OptionDefaultDescription
--color-help—Print the colour-metadata reference (primaries, transfer and matrix names, mastering-display syntax) and exit.
--color-primaries2 (unspecified)Colour primaries, 0–12 or 22, by number or name (bt709, bt2020…); see --color-help. Signalling only: pixels are not converted.
--transfer-characteristics2 (unspecified)Transfer function, 0–22 (bt709, smpte2084 for PQ, hlg…).
--matrix-coefficients2 (unspecified)YUV matrix, 0–14 (bt709, bt2020-ncl…). 0 (identity) needs 4:4:4.
--color-range0 (limited)0 limited (studio) range, 1 full range.
--chroma-sample-positionunknownChroma siting: unknown, vertical/left or colocated/topleft.
--mastering-displaynoneSMPTE ST 2086 mastering display as G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min): CIE xy chromaticities and luminance in cd/m².
--content-lightnoneContent light level as MaxCLL,MaxFALL in cd/m², e.g. 1000,400.
--dolby-vision-rpunoneDolby Vision RPU file to embed, frame-aligned with the encode. Requires a build with libdovi.
--hdr10plus-jsonnoneHDR10+ JSON metadata file to embed. Requires a build with hdr10plus support.
Psychovisual tuning (15 options)
OptionDefaultDescription
--luminance-qp-bias0Spend more bits on dark frames: lowers frame QP based on average luma, strength 0–100.
--sharpness1Bias deblocking and RD decisions toward sharpness (positive) or smoothness (negative), −7–7.
--enable-variance-boost1Variance Boost: lower QP in low-contrast superblocks to prevent banding and blocking in flat and dark areas, at some bitrate cost.
--variance-boost-strength2Variance Boost strength: 1 mild, 2 gentle, 3 medium, 4 aggressive. Upstream suggests 1 for smooth animation and 3 for stills or very contrasty films.
--variance-octile5How much of a superblock must be low-contrast before it is boosted, 1–8 (1 boosts readily, 8 only uniform blocks). Lower values spend more bits; upstream recommends 4–7.
--variance-boost-curve0 (3 for PQ)Variance Boost curve: 0 default, 1 low-to-medium contrast, 2 still picture, 3 PQ HDR. Curve 3 is chosen automatically when --transfer-characteristics is PQ (16).
--qp-scale-compress-strength1.0Compress QP differences between temporal layers, 0.0–8.0 (mainline allows 0–3), for steadier quality within a mini-GOP; helps grain and fast motion.
--ac-bias1.0Psychovisual RD bias toward keeping high-frequency energy, 0.0–8.0; helps texture and grain retention.
--noise-norm-strength1Noise normalization, 0–4: boosts some AC coefficients so fine texture survives in otherwise flat areas.
--alt-lambda-factors0Use the RDO lambda factors of SVT-AV1 3.0.2 (0 or 1).
--sharp-tx1Sharp transform optimizations that complement --ac-bias; upstream suggests turning them off if you set --ac-bias 0.
--alt-ssim-tuning0Tune 2 only: add tune 0’s VQ optimizations and an alternative SSIM RD calculation.
--tx-bias0Bias transform size/type choices toward sharpness and detail, at some risk of blocking and banding: 0 off, 1 full, 2 transform size only, 3 interpolation filter only.
--complex-hvs0Use the highest-complexity HVS model in mode decision (0 or 1); much slower.
--enable-qmpsnr-1 (auto)QM-weighted distortion in RD search: −1 on for tune IQ only, 0 off (plain PSNR), 1 on. Helps images most.