Skip to content

5fish/SVT-AV1

current

Focused on high efficiency and high fidelity encoding, with additional parameters tailored for 2D content

Latest release
v2.3.261005
Last commit
License
BSD-3-Clause-Clear
Stars
24

5fish/SVT-AV1 is a fork of SVT-AV1 aimed at high-efficiency and high-fidelity encoding of 2D content such as anime and games. Akatsumekusa (Akatmks) is the main developer, alongside 5fish. It pulls in work from SVT-AV1-PSY, SVT-AV1-HDR, SVT-AV1-PSYEX and SVT-AV1-Essential, and adds its own “psy-bias” system for line art and texture. The project judges changes by visual quality, not metric scores.

The codebase descends from SVT-AV1-PSY 2.3.0, which was based on mainline SVT-AV1 2.3.0. That is why version numbers start with 2.3 (v2.3.YYMMDD). Mainline 3.x/4.x options such as --avif, --lossless, --rtc and --max-tx-size are not available, and the tune list is PSY’s, not mainline’s.

Releases are dated builds published often. The latest as of October 8, 2026 is v2.3.261005 (October 5, 2026); some intermediate builds are marked as pre-releases. GitHub Releases has LTO + PGO builds of SvtAv1EncApp for Linux and Windows x86-64, Windows arm64 and macOS arm64, with Dolby Vision and HDR10+ support. On x86-64, try icelake-server+znver5 first, then znver2, then x86-64-v3+znver2; a build that crashes immediately needs CPU features your machine lacks.

HandBrake builds are maintained separately. To build it yourself, upstream recommends Clang and Build/linux/build.sh --native --static --release --enable-lto --enable-pgo.

Upstream asks you to start with --preset, --crf, --lineart-psy-bias and --texture-psy-bias on their own, and not to paste parameters from other SVT-AV1 forks: many newer 5fish features conflict with options commonly used elsewhere. This is upstream’s example for a small (“mini”) encode:

Terminal window
ffmpeg -i input.mkv -strict -1 -f yuv4mpegpipe -pix_fmt yuv420p10le - | SvtAv1EncApp -i - --preset 2 --crf 26 --lineart-psy-bias 3 --texture-psy-bias 3 --color-primaries 1 --transfer-characteristics 1 --matrix-coefficients 1 -b output.ivf

-strict -1 is needed because 10-bit Y4M is outside the official Y4M spec. The colour flags signal BT.709; Y4M carries no colour description, so set them to match your source. Mux the IVF with MKVToolNix afterwards.

Preset. Upstream recommends --preset 2 for the best quality, --preset 4 or at most --preset 6 for speed. They currently advise against --preset 0: preset 2’s candidate filtering often beats preset 0’s exhaustive search.

CRF. The community bands upstream uses:

CRFTypical use
≤ 12High-fidelity encodes
16–20High-quality encodes
24–28Larger mini encodes
32–40Tiny mini encodes

Psy-bias. Higher values make the encoder try harder to retain that kind of detail. Set both together.

SituationStarting point
High-quality and high-fidelity encodes--lineart-psy-bias 5 --texture-psy-bias 4
Mini encodes--lineart-psy-bias 3 --texture-psy-bias 3
Weak line artraise --lineart-psy-bias to 6–7
Heavy texture or noiseraise --texture-psy-bias to 5–7 (in mini encodes, too high can cause blocking on noisy sources)
Little texturelower --texture-psy-bias to 3 or less to save bits
Almost everything is texturelower --lineart-psy-bias to 3

If you set neither, both are 0 (off). If you set only one, the other defaults to the smaller of that value and 2. Each level switches on a bundle of internal tweaks (mode decision, deblocking, CDEF, QM and rate-control biases); Parameters.md has the full per-level tables. Upstream points to Parameters.md rather than --help for explanations.

The tune list comes from SVT-AV1-PSY 2.3, so the numbers do not match mainline 4.x or SVT-AV1-HDR:

—tune5fish/SVT-AV1
0VQ (default)
1PSNR
2SSIM
3Subjective SSIM
4Still Picture

Other defaults that differ from mainline SVT-AV1 4.2: --preset 4 (mainline 8), scene-change detection on, so it places keyframes at scene cuts (mainline ignores --scd), quantization matrices on with --qm-min 8, or 9 when --texture-psy-bias is 3 or higher (mainline QMs off), --sharpness 2 (mainline 0) and --tf-strength 1 (mainline 3).

The options you are most likely to touch after the four above. Many more --psy-bias-*, --dlf-bias-* and --cdef-bias-* controls exist; the psy-bias levels set most of them for you.

OptionRange (default)What it does
--lineart-psy-bias0–7 (0)Line-art retention level. -2 is a test mode for tuning the variance threshold.
--texture-psy-bias0–7 (0)Texture retention level.
--noise-psy-bias0–7 (0)Noise retention. Set automatically to 2/4/6 by --texture-psy-bias 5/6/7, and to 4 by high-fidelity mode.
--lineart-variance-thr, --texture-variance-thr0.0–16.0 (5.5)Variance thresholds that decide what counts as line art and texture.
--high-quality-encode-psy-bias0–1Extra biases for high-quality encodes. On automatically at CRF ≤ 24 when a psy-bias is set.
--high-fidelity-encode-psy-bias0–1Aims to match the source frame by frame rather than just keep texture. On automatically at CRF ≤ 16 when a psy-bias is set.
--balancing-q-bias0–1Biases TPL per frame and per superblock for detail retention. On automatically when a psy-bias is set.
--noise-level-thr−2, −1, >0 (−1)Noise threshold above which CDEF, restoration and some mode decisions are disabled. -2 prints each frame’s noise level so you can choose a value.
--satd-bias0.0–16.0 (0.0)Adds SATD to the distortion calculation; upstream suggests trying 0.5 for some textures.
--photon-noise0–100000 (0)Generates a photon-noise grain table at the given ISO. --photon-noise-chroma 1 adds chroma noise.
--chroma-grain0–1 (1)Whether film-grain synthesis applies to chroma.
--auto-tiling0–1 (0)Essential’s automatic tile layout, off by default here.
--min-keyint−1, 0+ (−1)Minimum distance between scene-cut keyframes.
--frame-luma-bias0–100 (0)Raises quality in dark frames. This is PSY’s name for mainline’s --luminance-qp-bias.
--max-32-tx-size0–1 (0)Limits transforms to 32×32 (mainline uses --max-tx-size 32).
--pin, --ssPin to the first N cores; choose a CPU socket.

For texture-heavy sources, upstream also recommends --enable-cdef 0 whenever the source and the target size allow it.

Every option 5fish/SVT-AV1 v2.3.261005 accepts, grouped by purpose; aliases share a row. Many defaults are “auto”: they are resolved at startup from --lineart-psy-bias, --texture-psy-bias, CRF and preset, and the value in brackets is what you get with neither psy-bias set. The fork’s own Parameters.md has the full tables of what each psy-bias level switches on.

Input, output and application (17 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.
--output, -bnoneOutput IVF file; - or stdout writes to a pipe.
--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.
--skip0Skip this many frames at the start of the input.
--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.
--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 (12 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 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.
--fps60Integer frame rate for raw input, 1–240; Y4M headers override it. Use --fps-num/--fps-denom for fractional rates.
--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 (8 options)
OptionDefaultDescription
--preset4Speed/efficiency trade-off, −3–13; lower is slower. Upstream recommends 2 for best quality and 4–6 for speed, and advises against 0. Above 11 runs as 11 (10 for 4K and larger random-access encodes), 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.
--pin0 (off)Pin the encoder to the first N logical cores; 0 disables pinning.
--ss-1 (any)CPU socket to run on: −1 any, 0 or 1 a specific socket of a two-socket system.
--fast-decode0Decoder-speed optimizations, 0–2 (2 decodes fastest) at a small efficiency cost. Try it before tiles.
--tune0 (VQ)0 VQ, 1 PSNR, 2 SSIM, 3 Subjective SSIM, 4 Still Picture (all-intra images).
--hbd-mds0 (preset)Precision of mode decision for 10-bit input: 0 preset default, 1 10-bit, 2 hybrid 8/10-bit, 3 8-bit.
Rate control and passes (21 options)
OptionDefaultDescription
--rc0Rate-control mode: 0 CRF (or CQP with --aq-mode 0), 1 VBR, 2 CBR, both with --tbr.
--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. Equivalent to --rc 0 --aq-mode 2 --qp N on a finer scale.
--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-qp1Lowest QP rate control may use in VBR/CBR, 1–63; CRF always uses 1.
--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).
--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: 0 off, 1 key frames and oversized frames, 2 key/alt-ref/golden frames, 3 all frames, 4 preset-based.
--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.
--enable-tpl-la1Temporal dependency (TPL) model. The library forces it on for CRF/CQP, so 0 only matters in VBR/CBR.
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-minauto (8; 9 with texture psy-bias ≥3)Lowest (steepest) luma QM level, 0–15; 15 is flat.
--qm-max15Highest (flattest) luma QM level, 0–15.
--roi-map-filenoneRegion-of-interest file giving per-block QP offsets for chosen frames.
--chroma-qm-minauto (10; 11 with lineart psy-bias ≥3)Lowest chroma QM level, 0–15.
--chroma-qm-max15Highest chroma QM level, 0–15.
GOP structure and keyframes (10 options)
OptionDefaultDescription
--keyint-2 (257 frames)Maximum keyframe interval in frames: −2 is 257 frames, −1 no periodic keyframes (CRF with --scd 0), 0 no periodic keyframes (CRF).
--min-keyint-1 (33 frames)Minimum distance between scene-change keyframes: −1 is 33 frames (129 with --balancing-q-bias 1), 0 no minimum.
--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.
--scd1Scene-change detection: insert keyframes at scene cuts (0 or 1).
--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.
--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.
--enable-dg1Dynamic mini-GOP: adapt the hierarchical structure to the content.
Filters and coding tools (16 options)
OptionDefaultDescription
--auto-tiling0Choose tile rows and columns from the resolution to speed up decoding, when they are not set manually.
--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-overlays0Insert overlay frames after filtered alt-refs as extra references. Not supported with low delay or multi-pass.
--scmauto (2; 0 with psy-bias)Screen-content tools (palette, intra block copy): 0 off, 1 on, 2 detect per frame. Defaults to 0 when --lineart-psy-bias or --texture-psy-bias is 1 or more.
--rmv0Restrict motion vectors so they never point outside the picture.
--max-32-tx-size0Limit transforms to 32×32 (0 or 1); can help detail at high-fidelity CRFs.
--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.
--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.
--filtering-noise-detection0 (tune default)Noise detection that turns CDEF and restoration off on noisy frames: 0 tune default (on for tunes 0 and 3), 1 on, 2 off, 3 CDEF only, 4 restoration only.
--alt-tf-decay0Apply tune 0/3’s alt-ref temporal-filter decay to any tune.
Super-resolution, resizing and switch frames (13 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.
--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.
--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.
--static-fgs-seed0 (off)Fixed random seed for grain synthesis: 0 off, −2 built-in seed, 1–65535 custom. With --photon-noise or --fgs-table this gives static noise.
--adaptive-film-grain0Choose the grain-estimation block size from the resolution, which reduces visible repeating grain patterns.
--chroma-grain1Apply synthesized grain to the chroma planes too.
Colour and HDR metadata (11 options)
OptionDefaultDescription
--color-help—Print the colour-metadata reference (primaries, transfer and matrix names, mastering-display syntax) and exit.
--enable-hdr0Accepted (0 or 1) but read by nothing else in this release; HDR metadata comes from --mastering-display and --content-light.
--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 (18 options)
OptionDefaultDescription
--enable-variance-boostauto (1; 0 with psy-bias)Variance Boost (0 or 1): lower QP in low-contrast superblocks. Off by default when --lineart-psy-bias or --texture-psy-bias is 1 or more.
--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.
--enable-alt-curve0Alternative Variance Boost curve with different boost trade-offs.
--sharpness2Bias RD decisions toward block sharpness, −14–14.
--qp-scale-compress-strengthauto (1.0; 0 with balancing-q-bias)Compress 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. Defaults to 0 when --balancing-q-bias is on, which psy-bias turns on.
--frame-luma-bias0Spend more bits on dark frames: lowers frame QP based on average luma, strength 0–100.
--luminance-qp-bias0Alias of --frame-luma-bias; if both are given, the larger value wins.
--noise-norm-strengthauto (1)Noise normalization, 0–4: boosts some AC coefficients so fine texture survives in otherwise flat areas. Auto is 1; 4 with --texture-psy-bias 5+; 0 with --lineart-psy-bias 5+ and texture below 4.
--ac-biasauto (1.0)Psychovisual RD bias toward keeping high-frequency energy, 0.0–8.0. Auto is 1.0; 1.5 in high-fidelity mode with texture psy-bias 1–4; 2.5 with texture psy-bias 5+.
--texture-ac-biasauto (follows --ac-bias)--ac-bias strength in low-variance (texture) regions, 0.0–64.0. Auto follows --ac-bias, or 2.5–6.0 with --texture-psy-bias 4+.
--lineart-energy-biasauto (1.0)Prefer more energy than the source in high-variance (lineart) regions, 0.667–1.5. Auto is 1.0, 0.98 in high-quality mode; upstream suggests trying 0.98.
--texture-energy-biasauto (1.0)Prefer more energy than the source in low-variance regions, 0.667–1.5. Auto is 1.0, or 1.02–1.10 with --texture-psy-bias 3+.
--satd-biasauto (0.0)Add SATD to the distortion measure, 0.0–16.0; upstream suggests trying 0.5.
--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. Psy-bias 3+ is meant to replace it.
--low-q-taper0Taper Variance Boost so that boosted blocks do not reach extremely low q (below q 11).
--sharp-tx1Sharp transform optimizations: cleaner detail with a slightly higher risk of artifacts; pair with --ac-bias.
--alt-ssim-tuning0Tunes 2 and 4: add VQ optimizations and an alternative SSIM calculation.
Psy-bias controls (20 options)
OptionDefaultDescription
--noise-level-thr-1 (auto)Noise level above which noise-sensitive features switch off: −1 encoder default, −2 print each frame’s noise level, a positive value sets the threshold.
--lineart-psy-biasoffLineart retention for 2D content, 0–7; higher is more aggressive. Set it together with --texture-psy-bias: if only one is given, the other becomes min(value, 2). Upstream starting points: 3 for small encodes, 5 for high quality, 6–7 for weak lineart. −2 tests the variance threshold.
--texture-psy-biasoffTexture and noise retention, 0–7. Upstream starting points: 3 for small encodes, 4 for high quality, 5–7 for heavy texture or noise; 3 or lower for sources with little texture.
--noise-psy-biasauto (0)Noise retention, 0–7. Auto is 0, or 2, 4 and 6 with --texture-psy-bias 5, 6 and 7 (4 in high-fidelity mode).
--lineart-variance-thr5.5Variance threshold on a log2 scale, 0.0–16.0, above which detail counts as lineart for --lineart-psy-bias.
--texture-variance-thr5.5Variance threshold on a log2 scale, 0.0–16.0, below which detail counts as texture for --texture-psy-bias.
--psy-bias-mds0-sadauto (0)Use SAD in the first mode-decision stage; auto on with lineart psy-bias 2+ or texture 3+.
--psy-bias-disable-warped-motionauto (0)Disable warped motion; auto on with lineart psy-bias 3+.
--psy-bias-disable-me-8x8auto (0)Disable 8×8 motion estimation and 8×8 temporal-filter prediction; auto on with lineart psy-bias 3+ outside high-fidelity mode.
--psy-bias-disable-sgrprojauto (0)Disable the self-guided restoration filter; auto on with lineart psy-bias 4+.
--psy-bias-coeff-lvl-offsetauto (0)Offset the encoder’s coefficient-level classification, −3–3; auto 2 with texture psy-bias 5+.
--psy-bias-mds0-intra-inter-mode-biasauto (0)Favour intra modes in base layers and inter modes in higher layers; auto on with noise psy-bias 4+.
--psy-bias-inter-mode-biasauto (0)Bias against intra modes in non-base layers, 0–5; auto 1 with lineart or texture psy-bias 3+ or noise psy-bias 1+.
--psy-bias-qm-biasauto (0)Use higher QM levels in higher temporal layers; auto on with psy-bias 2+.
--psy-bias-sharpness-roundingauto (64; 48 for tune 3)Quantization rounding offset, 1–256.
--psy-bias-optimize-bauto (0)Slow full-distortion quantization optimization: 0 off, 1 optimize end-of-block then the normal pass, 2 replace the normal pass (EOB and coefficients), 4 EOB only, −2 normal pass off. Auto 1 with psy-bias at presets ≤4.
--texture-psy-bias-optimize-bauto (follows --psy-bias-optimize-b)The same choices for low-variance regions; auto 4 with texture psy-bias 3+ or 2 with lineart 4+, at presets ≤4.
--psy-bias-dgauto (1)Psychovisual dynamic mini-GOP decisions (0 or 1); forced on while --balancing-mg-dist-q-bias is active, as it is by default. −2 prints mini-GOP distances.
--high-quality-encode-psy-biasauto (0)High-quality mode for several features; auto on when a psy-bias is set and CRF ≤24.
--high-fidelity-encode-psy-biasauto (0)High-fidelity mode (implies high-quality mode); auto on when a psy-bias is set and CRF ≤16.
Balancing (TPL) controls (8 options)
OptionDefaultDescription
--balancing-q-biasauto (0; 1 with psy-bias)Bias TPL at frame and superblock level toward detail retention (0 or 1).
--balancing-r0-dampening-layerauto (1)Dampen TPL r0 boosting in temporal layers at or above hierarchical levels plus this value, −5–1 (1 off). Auto −2 with balancing-q-bias, −3 with texture psy-bias 5+ or noise psy-bias 3+.
--balancing-mg-dist-q-bias3Strengthen balancing-q-bias by mini-GOP distortion; the value is a log2 exponent, 0.0–8.0, and −2 disables it. Also forces --psy-bias-dg 1 and --enable-dg 1.
--balancing-noise-level-q-bias1Strengthen balancing-q-bias by frame noise level; log2 exponent 0.0–8.0, −2 disables. Setting this and --balancing-mg-dist-q-bias both to −2 restores the older balancing behaviour.
--balancing-luminance-q-biasauto (0; 4.0 with balancing-q-bias)Boost dark superblocks, 0.0–25.0; auto 4.0 (6.0 with lineart psy-bias 5+) when balancing-q-bias is on.
--balancing-luminance-lambda-biasauto (0.0)Bias the mode-decision lambda in dark superblocks, 0.0–0.999.
--balancing-texture-lambda-biasauto (0.0)Bias the mode-decision lambda in low-variance regions, 0.0–0.999; upstream suggests trying 0.5.
--balancing-tpl-intra-mode-beta-biasauto (0)Boost superblocks whose TPL search prefers intra prediction; auto on with noise psy-bias 1+. Needs balancing-q-bias.
Deblocking and CDEF bias (12 options)
OptionDefaultDescription
--dlf-bias0 (1 with psy-bias)Alternative deblocking search with its own AC bias and strength limits (--dlf-bias-max-dlf, --dlf-bias-min-dlf); psy-bias 1+ turns it on.
--dlf-sharpnessauto (1)Deblocking sharpness, 0–7, also usable without --dlf-bias; auto 7 with lineart psy-bias 5+ and texture below 4.
--dlf-bias-max-dlfauto (8,2)Maximum deblocking strength as luma,chroma (each 0–63) for --dlf-bias; auto rises with --texture-psy-bias 4+ above CRF 28.
--dlf-bias-min-dlfauto (2,0)Minimum deblocking strength as luma,chroma; strength 0 is not tried when the minimum is above 0.
--cdef-bias0 (1 with psy-bias)Alternative CDEF search (signalling fix, SAD/MSE distortion, strength taper) limited by the CDEF-bias strength options; psy-bias 1+ turns it on.
--cdef-bias-max-cdefauto (4,1,2,0)Maximum CDEF strengths as Y primary,Y secondary,UV primary,UV secondary; primary 0–15, secondary 0, 1, 2 or 4.
--cdef-bias-min-cdefauto (0,0,0,0)Minimum CDEF strengths in the same order; strength 0 is always tried.
--cdef-bias-max-sec-cdef-rel0Cap each block’s secondary CDEF strength at its primary strength plus this value, −12–4.
--texture-cdef-bias-max-cdefauto (follows --cdef-bias-max-cdef)Maximum CDEF strengths in low-variance regions; 1,0,0,0 in high-fidelity mode.
--texture-cdef-bias-min-cdefauto (follows --cdef-bias-min-cdef)Minimum CDEF strengths in low-variance regions.
--texture-cdef-bias-max-sec-cdef-rel0--cdef-bias-max-sec-cdef-rel for low-variance regions.
--cdef-bias-damping-offset0Offset the CDEF damping that is normally derived from each frame’s q-index, −4–8.