{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/tools/software-encoders/vvenc",
  "collection": "docs",
  "title": "VVenC",
  "description": "VVenC is Fraunhofer HHI's open-source H.266 / VVC encoder: fast, multithreaded and available as vvencapp, vvencFFapp and FFmpeg's libvvenc.",
  "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/tools/software-encoders/vvenc.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/tools/software-encoders/vvenc.md",
  "status": "current",
  "tags": [
    "migrated"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "VVenC v1.14.0 README",
      "url": "https://github.com/fraunhoferhhi/vvenc/blob/v1.14.0/README.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVenC usage wiki",
      "url": "https://github.com/fraunhoferhhi/vvenc/wiki/Usage",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVenC presets",
      "url": "https://github.com/fraunhoferhhi/vvenc/wiki/Presets",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVenC FFmpeg integration",
      "url": "https://github.com/fraunhoferhhi/vvenc/wiki/FFmpeg-Integration",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVenC encoder performance",
      "url": "https://github.com/fraunhoferhhi/vvenc/wiki/Encoder-Performance",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVenC v1.14.0 application options",
      "url": "https://github.com/fraunhoferhhi/vvenc/blob/v1.14.0/source/Lib/apputils/VVEncAppCfg.h",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "FFmpeg 9.0.2 libvvenc wrapper",
      "url": "https://github.com/FFmpeg/FFmpeg/blob/n9.0.2/libavcodec/libvvenc.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "FFmpeg 9.0.2 changelog (VVC decoder, VAAPI/QSV)",
      "url": "https://github.com/FFmpeg/FFmpeg/blob/n9.0.2/Changelog",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "VVdeC repository",
      "url": "https://github.com/fraunhoferhhi/vvdec",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "provenance": {
    "originUrl": "https://github.com/av1-community-contributors/codec-wiki/blob/37c3317fd058b23c71a87679bed5619a98f77752/docs/encoders/VVenC.mdx",
    "originCommit": "37c3317fd058b23c71a87679bed5619a98f77752",
    "migratedAt": "2026-08-21T00:00:00.000Z",
    "modified": true,
    "originPath": "docs/encoders/VVenC.mdx"
  },
  "headings": [
    {
      "depth": 2,
      "text": "Pick an interface",
      "anchor": "pick-an-interface"
    },
    {
      "depth": 2,
      "text": "Get it",
      "anchor": "get-it"
    },
    {
      "depth": 2,
      "text": "Starting commands",
      "anchor": "starting-commands"
    },
    {
      "depth": 2,
      "text": "Presets",
      "anchor": "presets"
    },
    {
      "depth": 2,
      "text": "Rate control",
      "anchor": "rate-control"
    },
    {
      "depth": 2,
      "text": "Options that matter",
      "anchor": "options-that-matter"
    },
    {
      "depth": 2,
      "text": "Mux and play",
      "anchor": "mux-and-play"
    },
    {
      "depth": 2,
      "text": "Full option reference",
      "anchor": "full-option-reference"
    },
    {
      "depth": 2,
      "text": "Complete simple-application parameter reference",
      "anchor": "complete-simple-application-parameter-reference"
    },
    {
      "depth": 2,
      "text": "Complete expert/configuration parameter reference",
      "anchor": "complete-expertconfiguration-parameter-reference"
    },
    {
      "depth": 2,
      "text": "Complete FFmpeg libvvenc private options",
      "anchor": "complete-ffmpeg-libvvenc-private-options"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/_preamble.md",
      "checksum": "00ed5008fc91ccba0334c6cd83fff5df19ac89d5991072e397da302f375e2891",
      "bytes": 933
    },
    {
      "id": "pick-an-interface",
      "title": "Pick an interface",
      "depth": 2,
      "anchor": "pick-an-interface",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#pick-an-interface",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/pick-an-interface.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/pick-an-interface.md",
      "checksum": "9d2373588290dd507907a934c9de6fcfbf6658c37e5fb75759d0d67947ca4930",
      "bytes": 1295
    },
    {
      "id": "get-it",
      "title": "Get it",
      "depth": 2,
      "anchor": "get-it",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#get-it",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/get-it.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/get-it.md",
      "checksum": "5b08f6a1760ed8feeb5f56ac8b3960d9dce591a7cbd1604381df3e160d4fb64d",
      "bytes": 598
    },
    {
      "id": "starting-commands",
      "title": "Starting commands",
      "depth": 2,
      "anchor": "starting-commands",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#starting-commands",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/starting-commands.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/starting-commands.md",
      "checksum": "1d9dcc0b0507f629fa4f78b49752a85ca142f15d118ef52adc81d5717f20f4e5",
      "bytes": 1239
    },
    {
      "id": "presets",
      "title": "Presets",
      "depth": 2,
      "anchor": "presets",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#presets",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/presets.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/presets.md",
      "checksum": "492a7bd430977e65de2a6e6ca3477bc36a70cce03d6fbceaa2f1c0ac6a25d464",
      "bytes": 508
    },
    {
      "id": "rate-control",
      "title": "Rate control",
      "depth": 2,
      "anchor": "rate-control",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#rate-control",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/rate-control.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/rate-control.md",
      "checksum": "1b45540522c61d707808d80626efd3ef2d7979ea8f89c908116798b7f9ccb23b",
      "bytes": 919
    },
    {
      "id": "options-that-matter",
      "title": "Options that matter",
      "depth": 2,
      "anchor": "options-that-matter",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#options-that-matter",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/options-that-matter.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/options-that-matter.md",
      "checksum": "08140b6632eca1a1fbf0c8f8601e077f148418d27f1cbb27a1aad085c95a622e",
      "bytes": 2218
    },
    {
      "id": "mux-and-play",
      "title": "Mux and play",
      "depth": 2,
      "anchor": "mux-and-play",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#mux-and-play",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/mux-and-play.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/mux-and-play.md",
      "checksum": "92ef19bdd2b71ed2763c0b4d4fea3e2e7823156b5c3fff38fd65d1cffdae29c1",
      "bytes": 908
    },
    {
      "id": "full-option-reference",
      "title": "Full option reference",
      "depth": 2,
      "anchor": "full-option-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#full-option-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/full-option-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/full-option-reference.md",
      "checksum": "ae8bbceb9ec9dd60a33b2cb1360c40b87be297b234ed273ceefb034c82f9c561",
      "bytes": 154
    },
    {
      "id": "complete-simple-application-parameter-reference",
      "title": "Complete simple-application parameter reference",
      "depth": 2,
      "anchor": "complete-simple-application-parameter-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#complete-simple-application-parameter-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-simple-application-parameter-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-simple-application-parameter-reference.md",
      "checksum": "2a5029182ec6b943ba94491ab26c2f8285112c17a8816f0fbc2797636f35571c",
      "bytes": 8015
    },
    {
      "id": "complete-expertconfiguration-parameter-reference",
      "title": "Complete expert/configuration parameter reference",
      "depth": 2,
      "anchor": "complete-expertconfiguration-parameter-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#complete-expertconfiguration-parameter-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-expertconfiguration-parameter-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-expertconfiguration-parameter-reference.md",
      "checksum": "b0d7db242f898bd190b69f137ecbc3a7ab6284482ec063007d75f51cba904953",
      "bytes": 35940
    },
    {
      "id": "complete-ffmpeg-libvvenc-private-options",
      "title": "Complete FFmpeg libvvenc private options",
      "depth": 2,
      "anchor": "complete-ffmpeg-libvvenc-private-options",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/vvenc/#complete-ffmpeg-libvvenc-private-options",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-ffmpeg-libvvenc-private-options.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/vvenc/complete-ffmpeg-libvvenc-private-options.md",
      "checksum": "223cc4d816e06591c0f2923b852de9b1528f8940928d21afc811512c4ca7fdad",
      "bytes": 1762
    }
  ],
  "outboundReferences": [
    "#mux-and-play",
    "/codecs/video/vvc/",
    "/reference/metrics/xpsnr/",
    "/tools/software-encoders/uvg266/",
    "/tools/software-encoders/vtm/",
    "/tools/utilities/ffmpeg/",
    "/tools/utilities/mp4box/",
    "https://github.com/fraunhoferhhi/vvdec",
    "https://github.com/fraunhoferhhi/vvenc",
    "https://github.com/fraunhoferhhi/vvenc/releases/tag/v1.14.0",
    "https://github.com/fraunhoferhhi/vvenc/wiki/FFmpeg-Integration"
  ],
  "checksum": "162061754b5ef18e971e543bd97a4292b6c2b17f136a186d34ccb3f361073ce8",
  "contentFormat": "markdown",
  "markdown": "> **Repository:** [fraunhoferhhi/vvenc](https://github.com/fraunhoferhhi/vvenc). VVenC, the Fraunhofer Versatile Video Encoder. Latest release: [v1.14.0](https://github.com/fraunhoferhhi/vvenc/releases/tag/v1.14.0), Jan 21, 2026. Last commit: Oct 2, 2026. License: BSD-3-Clause-Clear. Stars: 1,214.\n\nVVenC is the Fraunhofer HHI encoder for [H.266 / VVC](/codecs/video/vvc/) and the practical choice for encoding VVC: it is hundreds of times faster than the [VTM](/tools/software-encoders/vtm/) reference encoder with compression close to it (Fraunhofer measures `medium` with 8 threads at about 280× VTM's speed on HD and 380× on UHD test sequences), scales across many threads, and has a perceptual mode (QPA, based on [XPSNR](/reference/metrics/xpsnr/)). The current release is **v1.14.0** (January 2026), under the BSD-3-Clause-Clear license. Its decoder counterpart is [VVdeC](https://github.com/fraunhoferhhi/vvdec) (v3.2.1).\n\n## Pick an interface\n\n| Interface         | Use it for                                                                                                                                                                                                          |\n| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `vvencapp`        | The simple command-line encoder. Reads Y4M or raw YUV. This is what most people want.                                                                                                                               |\n| `vvencFFapp`      | The \"expert\" encoder with VTM-style config files and every tuning option. It is built with the project but not installed by default (`install-ffapp=1` with the Makefile, or `-DVVENC_INSTALL_FULLFEATURE_APP=ON`). |\n| FFmpeg `libvvenc` | Encoding straight from any source FFmpeg can read, and muxing to MP4 in one step. Needs FFmpeg 7.1 or newer built with `--enable-libvvenc`; the wrapper only accepts `yuv420p10le`, so output is always 10-bit.     |\n\nThe two standalone apps write a raw VVC stream (`.266`). See [muxing](#mux-and-play) below.\n\n## Get it\n\nThere are no official binaries; build from source with CMake or use a package (`brew install vvenc` on macOS, `vvenc` and `vvenc-git` in the Arch AUR).\n\n```sh\ngit clone --branch v1.14.0 https://github.com/fraunhoferhhi/vvenc.git\ncmake -S vvenc -B vvenc/build -DCMAKE_BUILD_TYPE=Release\ncmake --build vvenc/build --parallel\n```\n\nThe executables land in `vvenc/bin/release-static/`. For FFmpeg, install VVenC where pkg-config finds it, then configure FFmpeg with `--enable-libvvenc`; the [VVenC wiki](https://github.com/fraunhoferhhi/vvenc/wiki/FFmpeg-Integration) has per-platform steps.\n\n## Starting commands\n\nWith `vvencapp` (constant QP, perceptual QPA on by default):\n\n```sh\nvvencapp -i input.y4m --preset medium --qp 32 -o output.266\n```\n\nWith FFmpeg:\n\n```sh\nffmpeg -i input.mkv -c:v libvvenc -preset medium -qp 32 output.mp4\n```\n\nPiping from FFmpeg into `vvencapp`:\n\n```sh\nffmpeg -i input.mkv -f yuv4mpegpipe - | vvencapp -i - --y4m --preset medium -o output.266\n```\n\nFor 10-bit sources use `-pix_fmt yuv420p10le -strict -1` in the FFmpeg command (FFmpeg refuses to write 10-bit Y4M without it) and keep `--internal-bitdepth 10`, the default. Raw YUV input has no header, so give `-s 1920x1080 --fps 24` (and `--format yuv420_10` for 10-bit); Y4M carries all of that itself.\n\nWith the expert encoder, using the shipped config files:\n\n```sh\nvvencFFapp -c cfg/randomaccess_medium.cfg -i input.y4m -t -1 -q 32 --PerceptQPA=1 -b output.266\n```\n\nUnlike `vvencapp`, the expert app leaves perceptual QP adaptation off unless you set `--PerceptQPA=1`, and runs single-threaded unless you pass `-t` (`-1` picks the thread count from the resolution). Don't add the shipped `cfg/sequence.cfg` as is: it forces level 4.1 and 600 frames. Here `-b` is the bitstream and `-o` is the reconstructed YUV, the opposite of `vvencapp`'s `-o`.\n\n## Presets\n\n`--preset` takes `faster`, `fast`, `medium`, `slow` or `slower`, and defaults to `medium`. Slower presets enable more coding tools and a deeper search for better compression. Fraunhofer recommends `medium` as the speed/efficiency trade-off; `faster` is for when speed matters most and `slower` gives the best compression. There is also `medium_lowDecEnergy`, a `medium` variant tuned for lower decoding energy. Set the preset first on expert command lines, because presets reset groups of tools.\n\n## Rate control\n\n- **Constant QP** (`--qp`, 0–63, default 32): the default. Fraunhofer reports good results between QP 21 and 47. Lower is higher quality. QPA varies the QP per block by perceptual activity, so the picture-level QP is only a base.\n- **Capped quality** (`-q 27 -m 5M`): constant QP with a maximum bitrate for peaks.\n- **Bitrate** (`-b 2M`, optionally `-m 5M`): rate control, two-pass by default (`-p 2`; `-p 1` for single pass). The max rate should be at least 1.5× the target. To run the passes separately, use `--pass 1` and `--pass 2` with the same `--rcstatsfile stats.json` and identical other options.\n\nIn `vvencapp` bitrates are in **bits per second** (`1500k`, `2M`), so a bare `-b 2000` is 2 kbit/s, unlike x264 and x265's native kbit/s. Rate control needs the correct frame rate. Setting a bitrate switches to rate control, which derives the QP itself, so `--qp` no longer controls quality.\n\n## Options that matter\n\n| Option                 | Default       | Notes                                                                                                                              |\n| ---------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------- |\n| `--preset`             | `medium`      | Speed/efficiency trade-off, see above.                                                                                             |\n| `-q`, `--qp`           | `32`          | Quantizer, 0–63. FFmpeg: `-qp`.                                                                                                    |\n| `--qpa`                | on            | Perceptual QP adaptation. Turn off only when you are scoring with PSNR. FFmpeg: `-qpa 0`.                                          |\n| `-b`, `-m`, `-p`       | off, off, `2` | Bitrate, max bitrate, passes. FFmpeg: `-b:v`, `-maxrate`, `-pass`.                                                                 |\n| `-rs`, `--refreshsec`  | `1`           | Intra refresh period in seconds, using CRA pictures. Raise it for files that don't need frequent random access. FFmpeg: `-period`. |\n| `-rt`, `--refreshtype` | `cra`         | `idr` for closed GOPs (FFmpeg: `-flags +cgop`), `cra_cre` for chunked adaptive-streaming output.                                   |\n| `-t`, `--threads`      | by resolution | 4 below 720p, 8 up to 5K, 12 above. VVenC scales well to many cores.                                                               |\n| `--internal-bitdepth`  | `10`          | Coded bit depth. Streams are Main 10 (`--profile` accepts `auto`, `main_10` and `main_10_still_picture`).                          |\n| `--sdr`, `--hdr`       | off           | Writes colour signalling (VUI) for BT.709/BT.2020 SDR, PQ or HLG. Without one of these the stream has no colour tags.              |\n| `--additional`         |               | Expert options as colon-separated `name=value` pairs, e.g. `--additional \"MCTF=0:BIM=0\"` to turn off the temporal pre-filter.      |\n\nIn FFmpeg, anything else goes through `-vvenc-params \"name=value:name=value\"`.\n\n## Mux and play\n\nRaw `.266` files play in few things. Put the stream in MP4 (`ffmpeg -framerate 24 -i output.266 -c copy output.mp4`, or MP4Box) and decode with FFmpeg or VVdeC. FFmpeg cannot mux a raw `.266` straight into Matroska (\"unknown timestamp\") and MKVToolNix does not read raw VVC, so mux to MP4 first.\n\n- FFmpeg has a native VVC decoder: experimental in 7.0, normal from **7.1**. Hardware decoding exists through Intel QSV (7.1) and VAAPI (8.0). Otherwise decoding is in software.\n- VVdeC (`vvdecapp`) is Fraunhofer's software decoder, which also has a WebAssembly build for browsers.\n- VVC remains far less widely supported than HEVC or AV1 on TVs, phones and in browsers. Check your target device before encoding an archive in it.\n\nRelated: [uvg266](/tools/software-encoders/uvg266/), [VTM](/tools/software-encoders/vtm/), [FFmpeg](/tools/utilities/ffmpeg/), [MP4Box](/tools/utilities/mp4box/).\n\n## Full option reference\n\nEvery option of the VVenC 1.14.0 command-line encoders and of FFmpeg's `libvvenc` wrapper. The sections above cover normal use.\n\n## Complete simple-application parameter reference\n\nThe `vvencapp` options, with the value used when an option is not given. Names are lower case. Expert options from the next section can be added with `--additional`, e.g. `--additional \"MCTF=0:BIM=0\"`.\n\n<details>\n<summary>General Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-h`, `--help` | `0` | Print the short option list. |\n| `--fullhelp` | `0` | Print every option with its default. |\n| `-v`, `--verbosity` | `info` | Log level: `silent`, `error`, `warning`, `info`, `notice`, `verbose`, `details`, or `0`–`6`. |\n| `--stats` | `1` | Print encoding speed, bitrate and an estimate of the remaining time while encoding; `0` hides them. |\n| `--version` | `0` | Print the version and exit. |\n| `--additional` | none | Expert options as `Name=value` pairs separated by `:`, e.g. `MCTF=0:BIM=0`. Any `vvencFFapp` option name works; parsed after all other options. |\n\n</details>\n\n<details>\n<summary>Input Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-i`, `--input` | none | Input file: raw YUV, or Y4M (detected by the `.y4m` extension or `--y4m`). `-` reads stdin. |\n| `-s`, `--size` | `1920x1080` | Raw input size as `WIDTHxHEIGHT`. Y4M input carries its own size. |\n| `-c`, `--format` | `yuv420` | Raw input format: `yuv420`, `yuv420_10`, `yuv420_10_packed`, `yuv400` (`gray`), `yuv400_10` (`gray10`). |\n| `-r`, `--framerate` | `60` | Frame-rate numerator, e.g. `24`, `30000`. Y4M input carries its own rate. |\n| `--framescale` | `1` | Frame-rate denominator, e.g. `1001` for 30000/1001. |\n| `--fps` | `60/1` | Frame rate as an integer or fraction (`24`, `24000/1001`); sets the numerator and denominator together. |\n| `--tickspersec` | `27000000` | Clock rate for the generated decode timestamps, 1–27000000; `-1` uses one tick per frame. |\n| `-f`, `--frames` | `0` | Number of frames to encode; `0` encodes the whole input. |\n| `-fs`, `--frameskip` | `0` | Skip this many frames at the start of the input. |\n| `--segment` | `off` | Position of this chunk when a video is encoded in separately encoded segments that are concatenated afterwards: `first`, `mid`, `last`. Not available with rate control or `--maxrate`. |\n| `--y4m` | `0` | Force Y4M parsing. Needed when piping Y4M through stdin; `.y4m` files are detected by extension. |\n| `--logofile` | none | JSON file describing a logo image (raw YUV, position, opacity) to overlay on every input frame. |\n\n</details>\n\n<details>\n<summary>Output Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-o`, `--output` | none | Output file: raw VVC Annex B bitstream (`.266`). |\n\n</details>\n\n<details>\n<summary>Encoder Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--preset` | `medium` | `faster`, `fast`, `medium`, `slow`, `slower`, or `medium_lowDecEnergy` (medium with tools that cost the decoder less energy). Slower presets enable more tools and search. |\n| `-b`, `--bitrate` | `0` | Target bitrate in bits/s (`1500k`, `2M`, `2Mbps`); a bare number is bits/s. `0` encodes at constant QP. A bitrate enables rate control, two-pass unless `--passes 1`. |\n| `-m`, `--maxrate` | `0` | Approximate maximum instantaneous bitrate in bits/s, or a multiple of the target such as `1.5x`. Without `--bitrate` it caps a constant-QP encode. `0` means no cap. |\n| `-p`, `--passes` | `-1` (auto) | Rate-control passes, `1` or `2`. `-1` uses two passes when a bitrate is set, otherwise one. |\n| `--pass` | `-1` | Run only pass `1` or `2` of a two-pass encode, storing statistics in `--rcstatsfile`; `-1` runs both passes in one call. |\n| `--rcstatsfile` | none | Rate-control statistics file (JSON) shared by separate `--pass 1` and `--pass 2` runs. |\n| `-q`, `--qp` | `-1` (auto: 32, or set by rate control) | Base quantizer, 0–63; lower is higher quality. `-1` means 32 at constant QP; with a bitrate, rate control picks it. |\n| `--qpa` | `on` | Perceptual QP adaptation based on an XPSNR model: varies the QP per block. Turn off (`0`) only when you are measuring PSNR. |\n| `-t`, `--threads` | `-1` (auto) | Worker threads. `-1` uses 4 when the shorter picture side is below 720, 8 below 2880 and 12 above, capped at the CPU count. `0` runs single-threaded. |\n| `--mtprofile` | `auto` | Picks tiles, WPP and IFP for the thread count: `auto`, `0` off, or `1`–`3` for increasing parallelism. `auto` uses `0` unless `--threads` exceeds the default for the resolution. |\n| `-rt`, `--refreshtype` | `cra` | Random-access point type: `cra` (open GOP), `idr` (closed GOP), `cra_cre` (CRA with constrained RASL pictures, for segment switching), `idr_no_radl` (IDR without leading pictures, for DASH), `rpsei` (recovery point SEI), `none`. |\n| `-rs`, `--refreshsec` | `1` | Random-access (intra) period in seconds; rounded to a multiple of 8 frames. Used when `--intraperiod` is 0. |\n| `-ip`, `--intraperiod` | `0` | Intra period in frames; best as a multiple of the GOP size (32). `0` uses `--refreshsec`. |\n| `--internal-bitdepth` | `10` | Coded bit depth, `8` or `10`. HDR modes need 10. |\n| `--ifp` | `auto` | Inter-frame parallelism: a frame starts coding before its reference frames are finished, staying two CTU lines behind them. `auto` follows `--mtprofile`. |\n| `--tiles` | `-1x-1` | Tile columns×rows, e.g. `2x2`. `-1x-1` lets `--mtprofile` decide (2x2 or 2x1 for HD when enabled). |\n| `-aud`, `--accessunitdelimiter` | `auto` | Write access unit delimiter NAL units: `auto` (only when another option needs them), `0`, `1`. |\n| `-vui`, `--vuiparameterspresent` | `auto` | Write VUI: `auto` (when colour, range or aspect information is set), `0`, `1`. |\n| `-hrd`, `--hrdparameterspresent` | `1` | Write HRD (hypothetical reference decoder) parameters; needed for buffering-period and picture-timing SEI. |\n| `-dph`, `--decodedpicturehash` | `off` | Decoded picture hash SEI for conformance checks: `off`/`0`, `md5`/`1`, `crc`/`2`, `checksum`/`3`. |\n\n</details>\n\n<details>\n<summary>Profile, Level, Tier</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--profile` | `auto` | `auto`, `main_10` or `main_10_still_picture` (the parser also takes the 4:4:4 and multilayer names). `auto` picks Main 10, or Main 10 Still Picture for a single frame. |\n| `--level` | `auto` | Level limit: `auto`, `1.0`, `2.0`, `2.1`, `3.0`, `3.1`, `4.0`, `4.1`, `5.0`, `5.1`, `5.2`, `6.0`–`6.3`, `15.5`. `auto` picks the lowest level that fits size, frame rate and bitrate. |\n| `--tier` | `main` | `main` or `high`. High tier allows higher bitrates at the same level. |\n\n</details>\n\n<details>\n<summary>HDR/SDR and Color Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--sdr` | `off` | Write SDR colour signalling (no pixel conversion): `sdr`/`sdr_709` (BT.709), `sdr_2020` (BT.2020), `sdr_470bg` (BT.470BG), or `off`. |\n| `--hdr` | `off` | Set HDR mode and colour signalling (no pixel conversion): `pq`/`hdr10` and `pq_2020`/`hdr10_2020` (PQ, BT.709 or BT.2020 primaries), `hlg` and `hlg_2020` (HLG, with an alternative transfer characteristics SEI). Also tunes chroma QP for HDR. Needs 10-bit. |\n| `--range` | `unknown` | Signal sample range: `limited` (`mpeg`, `tv`, `0`) or `full` (`jpeg`, `pc`, `1`). Setting it turns on VUI colour description. |\n\n</details>\n\n<details>\n<summary>Tracing</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--tracechannellist` | `0` | List the trace channels. Tracing works only in builds configured with `VVENC_ENABLE_TRACING=ON`. |\n| `--tracerule` | none | Debug: trace rule, e.g. `\"D_CABAC:poc==8\"`. Needs a tracing build. |\n| `--tracefile` | none | Debug: trace output file. Needs a tracing build. |\n\n</details>\n\n<details>\n<summary>Film grain analysis</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--fga` | `0` | Experimental film-grain analysis: estimates the source grain and writes a film grain characteristics (FGC) SEI so decoders that support it can re-synthesize grain. |\n\n</details>\n\n## Complete expert/configuration parameter reference\n\nThe `vvencFFapp` options. Names are case-insensitive and work on the command line (`--Name=value`) and in config files (`Name : value` lines, loaded with `-c`). The defaults are the library's built-in configuration: the `medium` preset's coding tools, but with QPA off, single-threaded, and no default input size or frame rate, so they differ from `vvencapp`. `-1` and `auto` values are resolved from other settings when the encoder starts.\n\n<details>\n<summary>General Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-h`, `--help` | `0` | Print the short option list. |\n| `--fullhelp` | `0` | Print every option with its default. |\n| `-v`, `--Verbosity` | `verbose` | Log level: `silent`, `error`, `warning`, `info`, `notice`, `verbose`, `details`, or `0`–`6`. |\n| `--stats` | `1` | Print encoding speed, bitrate and an estimate of the remaining time while encoding; `0` hides them. |\n| `--version` | `0` | Print the version and exit. |\n| `--additional` | none | Expert options as `Name=value` pairs separated by `:`, e.g. `MCTF=0:BIM=0`. Any `vvencFFapp` option name works; parsed after all other options. |\n| `-c` | none | Read a configuration file (`Name : value` lines). Repeat to layer files; later values win. |\n| `--WriteConfig` | none | Write the parsed configuration to this file (before `-1`/`auto` values are resolved). |\n| `-w`, `--WarnUnknowParameter` | `0` | Warn about unknown options instead of stopping. (The option name is spelled this way.) |\n| `--SIMD` | none | Force a SIMD level: `SCALAR`, `SSE41`, `SSE42`, `AVX`, `AVX2`, `AVX512` on x86 (`NEON` on Arm). Empty uses the best available. |\n\n</details>\n\n<details>\n<summary>Input Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-i`, `--InputFile` | none | Input file: raw YUV, or Y4M (detected by the `.y4m` extension or `--y4m`). `-` reads stdin. |\n| `-s`, `--Size` | `0x0` | Raw input size as `WIDTHxHEIGHT`; same as `SourceWidth` and `SourceHeight`. Required for raw YUV. |\n| `--InputBitDepth` | `8` | Bit depth of the raw input file, 8 or 10. |\n| `-f`, `--FramesToBeEncoded` | `0` | Number of frames to encode; `0` encodes the whole input. |\n| `-fr`, `--FrameRate` | `0` | Frame-rate numerator, e.g. `24`, `30000`. Required for raw YUV. |\n| `--FrameScale` | `1` | Frame-rate denominator, e.g. `1001` for 30000/1001. |\n| `--fps` | `0/1` | Frame rate as an integer or fraction (`24`, `24000/1001`); sets the numerator and denominator together. |\n| `--TicksPerSecond` | `27000000` | Clock rate for the generated decode timestamps, 1–27000000; `-1` uses one tick per frame. |\n| `--LeadFrames` | `0` | Frames read before the first encoded frame, for encoding a video in overlapping chunks. Up to 64. |\n| `--TrailFrames` | `0` | Frames read after the last encoded frame, for encoding in overlapping chunks. Up to 6. |\n| `-fs`, `--FrameSkip` | `0` | Skip this many frames at the start of the input. |\n| `--segment` | `off` | Position of this chunk when a video is encoded in separately encoded segments that are concatenated afterwards: `first`, `mid`, `last`. Not available with rate control or `--maxrate`. |\n| `--y4m` | `0` | Force Y4M parsing. Needed when piping Y4M through stdin; `.y4m` files are detected by extension. |\n| `--logofile` | none | JSON file describing a logo image (raw YUV, position, opacity) to overlay on every input frame. |\n| `--SourceWidth` | `0` | Input picture width in pixels. |\n| `--SourceHeight` | `0` | Input picture height in pixels. |\n| `--ConformanceWindowMode` | `1` | `0` none, `1` pad automatically to the minimum coding size and crop on decode, `2` use `HorizontalPadding`/`VerticalPadding`, `3` use the `ConfWin*` offsets. |\n| `--ConfWinLeft` | `0` | Left crop offset in pixels for `ConformanceWindowMode=3`. |\n| `--ConfWinRight` | `0` | Right crop offset for `ConformanceWindowMode=3`. |\n| `--ConfWinTop` | `0` | Top crop offset for `ConformanceWindowMode=3`. |\n| `--ConfWinBottom` | `0` | Bottom crop offset for `ConformanceWindowMode=3`. |\n| `--HorizontalPadding` | `0` | Pixels of padding added to the right for `ConformanceWindowMode=2`. |\n| `--VerticalPadding` | `0` | Pixels of padding added at the bottom for `ConformanceWindowMode=2`. |\n| `--InputChromaFormat` | `420` | Chroma format of the raw input: `400`, `420`, `422`, `444`. The encoder codes 4:0:0 and 4:2:0 only. |\n| `--PackedInput` | `0` | Read 10-bit input packed as 4 samples in 5 bytes. |\n| `--MaxPicSize` | `0x0` | Maximum picture size `WIDTHxHEIGHT` signalled for resolution changes (RPR); needs RPR enabled. |\n| `--MaxPicWidth` | `0` | Maximum picture width for resolution changes. |\n| `--MaxPicHeight` | `0` | Maximum picture height for resolution changes. |\n| `--HorCollocatedChroma` | `1` | Signal horizontal chroma siting for reference picture resampling: `1` co-sited with luma, `0` shifted by half a luma sample. |\n| `--VerCollocatedChroma` | `0` | Signal vertical chroma siting for CCLM and resampling: `0` shifted by half a luma sample (MPEG-2 style 4:2:0), `1` co-sited. HDR and BT.2020 modes set `1`. |\n| `--ClipInputVideoToRec709Range` | `0` | Clip input samples to the nominal Rec. 709 range when reducing bit depth on input. |\n\n</details>\n\n<details>\n<summary>Output options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-b`, `--BitstreamFile` | none | Output bitstream file (`.266`). |\n| `-o`, `--ReconFile` | none | Write the reconstructed (decoded) video as raw YUV. Note that `-o` is this, not the bitstream. |\n| `--OutputBitDepth` | `0` | Bit depth of the reconstructed YUV file; `0` uses the internal bit depth. |\n\n</details>\n\n<details>\n<summary>Threading, performance</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-t`, `--Threads` | `0` (single-threaded) | Worker threads. `0` (the expert-app default) runs single-threaded; `-1` uses 4 when the shorter picture side is below 720, 8 below 2880 and 12 above, capped at the CPU count. |\n| `--MTProfile` | `off` | Picks tiles, WPP and IFP for the thread count: `auto`, `0` off, or `1`–`3` for increasing parallelism. |\n| `--preset` | `medium` | `faster`, `fast`, `medium`, `slow`, `slower`, `medium_lowDecEnergy`. Applies a group of tool settings, so put it before options that should override it. The built-in defaults are `medium`. |\n| `--Tiles` | `-1x-1` | Tile columns×rows, e.g. `2x2`; `-1x-1` lets `MTProfile` decide. |\n| `--MaxParallelFrames` | `-1` | Frames encoded in parallel; `-1` uses up to 4 with threading, `0` off. Rate control allows at most 4. |\n| `--WppBitEqual` | `-1` | WPP-style CTU-line context handling for threaded encoding: `0` off (sequential), `1` copy contexts from the line above, `2` reset per line. `-1` picks `1` with threads; threading requires it. |\n| `--EnablePicPartitioning` | `0` | Allow multiple tiles/slices. Turned on automatically when tiles are set. |\n| `--TileColumnWidthArray` | none | Explicit tile column widths in CTUs, comma-separated; the last value repeats. |\n| `--TileRowHeightArray` | none | Explicit tile row heights in CTUs, comma-separated; the last value repeats. |\n| `--TileParallelCtuEnc` | `1` | Search CTUs in different tiles in parallel. |\n| `--FppLinesSynchro` | `-1` | Deprecated name for `IFPLines`. |\n| `--IFPLines` | `-1` | IFP sync offset in CTU lines; `-1` uses 2. |\n| `--IFP` | `auto` | Inter-frame parallelism: a frame starts coding before its reference frames are finished, staying `IFPLines` CTU lines behind them. `auto` follows `MTProfile`. Incompatible with `ALFTempPred`. |\n| `--NumParallelGOPs` | `0` | Additional GOPs encoded in parallel. Needs threads, parallel frames and IFP. |\n\n</details>\n\n<details>\n<summary>Slice decision options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-ip`, `--IntraPeriod` | `0` | Intra period in frames; best as a multiple of `GOPSize`. `0` uses `RefreshSec`; `1` encodes all-intra. |\n| `-rs`, `--RefreshSec` | `1` | Random-access (intra) period in seconds; rounded to a multiple of 8 frames. Used when `IntraPeriod` is 0. |\n| `-dr`, `--DecodingRefreshType` | `cra` | Random-access point type: `cra` (open GOP), `idr` (closed GOP), `cra_cre`, `idr_no_radl` (for DASH), `rpsei`, `none`. |\n| `-g`, `--GOPSize` | `32` | GOP (hierarchy) size. Built-in GOPs exist for 32 and 16 (random access), 8 (low delay, needs `PicReordering=0`) and 1 (all-intra); others need `Frame1`… entries. |\n| `--PicReordering` | `1` | Allow out-of-order (B-pyramid) coding. `0` for low delay. |\n| `--POC0IDR` | `0` | Code the first picture as IDR. Required for all-intra and low delay (set automatically for all-intra). |\n\n</details>\n\n<details>\n<summary>Rate control, Perceptual Quantization</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--NumPasses` | `-1` | Rate-control passes, `1` or `2`. `-1` uses two when a bitrate is set, otherwise one. |\n| `--Passes` | `-1` | Same as `NumPasses`. |\n| `--Pass` | `-1` | Run only pass `1` or `2` of a two-pass encode with `RCStatsFile`; `-1` runs both. |\n| `--LookAhead` | `-1` | Pre-analysis look-ahead for single-pass rate control: `-1` auto (on for one-pass RC), `0`, `1`. Not used with two passes or constant QP. |\n| `--RCStatsFile` | none | Rate-control statistics file (JSON) for separate `Pass=1` and `Pass=2` runs. |\n| `--TargetBitrate` | `0` | Target bitrate in bits/s (`1500k`, `2M`); `0` encodes at constant QP. |\n| `--MaxBitrate` | `0` | Approximate maximum instantaneous bitrate in bits/s, or a multiple of the target (`1.5x`). Without a target bitrate it caps a constant-QP encode. |\n| `-qpa`, `--PerceptQPA` | `0` | Perceptual QP adaptation (XPSNR model). Off in the expert app unless set, e.g. by `cfg/qpa.cfg`; `vvencapp` turns it on by default. |\n| `--STA` | `-1` | Slice type adaptation: insert intra pictures at scene cuts. `-1` auto (on for GOP size above 8), `0` off, `1` adapt slice type, `2` also adapt the NAL unit type. |\n| `--MinIntraDistance` | `-1` | With STA, minimum distance in frames from the previous intra picture. `-1` uses the GOP size. |\n| `--RCInitialQP` | `0` | Rate control: base QP for the first pass. `0` lets the encoder estimate it from the bitrate. |\n| `--PerceptQPATempFiltIPic` | `-1` | Temporal high-pass filtering in the QPA activity of key pictures: `0` off, `1` on, `2` also reduce temporal pumping, `3`/`4` = `1`/`2` without the forced second-order filter. `-1` auto (`2` for two-pass RC, otherwise `1`; off without QPA or MCTF). |\n\n</details>\n\n<details>\n<summary>Quantization parameters</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-q`, `--QP` | `32` | Base quantizer, 0–63; lower is higher quality. |\n| `--SameCQPTablesForAllChroma` | `1` | Use one chroma QP mapping table for Cb, Cr and joint Cb-Cr. PQ mode turns this off. |\n| `--IntraQPOffset` | `-3` | QP offset for intra pictures relative to the base QP. |\n| `--LambdaFromQpEnable` | `1` | Derive lambda directly from the QP (then `IntraQPOffset` is used for intra pictures). |\n| `--LambdaModifier` | `1x1x1x1x1x1x1` | Lambda multipliers for temporal layers 0–6, `x`-separated. |\n| `--LambdaModifierI` | none | Lambda multipliers for intra pictures per temporal layer, comma-separated; empty uses `LambdaModifier`. |\n| `--IQPFactor` | `-1` | Intra QP factor for the lambda calculation; negative derives it from the GOP size. |\n| `--QpInValCb` | `17,22,34,42` | Input QPs of the Cb chroma QP mapping table (piecewise-linear points). |\n| `--QpInValCr` | none | Input QPs of the Cr mapping table; empty reuses Cb when `SameCQPTablesForAllChroma=1`. |\n| `--QpInValCbCr` | none | Input QPs of the joint Cb-Cr mapping table. |\n| `--QpOutValCb` | `17,23,35,39` | Output QPs of the Cb chroma QP mapping table. |\n| `--QpOutValCr` | none | Output QPs of the Cr mapping table. |\n| `--QpOutValCbCr` | none | Output QPs of the joint Cb-Cr mapping table. |\n| `--MaxCuDQPSubdiv` | `-1` | Finest CU subdivision that can carry a luma QP delta. `-1` auto: `2` with QPA at QP ≤ 42 when the shorter side is at most 1280, otherwise `0`. |\n| `--MaxCuChromaQpOffsetSubdiv` | `-1` | Finest CU subdivision for chroma QP offsets; negative disables CU chroma QP offsets. |\n| `--CbQpOffset` | `0` | Cb QP offset. |\n| `--CrQpOffset` | `0` | Cr QP offset. |\n| `--CbQpOffsetDualTree` | `0` | Cb QP offset for dual-tree intra slices. |\n| `--CrQpOffsetDualTree` | `0` | Cr QP offset for dual-tree intra slices. |\n| `--CbCrQpOffset` | `-1` | QP offset for joint Cb-Cr coding, −12 to 12. |\n| `--CbCrQpOffsetDualTree` | `0` | Joint Cb-Cr QP offset for dual-tree intra slices. |\n| `--SliceChromaQPOffsetPeriodicity` | `-1` | Apply the slice-level chroma QP offsets periodically: `0` off, `1` on. `-1` auto (on with QPA). |\n| `--SliceCbQpOffsetIntraOrPeriodic` | `0` | Slice-level Cb QP offset for intra or periodic slices. |\n| `--SliceCrQpOffsetIntraOrPeriodic` | `0` | Slice-level Cr QP offset for intra or periodic slices. |\n| `--LumaLevelToDeltaQPMode` | `0` | Luma-level-dependent QP: `0` off, `1` from the CTU average luma. |\n| `--GOPQPA` | `auto` | GOP-level QP cascade. `-1` auto: on when QPA is off; cannot be combined with QPA. |\n\n</details>\n\n<details>\n<summary>Profile, Level, Tier</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--Profile` | `auto` | `auto`, `main_10` or `main_10_still_picture` (the parser also takes the 4:4:4 and multilayer names). `auto` picks Main 10, or Main 10 Still Picture for a single frame. |\n| `--Level` | `auto` | Level limit: `auto`, `1.0`, `2.0`, `2.1`, `3.0`, `3.1`, `4.0`, `4.1`, `5.0`, `5.1`, `5.2`, `6.0`–`6.3`, `15.5`. `auto` picks the lowest level that fits size, frame rate and bitrate. |\n| `--Tier` | `main` | `main` or `high`. High tier allows higher bitrates at the same level. |\n| `--SubProfile` | `0` | Value written as sub-profile IDC. |\n| `--MaxBitDepthConstraint` | `10` | Bit-depth constraint for profile signalling; `0` derives it. |\n| `--IntraConstraintFlag` | `0` | Set `general_intra_constraint_flag` (intra-only stream). |\n\n</details>\n\n<details>\n<summary>HDR/SDR and Color Options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--Sdr` | `off` | Write SDR colour signalling (no pixel conversion): `sdr`/`sdr_709`, `sdr_2020`, `sdr_470bg`, or `off`. |\n| `--Hdr` | `off` | HDR mode and colour signalling (no pixel conversion): `pq`/`hdr10`, `pq_2020`/`hdr10_2020`, `hlg`, `hlg_2020`. Also tunes chroma QP. Setting mastering-display or content-light-level data turns on PQ. |\n\n</details>\n\n<details>\n<summary>SEI and auxiliary options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-dph`, `--SEIDecodedPictureHash` | `off` | Decoded picture hash SEI: `off`/`0`, `md5`/`1`, `crc`/`2`, `checksum`/`3`. |\n| `--SEIBufferingPeriod` | `0` | Write buffering-period SEI. Needs rate control and HRD parameters. |\n| `--SEIPictureTiming` | `0` | Write picture-timing SEI. Needs rate control and HRD parameters. |\n| `--SEIDecodingUnitInfo` | `0` | Write decoding-unit information SEI. |\n| `--MasteringDisplayColourVolume` | none | Mastering display SEI (SMPTE ST 2086): `Gx,Gy,Bx,By,Rx,Ry,WPx,WPy,Lmax,Lmin`, chromaticities in 1/50000, luminance in 1/10000 cd/m². P3-D65 1000 nits: `13250,34500,7500,3000,34000,16000,15635,16450,10000000,1`. |\n| `--MaxContentLightLevel` | none | Content light level SEI as `MaxCLL,MaxFALL` in cd/m², e.g. `1000,400`. |\n| `--PreferredTransferCharacteristics` | `auto` | Alternative transfer characteristics SEI value (same names as `TransferCharacteristics`). `auto` writes `arib-std-b67` in HLG modes. |\n| `-aud`, `--AccessUnitDelimiter` | `auto` | Write access unit delimiter NAL units: `auto` (only when another option needs them), `0`, `1`. |\n| `-hrd`, `--HrdParametersPresent` | `1` | Write HRD parameters; needed for buffering-period and picture-timing SEI. |\n| `--EnableDecodingParameterSet` | `0` | Write a decoding capability information NAL unit. |\n\n</details>\n\n<details>\n<summary>VUI options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-vui`, `--VuiParametersPresent` | `auto` | Write VUI: `auto` (when colour, range or aspect information is set), `0`, `1`. |\n| `--AspectRatioInfoPresent` | `0` | Write `aspect_ratio_idc` in the VUI. |\n| `--AspectRatioIdc` | `1` | Sample aspect ratio code: `1` = 1:1, `14` = 4:3, `15` = 3:2, `16` = 2:1, `255` = use `SarWidth`/`SarHeight`; other codes per H.273. |\n| `--Sar` | `0x0` | Sample aspect ratio as `WIDTHxHEIGHT`. |\n| `--SarWidth` | `0` | Horizontal part of the sample aspect ratio. |\n| `--SarHeight` | `0` | Vertical part of the sample aspect ratio. |\n| `--ColourDescriptionPresent` | `0` | Write colour primaries, transfer and matrix in the VUI. Set automatically by `Sdr`, `Hdr` and `Range`. |\n| `--ColourPrimaries` | `unknown` | Colour primaries: `bt709`, `unknown`, `bt470bg`, `smpte170m`, `bt2020`, `smpte432` (P3-D65) and other H.273 names or numbers 0–12. |\n| `--TransferCharacteristics` | `unknown` | Transfer function: `bt709`, `unknown`, `smpte2084` (PQ), `arib-std-b67` (HLG), `bt2020-10`, `iec61966-2-1` (sRGB) and other H.273 names or numbers 0–18. |\n| `--MatrixCoefficients` | `unknown` | YCbCr matrix: `bt709`, `unknown`, `bt470bg`, `smpte170m`, `bt2020nc`, `bt2020c`, `ictcp`, `gbr` and other H.273 names or numbers 0–14. |\n| `--ChromaLocInfoPresent` | `auto` | Write chroma sample location in the VUI: `auto`, `0`, `1`. |\n| `--ChromaSampleLocType` | `-1` | Chroma sample location type 0–5; `-1` derives it from the chroma siting flags. |\n| `--OverscanInfoPresent` | `0` | Write overscan information in the VUI. |\n| `--OverscanAppropriate` | `0` | Signal that the picture is suitable for overscan display. |\n| `--VideoFullRange` | `unknown` | Same as `Range`. |\n| `--Range` | `unknown` | Signal sample range: `limited` (`mpeg`, `tv`, `0`) or `full` (`jpeg`, `pc`, `1`); turns on the VUI colour description. |\n\n</details>\n\n<details>\n<summary>Quality reporting metrics</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--MSEBasedSequencePSNR` | `0` | Also report sequence PSNR computed from the average MSE, not only the average of frame PSNRs. |\n| `--PrintHexPSNR` | `0` | Also print per-frame PSNR in hexadecimal (bit-exact comparisons). |\n| `--PrintFrameMSE` | `0` | Print per-frame MSE. |\n| `--PrintSequenceMSE` | `0` | Print sequence MSE. |\n\n</details>\n\n<details>\n<summary>Bitstream options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--CabacZeroWordPaddingEnabled` | `1` | Add CABAC zero words where the standard requires them for conformance. |\n\n</details>\n\n<details>\n<summary>Coding structure parameters</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--ReWriteParamSets` | `1` | Repeat the parameter sets before every random-access point, so decoding can start there. |\n| `--IDRRefParamList` | `0` | Write reference picture list syntax in IDR slice headers. |\n\n</details>\n\n<details>\n<summary>Misc. options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `-cf`, `--ChromaFormatIDC` | `0` | Coded chroma format, `400` or `420`; `0` uses the input format. |\n| `--UseIdentityTableForNon420Chroma` | `1` | Use identity chroma QP tables for 4:2:2/4:4:4. |\n| `--InputBitDepthC` | `0` | Chroma input bit depth; `0` uses `InputBitDepth`. |\n| `--InternalBitDepth` | `10` | Coded bit depth, 8 or 10. HDR modes need 10. |\n| `--OutputBitDepthC` | `0` | Chroma bit depth of the reconstructed file; `0` uses `OutputBitDepth`. |\n| `--MSBExtendedBitDepth` | `0` | Luma bit depth after padding the input with zero MSBs; `0` uses `InputBitDepth`. |\n| `--MSBExtendedBitDepthC` | `0` | Chroma equivalent of `MSBExtendedBitDepth`. |\n| `--WaveFrontSynchro` | `auto` | Wavefront parallel processing (entropy coding sync): `auto` (follows `MTProfile`), `0`, `1`. |\n| `--EntryPointsPresent` | `1` | Write entry points for tiles/WPP substreams in slice headers. |\n| `--TreatAsSubPic` | `0` | Make the stream usable for subpicture merging; disables LMCS, ALF temporal prediction and joint Cb-Cr. |\n| `--ExplicitAPSid` | `0` | ALF adaptation parameter set ID to use. |\n| `--AddGOP32refPics` | `0` | GOP 32 with alternative QP offsets and reference pictures. |\n| `--NumRefPics` | `222221` | Reference pictures per list. `0` uses the GOP default, 1–9 applies to all temporal layers, longer numbers give one digit per layer (last digit = highest layer). Medium: `222221`. |\n| `--NumRefPicsSCC` | `0` | Reference pictures for screen content pictures, same format as `NumRefPics`; `-1` copies `NumRefPics`. |\n| `--ForceSCC` | `0` | Override screen content detection: `0` detect, `1` treat all frames as camera content, `2` weak SCC, `3` strong SCC. |\n\n</details>\n\n<details>\n<summary>Low-level QT-BTT partitioning options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--CTUSize` | `128` | CTU size: 32, 64 or 128. |\n| `--MinQTISlice` | `8` | Minimum quadtree leaf size for luma in intra slices. |\n| `--MinQTLumaISlice` | `8` | Same as `MinQTISlice`. |\n| `--MinQTNonISlice` | `8` | Minimum quadtree leaf size in inter slices. |\n| `--MinQTChromaISliceInChromaSamples` | `4` | Minimum quadtree leaf size for chroma in intra slices, in chroma samples. |\n| `--MaxMTTDepth` | `1` | Maximum binary/ternary split depth in inter slices; longer numbers give one digit per temporal layer. |\n| `--MaxMTTDepthI` | `2` | Maximum binary/ternary split depth for luma in intra slices. |\n| `--MaxMTTDepthISliceL` | `2` | Same as `MaxMTTDepthI`. |\n| `--MaxMTTDepthISliceC` | `-1` | Maximum binary/ternary split depth for chroma in intra slices; `-1` uses `MaxMTTDepthI`. |\n| `--MaxBTLumaISlice` | `32` | Largest block that may be binary-split, luma in intra slices. |\n| `--MaxBTChromaISlice` | `64` | Largest block that may be binary-split, chroma in intra slices. |\n| `--MaxBTNonISlice` | `128` | Largest block that may be binary-split in inter slices. |\n| `--MaxTTLumaISlice` | `32` | Largest block that may be ternary-split, luma in intra slices. |\n| `--MaxTTChromaISlice` | `32` | Largest block that may be ternary-split, chroma in intra slices. |\n| `--MaxTTNonISlice` | `64` | Largest block that may be ternary-split in inter slices. |\n| `--DualITree` | `1` | Separate luma and chroma partitioning trees in intra slices. |\n| `--Log2MaxTbSize` | `6` | Maximum transform size, log2 (6 = 64×64). |\n| `--Log2MinCodingBlockSize` | `2` | Minimum coding block size, log2. |\n\n</details>\n\n<details>\n<summary>Coding tools</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--CostMode` | `lossy` | RD cost mode: `lossy`, `sequence_level_lossless`, `lossless`, `mixed_lossless_lossy`. |\n| `--ASR` | `1` | Adaptive motion search range. |\n| `--HadamardME` | `1` | Use Hadamard (SATD) cost in fractional-pel motion estimation. |\n| `--FastHAD` | `0` | Sub-sampled Hadamard for square blocks of 32×32 and larger. |\n| `--RDOQ` | `1` | Rate-distortion optimized quantization. |\n| `--RDOQTS` | `1` | RDOQ for transform-skip blocks. |\n| `--SelectiveRDOQ` | `0` | Selective RDOQ: `0` never, `1` always, `2` for camera content only. |\n| `--JointCbCr` | `1` | Joint coding of chroma residuals (JCCR). |\n| `--CabacInitPresent` | `-1` | Choose CABAC initialisation tables per slice from the previous frame. `-1` auto (only single-threaded). |\n| `--LCTUFast` | `1` | Speed-ups for 128×128 CTUs. |\n| `--PBIntraFast` | `1` | Skip intra search when inter prediction is clearly better: `0` off, `1`–`2` faster. |\n| `--FastMrg` | `3` | Fast merge-mode decisions, `0`–`3`. |\n| `--AMaxBT` | `-1` | Adapt the maximum binary-tree size per picture. `-1` auto (only single-threaded). |\n| `--FastQtBtEnc` | `1` | Fast QTBT partition search. |\n| `--ContentBasedFastQtbt` | `1` | Skip partition tests based on the block content. |\n| `--FEN` | `3` | Fast inter search mode, `0`–`3`. |\n| `--ECU` | `0` | Early CU termination: `0` off, `1` limited to some block sizes and layers, `2` unconstrained. |\n| `--FDM` | `1` | Fast merge RD decision. |\n| `--DisableIntraInInter` | `0` | Disallow intra CUs in inter slices. |\n| `--FastUDIUseMPMEnabled` | `1` | Fast intra direction search using the most probable modes. |\n| `--FastMEForGenBLowDelayEnabled` | `1` | Fast motion estimation for low-delay B slices. |\n| `--MTSImplicit` | `1` | Implicit multiple transform selection when explicit MTS is off. |\n| `--TMVPMode` | `1` | Temporal motion vector prediction: `0` off, `1` all slices, `2` some slices. |\n| `--DepQuant` | `1` | Dependent quantization (trellis-coded quantization). Sign hiding is only used when it is off. |\n| `--QuantThrVal` | `-1` | Threshold for the dependent-quantization last-coefficient search; `-1` uses 8. |\n| `--SignHideFlag` | `0` | Sign data hiding. Only used without dependent quantization. |\n| `--MIP` | `1` | Matrix-based intra prediction. |\n| `--FastMIP` | `3` | Fast MIP search, `0`–`3`. |\n| `--MaxNumMergeCand` | `5` | Maximum merge candidates, 1–6. |\n| `--MaxNumAffineMergeCand` | `3` | Maximum affine merge candidates. |\n| `--Geo` | `4` | Geometric partitioning mode: `0` off, `1` on, `2`–`4` faster searches. |\n| `--MaxNumGeoCand` | `3` | Maximum geometric partitioning candidates. |\n| `--FastIntraTools` | `1` | Speed-ups for LFNST, ISP and MTS: `0` off, `1`, `2`. |\n| `--IntraEstDecBit` | `2` | Test only every 2^N-th intra direction in the first estimation pass. |\n| `--SMVD` | `3` | Symmetric MVD: `0` off, `1` full search, `2` fast, `3` faster. |\n| `--AMVR` | `5` | Adaptive motion vector resolution: `0` off, `1`–`7` speed settings. |\n| `--IMV` | `5` | Same as `AMVR` (VTM name). |\n| `--LMChroma` | `1` | Cross-component linear model (CCLM) chroma prediction. |\n| `--MRL` | `1` | Multiple reference lines for intra prediction. |\n| `--BDOF` | `1` | Bi-directional optical flow. |\n| `--BIO` | `1` | Same as `BDOF` (VTM name). |\n| `--DMVR` | `1` | Decoder-side motion vector refinement. |\n| `--EncDbOpt` | `2` | Account for deblocking in mode decisions: `0` off, `1` full, `2` fast. |\n| `--EDO` | `2` | Same as `EncDbOpt`. |\n| `--LMCSEnable` | `0` | Luma mapping with chroma scaling. Deprecated. |\n| `--LMCS` | `0` | Same as `LMCSEnable`. Deprecated. |\n| `--LMCSSignalType` | `0` | LMCS signal type: `0` SDR, `1` PQ, `2` HLG. Set by the HDR modes. |\n| `--LMCSUpdateCtrl` | `0` | LMCS model update: `0` random access, `1` all-intra, `2` low delay. |\n| `--LMCSAdpOption` | `0` | LMCS adaptation option, `0` automatic or `1`–`4`. |\n| `--LMCSInitialCW` | `0` | LMCS initial total codeword, 0–1023, when `LMCSAdpOption` > 0. |\n| `--LMCSOffset` | `6` | LMCS chroma residual scaling offset. |\n| `--ALF` | `1` | Adaptive loop filter. |\n| `--ALFSpeed` | `0` | Skip ALF on the highest N temporal layers; `0` filters all. |\n| `--CCALF` | `1` | Cross-component ALF. |\n| `--UseNonLinearAlfLuma` | `0` | Non-linear ALF for luma. |\n| `--UseNonLinearAlfChroma` | `0` | Non-linear ALF for chroma. |\n| `--MaxNumAlfAlternativesChroma` | `8` | Maximum alternative chroma ALF filters, 1–8. |\n| `--ALFTempPred` | `-1` | Reuse ALF parameters from earlier pictures. `-1` auto (off with IFP). |\n| `--ALFUnitSize` | `-1` | ALF search unit size; `-1` uses the CTU size. |\n| `--PROF` | `1` | Prediction refinement with optical flow for affine blocks. |\n| `--Affine` | `4` | Affine motion prediction: `0` off, `1`–`5` speed settings. |\n| `--AffineType` | `1` | Allow the 6-parameter affine model. |\n| `--MMVD` | `3` | Merge with motion vector difference: `0` off, `1`–`4` speed settings. |\n| `--MmvdDisNum` | `6` | Number of MMVD distance entries. |\n| `--AllowDisFracMMVD` | `1` | Allow disabling fractional MMVD distances per picture. |\n| `--MCTF` | `2` | Motion-compensated temporal pre-filter (denoising): `0` off, `1` all frames, `2` off for detected screen content. |\n| `--MCTFSpeed` | `2` | MCTF speed, `0` (best) to `4` (fastest). |\n| `--MCTFUnitSize` | `-1` | MCTF block size, 8–32; `-1` uses 8 below 720 lines and 16 otherwise. |\n| `--MCTFFutureReference` | `1` | Let MCTF use future frames. Turn off for low delay. |\n| `--MCTFFrame` | none | Frames (POCs within the GOP) that MCTF filters; empty derives them from the GOP size and QP. |\n| `--MCTFStrength` | none | Filter strength for each `MCTFFrame` entry; empty derives them from the QP. |\n| `--BIM` | `1` | Block importance mapping: adjusts block QPs by how much later frames reference them, using MCTF motion data. Needs MCTF. |\n| `--FastLocalDualTreeMode` | `1` | Fast intra coding for local dual trees: `0` off, `1` threshold, `2` one intra mode only. |\n| `--QtbttExtraFast` | `3` | Extra partitioning speed-ups not in VTM, `0`–`7`. |\n| `--FastTTSplit` | `5` | Fast ternary-split decisions, `0`–`7`. |\n| `--SbTMVP` | `1` | Subblock-based temporal motion vector prediction. |\n| `--CIIP` | `0` | Combined inter/intra prediction: `0` off, `1` full, `2` fast, `3` faster. |\n| `--SBT` | `0` | Subblock transform for inter blocks: `0` off, `1` full, `2` fast, `3` faster. |\n| `--LFNST` | `1` | Low-frequency non-separable transform. |\n| `--MTS` | `0` | Explicit multiple transform selection. |\n| `--MTSIntraMaxCand` | `3` | Additional MTS candidates tested in intra slices. |\n| `--ISP` | `3` | Intra subpartitions: `0` off, `1` full, `2` fast, `3` faster. |\n| `--TransformSkip` | `2` | Transform skip: `0` off, `1` on, `2` only for detected screen content. |\n| `--TransformSkipLog2MaxSize` | `4` | Largest transform-skip block, log2, 2–5. |\n| `--ChromaTS` | `0` | Transform skip for chroma (needs `TransformSkip`). |\n| `--BDPCM` | `2` | Block DPCM: `0` off, `1` on, `2` only for detected screen content. |\n| `--RPR` | `-1` | Reference picture resampling: `0` off, `1` on, `2` RPR-ready (for `cra_cre`/`idr_no_radl`). `-1` picks `2` for those refresh types, else `0`. |\n| `--IBC` | `2` | Intra block copy: `0` off, `1` on, `2` only for detected screen content. |\n| `--IBCFastMethod` | `3` | IBC speed-ups: `1` default, `2`–`6` faster. |\n| `--BCW` | `0` | Bi-prediction with CU-level weights: `0` off, `1` on, `2` fast. |\n| `--FastInferMerge` | `0` | Skip inter/intra modes after merge decisions: `0` off, `1`–`4` faster. |\n| `--NumIntraModesFullRD` | `-1` | Intra modes evaluated with full RD cost, 1–3; `-1` auto. |\n| `--ReduceIntraChromaModesFullRD` | `1` | Evaluate fewer chroma intra modes with full RD cost. |\n| `--FirstPassMode` | `0` | Speed of the first rate-control pass: `0` normal, `1` faster, `2` plus temporal downsampling, `3` plus spatial downsampling, `4` both. `3`/`4` fall back to `1`/`2` below 720 lines or with one pass. |\n\n</details>\n\n<details>\n<summary>Motion search options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--FastSearch` | `4` | Motion search: `0` full, `1` diamond, `3` enhanced diamond, `4` fast diamond. |\n| `--FastSearchSCC` | `2` | Motion search for screen content: `0` same as `FastSearch`, `2` diamond SCC, `3` fast diamond SCC. |\n| `-sr`, `--SearchRange` | `384` | Motion search range in luma samples. |\n| `--BipredSearchRange` | `4` | Search range for bi-prediction refinement. |\n| `--MinSearchWindow` | `96` | Minimum search window for adaptive search range. |\n| `--ClipForBiPredMEEnabled` | `0` | Clip samples during bi-prediction motion estimation. |\n| `--FastMEAssumingSmootherMVEnabled` | `1` | Fast motion estimation assuming a smooth motion field. |\n| `--IntegerET` | `0` | Early termination of integer-pel motion search. |\n| `--FastSubPel` | `1` | Sub-pel motion estimation: `0` normal, `1` fast, `2` disabled. |\n| `--ReduceFilterME` | `2` | Interpolation filter taps during sub-pel refinement: `0` 8-tap, `1` 6-tap, `2` 4-tap. |\n\n</details>\n\n<details>\n<summary>Loop filters (deblock and SAO)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--LoopFilterDisable` | `0` | Disable the deblocking filter. |\n| `--LoopFilterOffsetInPPS` | `1` | Signal deblocking offsets in the PPS instead of slice headers. |\n| `--LoopFilterBetaOffset_div2` | `0` | Luma deblocking β offset ÷ 2, −12 to 12; positive filters more, negative less. |\n| `--LoopFilterTcOffset_div2` | `0` | Luma deblocking tC offset ÷ 2, −12 to 12; positive filters more, negative less. |\n| `--LoopFilterCbBetaOffset_div2` | `0` | Cb deblocking β offset ÷ 2. |\n| `--LoopFilterCbTcOffset_div2` | `0` | Cb deblocking tC offset ÷ 2. |\n| `--LoopFilterCrBetaOffset_div2` | `0` | Cr deblocking β offset ÷ 2. |\n| `--LoopFilterCrTcOffset_div2` | `0` | Cr deblocking tC offset ÷ 2. |\n| `--DeblockLastTLayers` | `0` | Deblock only the highest N temporal layers; `0` deblocks all. |\n| `--DisableLoopFilterAcrossTiles` | `0` | Do not filter across tile boundaries. |\n| `--DisableLoopFilterAcrossSlices` | `0` | Do not filter across slice boundaries. |\n| `--SAO` | `1` | Sample adaptive offset: `0` off, `1` on, `2` only for screen content pictures. `--fullhelp` prints `0`, but the presets turn SAO on. |\n| `--SaoEncodingRate` | `-1` | Early SAO termination rate, 0–1; `-1` auto (0.75 single-threaded, 0 with threads). |\n| `--SaoEncodingRateChroma` | `-1` | Early SAO termination rate for chroma; `-1` auto (0.5 single-threaded, 0 with threads). |\n| `--SaoLumaOffsetBitShift` | `0` | Luma SAO offset bit shift; negative derives it from bit depth and QP. |\n| `--SaoChromaOffsetBitShift` | `0` | Chroma SAO offset bit shift; negative derives it from bit depth and QP. |\n\n</details>\n\n<details>\n<summary>Summary options (debugging)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--SummaryOutFilename` | none | Debug: write a summary file. |\n| `--SummaryPicFilenameBase` | none | Debug: base name for per-slice-type summary files (`I.txt`, `P.txt`, `B.txt` appended). |\n| `--SummaryVerboseness` | `0` | Debug: summary verbosity level. |\n\n</details>\n\n<details>\n<summary>Reconstructed video options</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--ClipOutputVideoToRec709Range` | `0` | Clip the reconstructed YUV to the nominal Rec. 709 range when reducing bit depth. |\n| `--PYUV` | `0` | Write the reconstructed 10/12-bit YUV packed (5 or 3 bytes per group). |\n\n</details>\n\n<details>\n<summary>Tracing</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--tracechannellist` | `0` | List the trace channels. Tracing works only in builds configured with `VVENC_ENABLE_TRACING=ON`. |\n| `--tracerule` | none | Debug: trace rule, e.g. `\"D_CABAC:poc==8\"`. Needs a tracing build. |\n| `--tracefile` | none | Debug: trace output file. Needs a tracing build. |\n\n</details>\n\n<details>\n<summary>Film grain analysis</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--fga` | `0` | Experimental film-grain analysis: estimates the source grain and writes a film grain characteristics (FGC) SEI so decoders that support it can re-synthesize grain. |\n\n</details>\n\n<details>\n<summary>Custom GOP entries (config files; not listed by --fullhelp)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--Frame1` … `--Frame64` | none | Custom GOP entry, one per picture of the GOP, given in a config file together with `GOPSize` (see `cfg/gop32.cfg`). Fields: type, POC, QP offset, QP offset model offset and scale, Cb/Cr QP offsets, QP factor, tC and β offsets, four Cb/Cr offset fields that VVenC reads but ignores, temporal ID, then active/total reference pictures and deltas for L0 and L1. Without entries the built-in GOP for `GOPSize` is used. |\n\n</details>\n\n<details>\n<summary>vvencapp names also accepted by vvencFFapp (not listed by --fullhelp)</summary>\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `--tickspersec` | `27000000` | Same as `--TicksPerSecond`. |\n| `--framerate` | `0` | Same as `FrameRate`. |\n| `--frames` | `0` | Same as `FramesToBeEncoded`. |\n| `--bitrate` | `0` | Same as `TargetBitrate`. |\n| `--maxrate` | `0` | Same as `MaxBitrate`. |\n| `--qpa` | `0` | Same as `PerceptQPA`. |\n| `--internal-bitdepth` | `10` | Same as `InternalBitDepth`. |\n| `--refreshtype` | `cra` | Same as `DecodingRefreshType`. |\n| `--decodedpicturehash` | `off` | Same as `SEIDecodedPictureHash`. |\n\n</details>\n\n## Complete FFmpeg libvvenc private options\n\nThe private options of the `libvvenc` wrapper in FFmpeg 9.0.2. The wrapper also uses FFmpeg's generic options: `-b:v` switches to rate control (single pass with look-ahead, or two passes with `-pass 1`/`-pass 2`), `-maxrate` caps the bitrate (also without `-b:v`), `-threads` sets the thread count, `-g 1` encodes all-intra (other `-g` values are ignored) and `-flags +cgop` uses IDR instead of CRA. `-color_trc smpte2084` selects PQ mode and `arib-std-b67` or `bt2020-10` selects HLG mode. Input must be `yuv420p10le`, and the wrapper always writes access unit delimiters.\n\n<details>\n<summary>All libvvenc private options</summary>\n\n| Option | Type | Default | Description |\n| --- | --- | --- | --- |\n| `-preset` | `int` | `2` (`medium`) | `faster` (0), `fast` (1), `medium` (2), `slow` (3) or `slower` (4). |\n| `-qp` | `int` | `32` | Base QP, −1 to 63, for constant-QP encoding; ignored when `-b:v` is set. |\n| `-qpa` | `boolean` | `true` | Perceptual QP adaptation; `-qpa 0` turns it off. |\n| `-passlogfile` | `string` | `unset` | Statistics file for two-pass encoding with `-pass 1` and `-pass 2`. Same option as `-stats`. |\n| `-stats` | `string` | `unset` | Same as `-passlogfile`. |\n| `-period` | `int` | `1` | Intra (random-access) period in seconds, 1 or more. Ignored with `-g 1`. |\n| `-vvenc-params` | `dictionary` | `unset` | Library options as `name=value` pairs separated by `:`, using the expert option names, e.g. `-vvenc-params \"MCTF=0:BIM=0\"`. `rcstatsfile`, `passes` and `pass` are rejected; use `-passlogfile` and `-pass`. |\n| `-level` | `string` | `unset` | Level such as `5.1`; unset chooses the level automatically. |\n| `-tier` | `int` | `0` (`main`) | `main` (0) or `high` (1). |\n\n</details>\n"
}
