Skip to content

SVT-AV1-Essential

current

A no-nonsense SVT-AV1 encoder fork with sensible defaults and Quality of Life improvements.

Latest release
v4.0.1-Essential
Last commit
License
BSD-3-Clause-Clear
Stars
245

SVT-AV1-Essential is a fork of SVT-AV1 by nekotrix (Trix) that aims for the best out-of-the-box result for ordinary users. It changes many defaults toward perceptual quality and consistency, adds simple --speed and --quality presets, and borrows psychovisual and HDR features from SVT-AV1-PSY and SVT-AV1-HDR. It targets normal-latency encoding at common resolutions; it does not support real-time/low-delay use and does not focus on SD or above-4K content.

The current release is v4.0.1-Essential (March 14, 2026), built on mainline SVT-AV1 4.0.1. Essential only releases on top of official mainline releases, and no Essential build has followed mainline 4.1 or 4.2 yet; the last change to the repository (June 8, 2026) was a documentation update. Mainline features added in 4.1 and 4.2 are therefore missing.

The release page has SvtAv1EncApp for Linux and Windows (Generic, and Optimized for x86-64-v3 CPUs) and macOS arm64. These release binaries include WebM output (the default; --webm 0 writes IVF) but are built without FFMS2 input, Dolby Vision or HDR10+, so they take only Y4M or raw YUV.

nekotrix also maintains FFmpeg and HandBrake builds and the AUR package; StaxRip also ships it. To build it yourself (Clang recommended):

Terminal window
git clone https://github.com/nekotrix/SVT-AV1-Essential
cd SVT-AV1-Essential/Build/linux
./build.sh --native --static --release --enable-lto

Add use-ffms2, use-webm-io, enable-dovi or enable-hdr10plus to the build.sh arguments for those features; a plain build has none of them. FFMS2, libdovi and libhdr10plus must be installed first; WebM support is bundled.

With no options, Essential picks its own speed and quality from the resolution, so the shortest useful command is just input and output. From FFmpeg, pipe 10-bit Y4M (-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 - --speed slow --quality medium -b output.webm

Y4M carries no colour description, so add the source’s colour flags (for BT.709 SDR: --color-primaries bt709 --transfer-characteristics bt709 --matrix-coefficients bt709). A build with FFMS2 reads MKV/MP4 directly, converts to 10-bit 4:2:0 and carries colour and HDR10 metadata over automatically; a build with WebM I/O writes WebM by default (--webm 0 returns to IVF). If you omit -b, the output is named after the input.

Adjust --quality until the size or quality is right, then choose the slowest --speed you can afford. Essential’s defaults are much slower than mainline’s; upstream suggests a faster --speed if that is a problem, which it says still looks better than mainline at a similar speed.

—speedPreset
slower2
slow4
medium5
fast6
faster8
—qualityCRF up to 1080pCRF above 1080p
higher2025
high2530
medium3035
low3540
lower4045

“Up to 1080p” means at most 1920 × 1080 pixels per frame. If you set neither option, the encoder uses preset 4 and CRF 30 up to 1080p, and preset 5 and CRF 35 above. --speed overrides --preset, and --quality overrides --crf/--qp; set --preset or --crf without the corresponding layer if you want an exact value.

SettingEssential 4.0.1Mainline 4.2
Preset / CRF4 / 30 (≤ 1080p), 5 / 35 (above)8 / 35
Output bit depthalways 10-bit, with high-bit-depth mode decisionfollows the input
--scd1 (keyframes on scene changes)0
--auto-tiling1not available
--enable-dlf21
--enable-variance-boost / strength / octile1 / 1 / 40 / 2 / 5
--tf-strength1, and no temporal filtering on keyframes3
--luminance-qp-bias100
--sharpness10
--qp-scale-compress-strength10
--enable-qm / --qm-min / --chroma-qm-min1 / 2 / 40 / 8 / 8
--ac-bias0.250.0
--enable-dg01
--adaptive-film-grain01

--tune accepts 0 VQ, 1 PSNR (default), 2 SSIM, 3 IQ and 4 MS-SSIM; mainline 4.2’s tune 5 (VMAF) is not available. The fork also fixes a chroma-quality regression in the restoration filter that appeared in mainline 3.x.

--help shows a short list; --full-help shows everything. Mainline options are documented on the SVT-AV1 page.

OptionRange (default)What it does
--speed, --qualitysee aboveResolution-aware preset and CRF layers.
--zonesstart,end,crf;…Different CRF/QP for inclusive frame ranges in CRF/CQP mode, e.g. --zones 0,100,20;101,200,40. Quarter steps are allowed.
--scd0–1 (1)Keyframes on scene changes, tuned for accuracy.
--keyint(−2)−2 places periodic keyframes about every 5 seconds; −1 or 0 disables periodic keyframes. Upstream suggests multiples of 32 plus 1 (225, 257) and no more than 300 for hardware decoders.
--min-keyint−1, 0+ (−1)Minimum frames between scene-cut keyframes; −1 is a multiple of the mini-GOP, 0 removes the limit (not recommended).
--auto-tiling0–1 (1)Picks tiles for the resolution (crop-aware) to speed up decoding with minimal efficiency loss.
--enable-tf 30–3 (1)Strong temporal filtering on all frames, usable as a fast built-in denoiser; adjust with --tf-strength.
--enable-dlf 30–3 (2)Most accurate deblocking at every preset; slow at fast presets.
--enable-alt-cdef0–3 (0)Weaker deringing for better fidelity; 2 and 3 also force the best CDEF search.
--enable-alt-dlf0–3 (0)Weaker deblocking for better fidelity; pair with --enable-dlf 3.
--distortion-bias-preset0–4 (0)Bundles of settings that trade higher distortion and larger files for detail retention, 1 mild to 3 strong. 4 imitates SVT-AV1-HDR’s film-grain tune.
--low-memory0–1 (0)Substantially lower RAM use at some cost in speed and quality; most effective in CRF/CQP random-access mode.
--photon-noise0–100000 (0)Generates a photon-noise grain table at the given ISO; --photon-noise-chroma 1 adds chroma grain.
--pin0–cores (0)Pins the encoder to the first N threads (removed from mainline in 4.0).
--variance-boost-curve 30–3PQ-optimized curve from SVT-AV1-HDR, selected automatically for PQ content when variance boost is on.
--tx-bias, --complex-hvs, --sharp-tx, --noise-norm-strength, --noise-adaptive-filteringPsychovisual options from SVT-AV1-PSY/HDR. All off by default except --noise-adaptive-filtering 2 (tune behaviour).
--webmWebM output with settings and metadata written to the file (WebM I/O builds only).
--dolby-vision-rpu, --hdr10plus-jsonfileDynamic HDR metadata (builds with enable-dovi / enable-hdr10plus only).
--hide-banner, --full-helpHide the detailed settings banner; print every option.

Auto-Boost-Essential is a companion script by the same author. It uses SSIMULACRA2 to decide which scenes need more or fewer bits, adjusts CRF per scene for more consistent quality, and runs the final encode for you.

Every option SVT-AV1-Essential v4.0.1-Essential accepts, grouped by purpose; aliases share a row. --help lists only the common ones; --full-help shows the rest. Defaults marked by resolution are decided from the input size.

Input, output and application (21 options)
OptionDefaultDescription
--help—Print the main options and exit; --full-help lists everything.
--full-help—Print every option and exit.
--version—Print the library version and exit.
--input, -irequiredInput file: Y4M or raw YUV, or (in builds with FFMS2) other containers such as MKV and MP4, which are decoded and converted to 10-bit. - reads from a pipe.
--webmon in WebM-enabled buildsWrite WebM instead of IVF; the default when the build includes WebM output.
--output, -bfrom the input nameOutput file, IVF or WebM; - or stdout writes to a pipe. Without it, the encoder writes the input name plus _essential and the matching extension.
--progress2Progress output: 0 none, 1 basic, 2 detailed.
--hide-banner0Don’t print the encoder-settings banner.
--frames0 (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.
--allow-mmap-file1Memory-map regular input files instead of reading them (0 or 1); the speed difference depends on the platform.
--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.
--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.
--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.
--fps-num60000Frame-rate numerator for raw input; Y4M headers override it.
--fps-denom1000Frame-rate denominator; the default pair means 60 fps.
--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 of raw input: 0 4:0:0, 1 4:2:0, 2 4:2:2, 3 4:4:4. Mainline encodes 4:2:0 only.
--profile0 (main)AV1 profile: 0 main, 1 high, 2 professional. Main covers 8- and 10-bit 4:2:0, which is all mainline can encode.
--level0 (auto)AV1 level to signal, 2.0–7.3 (e.g. 5.1); 0 derives it from the input.
--input-depth10Essential encodes 10-bit only and rejects 8-bit Y4M or YUV input: convert first (-pix_fmt yuv420p10le). FFMS2 inputs are converted automatically.
--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 (8 options)
OptionDefaultDescription
--speedauto (slow up to 1080p, medium above)Speed preset that overrides --preset: slower (preset 2), slow (4), medium (5), fast (6), faster (8).
--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), 4 MS-SSIM.
--low-memory0Settings that cut RAM use a lot, at some speed and quality cost; most effective in CRF/CQP random-access mode.
--presetauto (4 up to 1080p, 5 above)Numeric preset, −1–13, used when --speed is not set; lower is slower and more efficient. Above 11 runs as 11 (12 for RTC and all-intra), and 8K inputs need preset 5 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.
--pin0 (off)Pin the encoder to the first N logical cores; 0 disables pinning.
Rate control and passes (22 options)
OptionDefaultDescription
--qualityauto (medium)Quality preset that sets the CRF: higher 20, high 25, medium 30, low 35, lower 40 up to 1080p, each 5 higher above 1080p. Overrides --crf/--qp.
--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.
--mbr-overshoot-pct0Allowed overshoot of --mbr in capped CRF, in percent (0–100).
--zonesnonePer-range CRF/CQP overrides as start,end,crf;start,end,crf;…, e.g. 0,100,20;101,200,40.
--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, -q30 (35 above 1080p)Base QP, 1–63, used when --quality is not set: the fixed QP in CQP and the starting point otherwise.
--crf30 (35 above 1080p)Constant rate factor, 1–70 in 0.25 steps, used when --quality is not set; lower is higher quality and larger.
--tbr2000 kbpsTarget bitrate for VBR and CBR in kbps (1–100000); b, k and m suffixes are accepted, e.g. --tbr 3.5m.
--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).
--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
--enable-qm1Use quantization matrices, which quantize high frequencies more coarsely than low ones.
--qm-min2Lowest (steepest) luma QM level the encoder may pick, 0–15; 15 is flat.
--qm-max15Highest (flattest) luma QM level, 0–15.
--chroma-qm-min4Lowest chroma QM level, 0–15.
--chroma-qm-max15Highest chroma QM level, 0–15.
--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.
--roi-map-filenoneRegion-of-interest file giving per-block QP offsets for chosen frames.
GOP structure and keyframes (13 options)
OptionDefaultDescription
--keyint-2 (about 5 s)Maximum keyframe interval in frames, or seconds with an s suffix. −2 is about 5 seconds (10 mini-GOPs); −1 or 0 means no periodic keyframes. Upstream suggests a multiple of 32 plus 1 (225, 257) and no more than about 300 for hardware decoders.
--min-keyint-1 (auto)Minimum distance between scene-change keyframes: −1 a multiple of the mini-GOP length, 0 no limit (not recommended).
--scd1Scene-change detection: insert keyframes at scene cuts (0 or 1).
--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.
--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.
--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.
--lookahead-1 (auto)Frames of extra look-ahead for rate control and TPL, 0–32, beyond the mini-GOP and temporal-filter window.
--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-qp-offset0QP offset (−63–63) for that startup mini-GOP.
--enable-dg0Dynamic 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 (17 options)
OptionDefaultDescription
--tf-strength1Alt-ref temporal filter strength, 0–4; each step doubles it. The default 1 is 4× weaker than mainline’s 3.
--auto-tiling1Choose tiles from the resolution to speed up decoding with little efficiency loss; manual tile options override it.
--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-dlf2Deblocking filter: 0 off, 1 on, 2 more accurate, 3 most accurate in every case (slow at fast presets).
--enable-cdefauto (on)CDEF deringing filter, 0 or 1.
--enable-restorationauto (on)Loop restoration filter (Wiener and self-guided), 0 or 1.
--enable-tf1Temporal filtering: 0 off, 1 alt-refs, 2 adaptive strength per 64×64 block, 3 strong filtering on all frames, a built-in temporal denoiser (adjust with --tf-strength).
--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.
--lossless0Lossless coding.
--avif0Still-picture mode for AVIF and single images: better efficiency and less memory.
--enable-alt-cdef0Alternative CDEF trade-offs, 0–3: weaker deringing and better fidelity; 2 and 3 also force the best CDEF search, at a speed cost.
--enable-alt-dlf0Alternative deblocking trade-offs, 0–3: weaker deblocking and better fidelity; pair with --enable-dlf 3.
--enable-mfmv-1 (auto)Motion-field motion vector projection, 0 or 1; −1 lets the preset decide.
--max-tx-size64Largest transform size, 32 or 64. 32 can help detail at high-fidelity CRFs.
--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.
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 (6 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.
--photon-noise0 (off)Add synthetic photon (sensor) noise through a generated grain table, as an ISO value 1–100000.
--photon-noise-chroma0Also add chroma noise with --photon-noise.
--adaptive-film-grain0Choose 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 (13 options)
OptionDefaultDescription
--luminance-qp-bias10Spend 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.
--qp-scale-compress-strength1Compress QP differences between temporal layers, 0–8, for steadier quality within a mini-GOP; upstream advises staying at 3 or below.
--variance-boost-strength1Variance 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-octile4How 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.
--ac-bias0.25Psychovisual RD bias toward keeping high-frequency energy, 0.0–8.0; helps texture and grain retention.
--distortion-bias-preset0Bundles of fidelity-over-distortion settings: 1 mild, 2 medium, 3 strong (each gives larger files at the same CRF), 4 imitates SVT-AV1-HDR’s film-grain tune.
--noise-norm-strength0Noise normalization, 0–4: boosts some AC coefficients so fine texture survives in otherwise flat areas.
--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-curve0 (3 for PQ)Variance Boost curve, 0–3; 3 is a PQ HDR curve, used by default for PQ content.
--sharp-tx0Sharp transform optimizations that complement --ac-bias (0 or 1).
--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.