{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/tools/software-encoders/x265",
  "collection": "docs",
  "title": "x265",
  "description": "x265 is MulticoreWare's open-source H.265 / HEVC encoder; this page covers presets, CRF, tunes, 10-bit and HDR, two-pass, and the psychovisual, SAO and rate-control options people adjust.",
  "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/tools/software-encoders/x265.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/tools/software-encoders/x265.md",
  "status": "current",
  "tags": [
    "migrated"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "x265 4.3 release notes",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/doc/reST/releasenotes.rst",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 4.3 command-line documentation",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/doc/reST/cli.rst",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 4.3 presets and tunes",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/doc/reST/presets.rst",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 4.3 CLI declarations",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/source/x265cli.h",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 4.3 parameter defaults, presets and tunes",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/source/common/param.cpp",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 4.3 encoder parameter fix-ups (effective selective-sao)",
      "url": "https://github.com/Multicorewareinc/x265/blob/4.3/source/encoder/encoder.cpp",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "x265 upstream repository",
      "url": "https://github.com/Multicorewareinc/x265",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "FFmpeg 9.0.2 libx265 wrapper",
      "url": "https://github.com/FFmpeg/FFmpeg/blob/n9.0.2/libavcodec/libx265.c",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "provenance": {
    "originUrl": "https://github.com/av1-community-contributors/codec-wiki/blob/37c3317fd058b23c71a87679bed5619a98f77752/docs/encoders/x265.mdx",
    "originCommit": "37c3317fd058b23c71a87679bed5619a98f77752",
    "migratedAt": "2026-08-21T00:00:00.000Z",
    "modified": true,
    "originPath": "docs/encoders/x265.mdx"
  },
  "headings": [
    {
      "depth": 2,
      "text": "Encode with x265",
      "anchor": "encode-with-x265"
    },
    {
      "depth": 2,
      "text": "Rate control",
      "anchor": "rate-control"
    },
    {
      "depth": 2,
      "text": "Presets and tunes",
      "anchor": "presets-and-tunes"
    },
    {
      "depth": 2,
      "text": "10-bit and HDR",
      "anchor": "10-bit-and-hdr"
    },
    {
      "depth": 2,
      "text": "Options worth adjusting",
      "anchor": "options-worth-adjusting"
    },
    {
      "depth": 3,
      "text": "Psychovisual and adaptive quantization",
      "anchor": "psychovisual-and-adaptive-quantization"
    },
    {
      "depth": 3,
      "text": "Loop filters",
      "anchor": "loop-filters"
    },
    {
      "depth": 3,
      "text": "Analysis and frame structure",
      "anchor": "analysis-and-frame-structure"
    },
    {
      "depth": 3,
      "text": "Threading",
      "anchor": "threading"
    },
    {
      "depth": 2,
      "text": "Lossless",
      "anchor": "lossless"
    },
    {
      "depth": 2,
      "text": "Complete standalone parameter reference",
      "anchor": "complete-standalone-parameter-reference"
    },
    {
      "depth": 2,
      "text": "Complete FFmpeg libx265 private options",
      "anchor": "complete-ffmpeg-libx265-private-options"
    },
    {
      "depth": 2,
      "text": "Related pages",
      "anchor": "related-pages"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/_preamble.md",
      "checksum": "ae9c710ecf3f7299b1e818a5d4fd74885238defde662c774802257742cc61d53",
      "bytes": 1240
    },
    {
      "id": "encode-with-x265",
      "title": "Encode with x265",
      "depth": 2,
      "anchor": "encode-with-x265",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#encode-with-x265",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/encode-with-x265.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/encode-with-x265.md",
      "checksum": "33e4ce491794bcf232370253ab70e240ff0e2a0f1294cc29ef16eac39cd60879",
      "bytes": 1079
    },
    {
      "id": "rate-control",
      "title": "Rate control",
      "depth": 2,
      "anchor": "rate-control",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#rate-control",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/rate-control.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/rate-control.md",
      "checksum": "2e73f5ecfe1015e953d87ec3f6af1ae076ccaf02ffa2347c13103470ee72b4c1",
      "bytes": 1096
    },
    {
      "id": "presets-and-tunes",
      "title": "Presets and tunes",
      "depth": 2,
      "anchor": "presets-and-tunes",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#presets-and-tunes",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/presets-and-tunes.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/presets-and-tunes.md",
      "checksum": "51928c08da60ac2775a07c271289ee01890a591373a265ca7fb7e86a8c593e6c",
      "bytes": 1929
    },
    {
      "id": "10-bit-and-hdr",
      "title": "10-bit and HDR",
      "depth": 2,
      "anchor": "10-bit-and-hdr",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#10-bit-and-hdr",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/10-bit-and-hdr.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/10-bit-and-hdr.md",
      "checksum": "6f09fd38b335939696083e8cf87506a5fd4892a29d3c99ed0e8905c3877c9d0d",
      "bytes": 1142
    },
    {
      "id": "options-worth-adjusting",
      "title": "Options worth adjusting",
      "depth": 2,
      "anchor": "options-worth-adjusting",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#options-worth-adjusting",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/options-worth-adjusting.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/options-worth-adjusting.md",
      "checksum": "39734eafece51e5abb97cf1a43ba94c2cf030f8b81828cddd6ad1e34ce274b4d",
      "bytes": 5825
    },
    {
      "id": "psychovisual-and-adaptive-quantization",
      "title": "Psychovisual and adaptive quantization",
      "depth": 3,
      "anchor": "psychovisual-and-adaptive-quantization",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#psychovisual-and-adaptive-quantization",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/psychovisual-and-adaptive-quantization.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/psychovisual-and-adaptive-quantization.md",
      "checksum": "69679b74d198025bad761e2215777ffc383a3cae23aa675465189728c3f03d67",
      "bytes": 1877
    },
    {
      "id": "loop-filters",
      "title": "Loop filters",
      "depth": 3,
      "anchor": "loop-filters",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#loop-filters",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/loop-filters.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/loop-filters.md",
      "checksum": "79aa92ddb8eb23b2c2ae934d154712d0c8665693e4eab002be72567ed2341ff9",
      "bytes": 921
    },
    {
      "id": "analysis-and-frame-structure",
      "title": "Analysis and frame structure",
      "depth": 3,
      "anchor": "analysis-and-frame-structure",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#analysis-and-frame-structure",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/analysis-and-frame-structure.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/analysis-and-frame-structure.md",
      "checksum": "e0718b0d54280e5b57de314df6e1cce7736e4a2717d6c115a5967f9f7afc154b",
      "bytes": 1754
    },
    {
      "id": "threading",
      "title": "Threading",
      "depth": 3,
      "anchor": "threading",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#threading",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/threading.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/threading.md",
      "checksum": "56c79c27cb6b0c80480c093e7162b06116278b3489b198a8098873aeb1d58a50",
      "bytes": 520
    },
    {
      "id": "lossless",
      "title": "Lossless",
      "depth": 2,
      "anchor": "lossless",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#lossless",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/lossless.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/lossless.md",
      "checksum": "7fbb79f821c93b1e8bab3532b58d5b9a947c490732810100278382ee12500ce2",
      "bytes": 326
    },
    {
      "id": "complete-standalone-parameter-reference",
      "title": "Complete standalone parameter reference",
      "depth": 2,
      "anchor": "complete-standalone-parameter-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#complete-standalone-parameter-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/complete-standalone-parameter-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/complete-standalone-parameter-reference.md",
      "checksum": "41d8478680b73e92fd5d4624b39d50c6fe309fd6d9d393a33fc2d0d2ad3a301f",
      "bytes": 37861
    },
    {
      "id": "complete-ffmpeg-libx265-private-options",
      "title": "Complete FFmpeg libx265 private options",
      "depth": 2,
      "anchor": "complete-ffmpeg-libx265-private-options",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#complete-ffmpeg-libx265-private-options",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/complete-ffmpeg-libx265-private-options.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/complete-ffmpeg-libx265-private-options.md",
      "checksum": "038b9d47bc678a029db5898afcc6e786f6e69e6ccea5c927ba0c9e7c3b6ed497",
      "bytes": 2511
    },
    {
      "id": "related-pages",
      "title": "Related pages",
      "depth": 2,
      "anchor": "related-pages",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/x265/#related-pages",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/related-pages.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/x265/related-pages.md",
      "checksum": "cd4f1c8b3c86939e86570d32ec16b219020c29d85cd703fb7a07e13a27a3a575",
      "bytes": 238
    }
  ],
  "outboundReferences": [
    "/codecs/video/ffv1/",
    "/codecs/video/hevc/",
    "/guides/compare-encoding-quality/",
    "/guides/preserve-color-and-hdr/",
    "/start-here/high-dynamic-range/",
    "/start-here/psychovisual/",
    "/tools/software-encoders/kvazaar/",
    "/tools/software-encoders/x264/",
    "/tools/utilities/av1an/",
    "/tools/utilities/ffmpeg/",
    "/tools/utilities/mkvtoolnix/",
    "/tools/utilities/mp4box/",
    "https://github.com/Multicorewareinc/x265",
    "https://github.com/Multicorewareinc/x265/blob/4.3/doc/reST/cli.rst",
    "https://github.com/Multicorewareinc/x265/releases",
    "https://github.com/Multicorewareinc/x265/releases/tag/4.3"
  ],
  "checksum": "3510eaa55ebe1846b81656c180cb92d89fa73fa5465a1c7ce0ab748db8e23362",
  "contentFormat": "markdown",
  "markdown": "> **Repository:** [Multicorewareinc/x265](https://github.com/Multicorewareinc/x265). Open Source H.265 / HEVC video encoder. Latest release: [4.3](https://github.com/Multicorewareinc/x265/releases/tag/4.3), Jul 31, 2026. Last commit: Oct 8, 2026. License: GPL-2.0. Stars: 60.\n\nx265 is an open-source encoder for [H.265 / HEVC](/codecs/video/hevc/) developed by MulticoreWare, available as a command-line program and as the `libx265` library used by FFmpeg, HandBrake and others. It is GPL-licensed, with a commercial licence also offered by MulticoreWare. x265 is actively developed: version 4.3 was released on 31 July 2026, and the [GitHub repository](https://github.com/Multicorewareinc/x265) is the main upstream.\n\nIts defaults are aimed at low-bitrate streaming: SAO, deblocking and AQ smooth the picture to hide artifacts. With a few changes (lower CRF, SAO limited or off, stronger psy-rdoq) it is also an excellent high-fidelity encoder, which is how most enthusiast encodes use it.\n\nMost FFmpeg builds include `libx265`. Source releases are tagged on [GitHub](https://github.com/Multicorewareinc/x265/releases); many distribution and third-party builds are \"multilib\" builds that include 8-, 10- and 12-bit encoding in one binary.\n\n## Encode with x265\n\n```sh\nx265 --preset slow --crf 20 --output-depth 10 -o output.hevc input.y4m\nffmpeg -i input.mkv -c:v libx265 -preset slow -crf 20 -pix_fmt yuv420p10le -c:a copy output.mkv\n```\n\nThe standalone program reads Y4M or raw YUV and writes a raw HEVC bitstream; mux it with [mkvmerge](/tools/utilities/mkvtoolnix/), [MP4Box](/tools/utilities/mp4box/) or FFmpeg. To feed it from FFmpeg, pipe Y4M. FFmpeg 9.0.2 still needs `-strict -1` to write more than 8 bits to Y4M:\n\n```sh\nffmpeg -i input.mkv -pix_fmt yuv420p10le -strict -1 -f yuv4mpegpipe - | x265 --input - --y4m --preset slow --crf 20 --output-depth 10 -o output.hevc\n```\n\nIn FFmpeg, `-preset`, `-tune`, `-crf`, `-profile:v`, `-g`, `-b:v`, `-maxrate`/`-bufsize` and `-pass` map to x265 settings. Everything else goes through `-x265-params` using the CLI's long option names without the dashes, separated by colons: `-x265-params aq-mode=3:no-sao=1:deblock=-1,-1`. For MP4 output, add `-tag:v hvc1`; Apple's players (QuickTime, Safari, iOS) require that sample entry and will not play FFmpeg's default `hev1`.\n\n## Rate control\n\n**CRF** is the mode to use unless you need a specific file size or bitrate. The default is 28, which targets small files. High-quality encodes usually sit somewhere around 16–22, and 4K sources tolerate higher values than 720p or 1080p. CRF values do not carry over from x264 or other encoders, and the preset changes the size you get at a given CRF.\n\n**Two-pass** hits a target size. Unlike x264, x265 runs the first pass with the full settings by default (`--slow-firstpass`), because the second pass is better when the passes match:\n\n```sh\nx265 --preset slow --output-depth 10 --pass 1 --bitrate 4000 -o /dev/null input.y4m\nx265 --preset slow --output-depth 10 --pass 2 --bitrate 4000 -o output.hevc input.y4m\n```\n\nWith FFmpeg, use `-b:v 4M -pass 1 -an -f null /dev/null`, then `-b:v 4M -pass 2` with your real output.\n\n**VBV** caps the peak bitrate for streaming or device limits: `--vbv-maxrate` in kbit/s and `--vbv-bufsize` in kbit (`-maxrate`/`-bufsize` in FFmpeg). With CRF this gives \"capped CRF\". `--crf-max` with VBV can cause buffer underflows, as the help warns.\n\n## Presets and tunes\n\nPresets run `ultrafast`, `superfast`, `veryfast`, `faster`, `fast`, `medium` (default), `slow`, `slower`, `veryslow` and `placebo`. Pick the slowest preset you can live with before changing anything else. `slow` is where x265 starts doing serious RDO (rd 4, rdoq-level 2, psy-rdoq 1.0, rectangular partitions), so it is the usual minimum for quality-focused encodes; `slower` and `veryslow` add more B-frames, references and analysis. `ultrafast` is poor enough that x264 is usually the better choice at that speed, and `placebo` is much slower than `veryslow` for little gain.\n\n| Tune | Changes | Use for |\n| --- | --- | --- |\n| `animation` | `--psy-rd 0.4 --aq-strength 0.4 --deblock 1:1`, B-frames +2 | Animated content. Not listed in `--fullhelp` but accepted. |\n| `grain` | `--aq-mode 0 --no-cutree --ipratio 1.1 --pbratio 1.0 --qpstep 1 --no-sao --psy-rd 4.0 --psy-rdoq 10.0 --rskip 0`, plus `--rc-grain` | Heavy grain at high bitrates, where grain must not pulse or clump between frames. It costs a lot of bitrate; for moderate grain, the manual settings below usually do better. Overriding AQ or CU-tree on top of it can bring back grain strobing. |\n| `psnr` | AQ strength 0, psy-rd and psy-rdoq off | Metric benchmarking only |\n| `ssim` | Auto-variance AQ, psy-rd and psy-rdoq off | Metric benchmarking only |\n| `fastdecode` | No deblock, no SAO, no weighted prediction, no intra in B-frames | High-bitrate 4K for weak decoders |\n| `zerolatency` | No B-frames, no lookahead, no scenecut, no CU-tree, one frame thread | Real-time streaming |\n\n> **Caution — `--tune psnr` and `--tune ssim` make video look worse.**\n>\n> They turn off the psychovisual optimizations so the encoder scores higher on those metrics. The x265 documentation recommends them only for benchmarking with PSNR or SSIM. For judging quality, look at the video; see [Compare encoding quality](/guides/compare-encoding-quality/).\n## 10-bit and HDR\n\nUse 10-bit (Main 10) even for 8-bit sources. It reduces banding and is usually more efficient, and unlike 10-bit H.264, HEVC Main 10 is supported by most current hardware decoders (it is the profile HDR10 uses). Set `--output-depth 10` (or `--profile main10`) in a multilib build, or `-pix_fmt yuv420p10le` in FFmpeg. 12-bit and 4:2:2/4:4:4 use range-extension profiles with little hardware support.\n\nFor HDR10, signal the colour description and copy the static metadata from the source; do not reuse another title's values:\n\n```sh\nx265 --preset slow --crf 18 --output-depth 10 --colorprim bt2020 --transfer smpte2084 --colormatrix bt2020nc --master-display \"G(13250,34500)B(7500,3000)R(34000,16000)WP(15635,16450)L(10000000,1)\" --max-cll \"1000,400\" -o output.hevc input.y4m\n```\n\n`--master-display` primaries are in units of 0.00002 and luminance in 0.0001 cd/m². `--hdr10-opt` adds block-level QP tuning for HDR10 content. HDR10+ and Dolby Vision need extra metadata files (`--dhdr10-info`, `--dolby-vision-rpu`); see [HDR](/start-here/high-dynamic-range/) and [Preserve colour and HDR](/guides/preserve-color-and-hdr/).\n\n## Options worth adjusting\n\nDefaults are for preset medium; where other presets change a value, it is noted. See [Psychovisual optimization](/start-here/psychovisual/) for the background.\n\nFor high-fidelity live action, a common starting point is to turn SAO off, lower deblocking, use dark-biased AQ and raise psy-rdoq:\n\n```sh\nx265 --preset slow --crf 18 --output-depth 10 --no-sao --deblock -2:-2 --aq-mode 3 --psy-rdoq 2 -o output.hevc input.y4m\n```\n\nFor animation, start from `--deblock -1:-1 --aq-strength 0.8`, two more B-frames than the preset and `--limit-sao` or `--no-sao`. Raise `--psy-rdoq` further for grainy sources and lower `--psy-rd` if lines start to ring. These are starting points: adjust them per source by watching the result.\n\n### Psychovisual and adaptive quantization\n\n| Option | Default | What it does and when to change it |\n| --- | --- | --- |\n| `--psy-rd` | `2.0` | Keeps the energy (detail, sharpness) of the source in mode decisions. Only active at `--rd` 3 and above. Range 0–5. |\n| `--psy-rdoq` | `0.0` (`1.0` from slow upward) | Keeps energy during quantization, which mostly preserves grain and noise. Only active when `--rdoq-level` is 1 or 2. Values around 1–2 are common for high-fidelity live action and higher for heavy grain; the grain tune uses 10. |\n| `--aq-mode` | `2` | 0 off, 1 uniform AQ, 2 auto-variance, 3 auto-variance with a bias toward dark scenes, 4 auto-variance with edge information. Upstream recommends 3 for 8-bit or low-bitrate 10-bit encodes to prevent banding. Mode 3 is a common choice for high-fidelity encodes too, but it can raise bitrate noticeably for little visible gain, so compare it against 2 on your source. |\n| `--aq-strength` | `1.00` | How strongly AQ redistributes bits, 0–3. Commonly lowered to 0.7–0.8 for flat animation or already-compressed sources; the animation tune uses 0.4. |\n| `--no-cutree` | CU-tree on | CU-tree is x265's version of x264's MB-tree: blocks that later frames reference get more bits. Leave it on; disabling it costs a lot of efficiency. The grain tune turns it off together with AQ to keep grain stable. |\n| `--hevc-aq` | Off | An alternative AQ algorithm based on CU variance. |\n| `--no-strong-intra-smoothing` | Smoothing on | Strong intra smoothing filters the reference samples of 32×32 intra blocks to avoid banding in flat areas. High-fidelity encodes often turn it off to keep detail. |\n\n`--psy-rd` favours specific detail and sharpness; `--psy-rdoq` favours overall noise and texture. Both depend heavily on the source, so change them in small steps and compare at playback speed as well as frame by frame.\n\n### Loop filters\n\n| Option | Default | What it does and when to change it |\n| --- | --- | --- |\n| `--sao` / `--no-sao` | On (off at ultrafast and superfast) | Sample Adaptive Offset reduces ringing and banding but smooths fine detail and grain. Fine at moderate and low bitrates; at high quality (roughly CRF 18 and below) many encoders turn it off. |\n| `--limit-sao` | Off | Early-terminates SAO decisions, which in practice keeps somewhat more detail than full SAO. A middle ground before `--no-sao`. |\n| `--selective-sao` | 4 when SAO is on | Applies SAO only to some slice types: 1 I-slices, 2 I and P, 3 all reference slices, 4 all. Lower values are a middle ground between full SAO and `--no-sao`. |\n| `--deblock <tC>:<beta>` | `0:0` | Deblocking offsets, -6 to 6. At high quality, -1:-1 for animation and -2:-2 for live action are common to keep detail and grain; the animation tune uses 1:1 for lower bitrates. |\n\n### Analysis and frame structure\n\n| Option | Default | What it does and when to change it |\n| --- | --- | --- |\n| `--rd` | `3` (4 slow, 6 slower+) | Rate-distortion optimization level in mode decision, 1–6. Levels 3/4 and 5/6 are currently the same pairs. |\n| `--rdoq-level` | `0` (2 at slow+) | RDO in quantization: 0 none, 1 levels, 2 levels and coding groups. Needed for `--psy-rdoq` to do anything. |\n| `--tskip` | Off | Tries transform skip on 4×4 blocks. Helps sharp synthetic content such as screen captures. Requires `--rd` 3 or above. |\n| `--rect` / `--amp` | Off (rect from slow, amp from slower) | Rectangular and asymmetric motion partitions. Better efficiency, slower. |\n| `--bframes` | `4` (8 at slower+) | Maximum consecutive B-frames, 0–16. Animation benefits from about 2 more than the preset default. |\n| `--b-adapt` | `2` (0 at veryfast to fast) | B-frame placement: 0 none, 1 fast, 2 full trellis. Keep 2. |\n| `--bframe-bias` | `0` | Makes B-frames more or less likely. Rarely worth changing. |\n| `--ref` | `3` (4 slow, 5 slower+) | Reference frames, 1–16. |\n| `--me` | `hex` (star at slow+) | Motion search: `dia`, `hex`, `umh`, `star`, `full`. |\n| `--subme` | `2` (3 slow, 4 slower and veryslow, 5 placebo) | Subpixel motion refinement, 0–7. |\n| `--merange` | `57` | Motion search range. Rarely needs changing. |\n| `--rc-lookahead` | `20` (25 slow, 40 slower) | Frames analysed for frame types and CU-tree. Longer helps scenecut detection and CU-tree; more than `--keyint` does not help. |\n| `--keyint` / `--min-keyint` | `250` / auto | Maximum and minimum keyframe interval in frames. |\n| `--open-gop` | On | Unlike x264, open GOP is the default. Use `--no-open-gop` if the stream will be cut or segmented at keyframes. |\n\n### Threading\n\nx265 parallelizes with Wavefront Parallel Processing (`--wpp`, on by default: rows start once the row above is two CTUs ahead, about 1% efficiency cost per the upstream docs) and frame threads (`--frame-threads`, automatic by default). A single frame thread compresses slightly better but is much slower. x265 does not saturate many-core CPUs on lower-resolution content, which is why chunked encoders such as [Av1an](/tools/utilities/av1an/) are sometimes used to run several x265 instances in parallel.\n\n## Lossless\n\n`--lossless` (`-x265-params lossless=1`) bypasses transform, quantization and loop filters and reproduces the input exactly; rate-control options are ignored. It is not a common choice: lossless x264 (`--qp 0`) is much faster for intermediates, and [FFV1](/codecs/video/ffv1/) is usually preferred for archiving.\n\n## Complete standalone parameter reference\n\nEvery option the x265 4.3 CLI accepts, grouped as in `x265 --fullhelp`, followed by aliases, legacy spellings and options that exist only in builds with optional features. Defaults are for preset medium with no tune, which is also what you get without `--preset` (one exception is noted). Where x265 changes a value at startup, for example from the frame rate, core count or another option, the default cell says so. Full syntax is in the [4.3 CLI documentation](https://github.com/Multicorewareinc/x265/blob/4.3/doc/reST/cli.rst).\n\n<details>\n<summary>Executable Options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--help` | — | Print the common options and exit (`-h`). |\n| `--fullhelp` | — | Print every option, including those `--help` hides, and exit. |\n| `--version` | — | Print the version, the bit depths built in and the detected CPU features, then exit (`-V`). |\n\n</details>\n\n<details>\n<summary>Output Options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--output` | unset | Output file (`-o`); the second positional argument is used if omitted. Always a raw HEVC elementary stream, so mux it afterwards (FFmpeg, MKVToolNix, MP4Box). |\n| `--output-depth` | 8 | Output and internal bit depth: 8, 10 or 12 (`-D`). The CLI loads the matching libx265 build; without it, a `--profile` name such as `main10` sets the depth. |\n| `--log-level` | info | Console verbosity: `none`, `error`, `warning`, `info`, `debug` (adds per-frame QP and bits) or `full`. |\n| `--no-progress` | progress shown | Turn off the periodic progress line. |\n| `--csv` | unset | Write encode statistics to this CSV file (created if missing, otherwise appended). |\n| `--csv-log-level` | 0 | CSV detail: 0 one summary line per run, 1 one line per frame, 2 per-frame lines with performance statistics. |\n\n</details>\n\n<details>\n<summary>Input Options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--input` | unset | Input file, raw YUV or Y4M; `-` reads stdin. The first positional argument is used if omitted. |\n| `--y4m` | off (implied by a `.y4m` name) | Parse the input as Y4M whatever its name; needed when piping Y4M through stdin. |\n| `--fps` | from Y4M header | Frame rate as a number or `num/den` (e.g. `24000/1001`). Required for raw YUV; overrides the Y4M header. |\n| `--input-res` | from Y4M header | Picture size `WxH`; required for raw YUV. |\n| `--input-depth` | 8 (raw YUV); Y4M header otherwise | Bit depth of raw YUV input, 8–16. Deeper input is reduced to the output depth (see `--dither`). |\n| `--input-csp` | `i420` (raw YUV); Y4M header otherwise | Chroma format of raw input: `i400`, `i420`, `i422`, `i444`, `nv12`, `nv16`. x265 never resamples chroma, so this also sets the output format. |\n| `--dolby-vision-profile` | 0 (off) | Make the stream conform to Dolby Vision profile 5, 8.1, 8.2 or 8.4 (`8.1` or `81`). Requires 10-bit 4:2:0 and VBV; 8.1 also needs `--master-display`. The RPUs come from `--dolby-vision-rpu`. |\n| `--dolby-vision-rpu` | unset | Binary RPU file (for example extracted from the source with dovi_tool); one RPU is attached to each input frame in order. CLI only. |\n| `--nalu-file` | unset | Text file of extra prefix SEI messages, one per line: `POC PREFIX NALtype/SEItype payload`. |\n| `--frames` | all | Encode at most this many frames (`-f`). Knowing the count also helps rate control. |\n| `--seek` | 0 | Skip this many input frames before encoding. |\n| `--[no-]interlace` | progressive | Input is interlaced, `tff` or `bff`. HEVC codes each field as a picture: supply field-sized pictures and the field rate. Experimental. |\n| `--[no-]field` | off | Field coding from interleaved frames: with `--interlace`, x265 halves the height and doubles the frame rate itself. |\n| `--dither` | off | Error-diffusion dither when reducing high-bit-depth input to the output depth. CLI only. |\n| `--[no-]copy-pic` | on | Copy input pictures into internal buffers. Only API users that supply padded buffers turn this off. |\n\n</details>\n\n<details>\n<summary>Quality reporting metrics</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]ssim` | off | Report SSIM against the source. Only meaningful with psy-rd/psy-rdoq off (`--tune ssim`); x265 warns otherwise. |\n| `--[no-]psnr` | off | Report PSNR against the source. Only meaningful with psy and AQ off (`--tune psnr`); x265 warns otherwise. |\n\n</details>\n\n<details>\n<summary>Profile, Level, Tier</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--profile` | auto (from bit depth and chroma format) | Enforce a profile such as `main`, `main10`, `main12`, `main422-10`, `main444-8`, `main444-10`, or an `-intra`/still-picture variant (`-P`). Aborts if the settings cannot meet it. |\n| `--level-idc` | 0 (auto-detect) | Minimum decoder level as `5.1` or `51`. x265 constrains the encode to fit (enabling VBV for CRF), signals that level, and aborts if it cannot be met. |\n| `--[no-]high-tier` | on | Allow High tier when the VBV rate or buffer exceeds the Main-tier limit for the level; Main tier is signaled otherwise. `--no-high-tier` stays in Main tier. |\n| `--uhd-bd` | off | Apply Ultra HD Blu-ray constraints (level 5.1, closed GOP, keyint up to 1 s, at most 6 refs, AUD, HRD and repeated headers). Needs 1920×1080 or 3840×2160 with BT.709 or BT.2020 colour. |\n| `--[no-]allow-non-conformance` | off | Write streams that exceed profile/level limits (signaled as NONE) instead of aborting. Usual cause: too many references. |\n\n</details>\n\n<details>\n<summary>Threading, performance</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--pools` | auto (all cores) | Worker threads per NUMA node, comma-separated: a count, `+` (all cores on that node), `-` (none) or `*` (all remaining nodes). `none` disables the pool, leaving only frame threads. Alias `--numa-pools`. |\n| `--frame-threads` | 0 (auto) | Frames encoded in parallel (`-F`). Auto: 1 below 4 threads, 2 from 4, 3 from 8, 4 from 16, 5 from 32 (6 above 2000 lines). Fewer compress slightly better; more mostly add memory. |\n| `--[no-]wpp` | on | Wavefront parallel processing: a CTU row starts once the row above is two CTUs ahead. Large speed-up for about 1% efficiency. |\n| `--slices` | 1 | Full-width slices per picture. Costs efficiency; only useful when WPP and frame threads cannot fill the CPU. |\n| `--[no-]pmode` | off | Parallel mode decision. Deprecated since 4.1: the CLI rejects `--pmode`. |\n| `--[no-]pme` | off | Parallel motion estimation. Deprecated since 4.1: the CLI rejects `--pme`. |\n| `--[no-]threaded-me` | off | Dedicated motion-estimation thread pool that works ahead across CTUs. Experimental; lowers efficiency and turns itself off below 32 threads or with VBV. |\n| `--[no-]asm` | auto (detected; AVX-512 off) | Override CPU feature detection with names (`avx2`) or a bitmask; `--no-asm` disables SIMD. `--asm avx512` enables the AVX-512 kernels that detection leaves off. Naming features the CPU lacks crashes the encoder. |\n\n</details>\n\n<details>\n<summary>Presets</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--preset` | medium | Speed/efficiency preset (`-p`): `ultrafast`, `superfast`, `veryfast`, `faster`, `fast`, `medium`, `slow`, `slower`, `veryslow`, `placebo`, or 0–9. Applied before every other option. |\n| `--tune` | none | Applied after the preset (`-t`): `psnr`, `ssim`, `grain`, `zerolatency`, `fastdecode`, `animation`. `grain` turns off AQ, cuTree and SAO, flattens the frame-type QP ratios and raises psy-rd. |\n\n</details>\n\n<details>\n<summary>Quad-Tree size and depth</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--ctu` | 64 | Largest coding unit: 64, 32 or 16 (`-s`). 64 compresses flat areas best; ultrafast and superfast use 32. |\n| `--min-cu-size` | 8 | Smallest coding unit: 8, 16, 32 or 64. Larger is faster and costs bitrate. |\n| `--max-tu-size` | 32 | Largest transform: 32, 16, 8 or 4; never larger than `--ctu`. |\n| `--tu-intra-depth` | 1 | Extra transform-tree depth for intra CUs, 1–4 (1 = transform as large as the CU). slower and veryslow use 3, placebo 4. |\n| `--tu-inter-depth` | 1 | Extra transform-tree depth for inter CUs, 1–4. slower and veryslow use 3, placebo 4. |\n| `--limit-tu` | 0 (off) | Early exit from inter transform recursion, 1–4 (heavier heuristics at higher levels). Needs `--tu-inter-depth` 2 or more; slower uses 4. |\n\n</details>\n\n<details>\n<summary>Analysis</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--rd` | 3 | Rate-distortion level for mode decision, 1–6: 2 RDO for splits and merge/skip (ultrafast to fast), 3 RDO for mode and split, 4 same as 3 (slow), 5 adds RDO prediction decisions, 6 same as 5 (slower and above). |\n| `--[no-]psy-rd` | 2.0 | Psychovisual RD strength, 0–5.0: keeps source energy (detail, grain) instead of the lowest distortion. Takes effect at `--rd` 3 and above. |\n| `--[no-]rdoq-level` | 0 (off) | Rate-distortion optimised quantisation: 1 per-coefficient level decisions, 2 also drops whole coefficient groups. slow and slower presets use 2. |\n| `--[no-]psy-rdoq` | 0.0 (1.0 at slow and slower) | Psychovisual strength inside RDOQ, 0–50: keeps more high-frequency energy. Forced to 0 when `--rdoq-level` is 0, so at medium it only works if you also raise rdoq-level. |\n| `--dynamic-rd` | 0 (off) | Raise RD effort where VBV forces quality down, strength 0–4. Only with VBV, AQ on and `--rd` 4 or lower. |\n| `--[no-]ssim-rd` | off | Use SSIM-based distortion in mode decision; turns psy-rd off. `--rd` 3 and above. |\n| `--[no-]rd-refine` | off | Try several QPs on the best partition of each CU to find the best rounding. `--rd` 5–6 with AQ on. |\n| `--[no-]early-skip` | on | Check 2N×2N merge first and stop if it leaves no residual. The fast preset and slow and above turn it off. |\n| `--rskip` | 1 | Early exit from CU depth recursion: 0 off, 1 neighbour cost and homogeneity (or a 2N×2N inter comparison at `--rd` 5–6), 2 CU edge density. placebo and `--tune grain` use 0. |\n| `--rskip-edge-threshold` | 5 (%) | Edge density, in percent (0–100), below which `--rskip 2` stops recursing. |\n| `--[no-]tskip-fast` | off | Evaluate transform skip only for 4×4 intra NxN blocks (chroma only where luma used it). Needs `--tskip`. |\n| `--[no-]splitrd-skip` | off | Skip split RD analysis of an intra CU once the split cost already exceeds the unsplit cost. |\n| `--nr-intra` | 0 (off) | Noise-reduction deadzone for intra blocks, 0–2000, applied to transform coefficients. Output then varies with the frame-thread count. |\n| `--nr-inter` | 0 (off) | Noise-reduction deadzone for inter blocks, 0–2000. |\n| `--ctu-info` | 0 (off) | API only: react to CTU information passed with `x265_encoder_ctu_info` (1, 2, 4 or 6). If set without calling it, the encoder waits forever. |\n\n</details>\n\n<details>\n<summary>Coding tools</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]weightp` | on | Weighted prediction in P slices (`-w`); large gains on fades and lighting changes. |\n| `--[no-]weightb` | off | Weighted prediction in B slices. On at slower and above. |\n| `--[no-]cu-lossless` | off | Also try lossless (transform and quantisation bypass) coding of each CU in RDO. `--rd` 3 and above. |\n| `--[no-]signhide` | on | Sign-bit hiding: one coefficient sign per TU is inferred from parity. |\n| `--[no-]tskip` | off | Try transform skip on 4×4 blocks; helps text and screen content. `--rd` 3 and above; placebo enables it. |\n\n</details>\n\n<details>\n<summary>Temporal / motion search options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--max-merge` | 3 | Merge candidates, 1–5. Faster presets use 2, slower 4, veryslow and placebo 5. |\n| `--ref` | 3 | L0 reference frames, 1–16. With B-pyramid at most 6 stay within HEVC's 8-picture limit; beyond that x265 aborts unless `--allow-non-conformance`. |\n| `--limit-refs` | 1 | Reference pruning: 0 off, 1 use the references chosen by the four sub-CUs, 2 limit rect/AMP to the 2N×2N choice, 3 both. |\n| `--me` | `hex` (1) | Integer-pel motion search: `dia` (0), `hex` (1), `umh` (2), `star` (3), `sea` (4), `full` (5). slow and above use `star`. |\n| `--subme` | 2 | Sub-pixel refinement effort, 0–7 (`-m`). slow uses 3, slower and veryslow 4, placebo 5. |\n| `--merange` | 57 | Motion search range in pixels; 57 fits a 64-pixel CTU without an extra row of latency. placebo uses 92. |\n| `--[no-]rect` | off | Evaluate rectangular partitions (N×2N, 2N×N). On at slow and above. |\n| `--[no-]amp` | off | Evaluate asymmetric 75/25 partitions; needs `--rect`. On at slower and above. |\n| `--[no-]limit-modes` | off | Skip rect/AMP modes that sub-CU costs mark as unlikely. On at slow and slower. |\n| `--[no-]temporal-mvp` | on | Temporal motion-vector predictors from the co-located picture. |\n| `--[no-]hme` | off | Three-level hierarchical motion estimation (1/16, 1/4 and full resolution). Needs 540 or more lines; replaces `--me`/`--merange` with the level-2 values. |\n| `--hme-search` | hex,umh,umh | Search method for each HME level (names or 0–5); one value applies to all levels. Setting it enables `--hme`. |\n| `--hme-range` | 16,32,48 | Search range for each HME level. Setting it enables `--hme`. |\n\n</details>\n\n<details>\n<summary>Spatial / intra options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]strong-intra-smoothing` | on | Bilinear smoothing of 32×32 intra reference samples; reduces banding in smooth gradients. |\n| `--[no-]constrained-intra` | off | In inter slices, intra prediction uses only intra-coded neighbours, limiting error propagation. Alias `--cip`. |\n| `--[no-]b-intra` | on | Evaluate intra modes in B slices. Off in ultrafast to fast and in slow. |\n| `--[no-]fast-intra` | off | Coarse-to-fine angular intra search (about 10 of 33 modes). Used by ultrafast to fast; `--rd` 4 and lower. |\n| `--rdpenalty` | 0 (off) | Penalise 32×32 intra transforms in P/B slices: 1 quadruples their bit cost, 2 avoids them unless depth limits require them. Needs `--tu-intra-depth` 2+ to affect 32×32 CUs. |\n\n</details>\n\n<details>\n<summary>Slice decision options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]open-gop` | on | Open GOP: keyframes after the first may be CRA pictures with leading pictures that reference the previous GOP. Use `--no-open-gop` when the stream is cut into independently decodable segments. |\n| `--cra-nal` | off | Code every frame after the first as a CRA picture; only valid with `--keyint 1`. |\n| `--keyint` | 250 | Maximum keyframe interval in frames (`-I`). `-1` = a single keyframe, `1` = all-intra. |\n| `--min-keyint` | auto: min(fps, keyint/10), e.g. 24 at 24 fps | Scene cuts closer than this to the previous keyframe become non-IDR I-frames (`-i`). Set it equal to `--keyint` for a fixed GOP. |\n| `--gop-lookahead` | 0 | If a scene cut falls within this many frames after the `--keyint` limit, extend the GOP to it. Range 0 to `--rc-lookahead` minus the mini-GOP length. |\n| `--no-scenecut` | scene-cut detection on | Disable adaptive I-frame insertion; same as `--scenecut 0`. |\n| `--scenecut` | 40 | Scene-cut sensitivity; higher inserts more I-frames, 0 disables. |\n| `--scenecut-bias` | 5 | Inter/intra cost difference, in percent, that marks a scene cut (5 = inter cost at least 95% of intra cost). Upstream recommends 5–15. |\n| `--hist-scenecut` | off | Detect scene cuts from histograms, intensity and variance of the picture. |\n| `--no-hist-scenecut` | histogram detection off | Disable histogram-based scene-cut detection. |\n| `--[no-]fades` | off | Detect fade-ins and handle them in frame-type decisions. |\n| `--scenecut-aware-qp` | 0 (off) | Second pass only: raise the QP of inter frames after (1), before (2) or on both sides of (3) a scene cut, where the cut masks the loss. |\n| `--masking-strength` | built-in (1200 ms forward, 600 ms backward windows) | Windows (ms) and QP offsets for `--scenecut-aware-qp`: `window,refQpDelta,nonRefQpDelta` per direction, or six such triples per direction. |\n| `--scenecut-qp-config` | unset | File with `--scenecut-aware-qp` and `--masking-strength` settings for the second pass. CLI only. |\n| `--radl` | 0 | RADL leading pictures before each IDR, 0 to `--bframes`. Closed GOP only; upstream suggests 2–3 when used. |\n| `--intra-refresh` | off | Periodic intra refresh: a column of intra blocks sweeps across the picture every `--keyint` frames instead of IDR frames. For low-latency streams; forces one reference and turns off open GOP and scene cuts. |\n| `--rc-lookahead` | 20 | Frames analysed ahead for frame types, cuTree and rate control, up to 250. Must exceed `--bframes` or x265 refuses to start. slow uses 25, slower and veryslow 40, placebo 60. |\n| `--lookahead-slices` | 8 (0 below 720 lines) | Split lookahead cost estimates into slices for parallelism, at some cost in decision accuracy. Capped by height (4 at 720p, 6 at 1080p); slow uses 4, slower and above 0. |\n| `--lookahead-threads` | 0 (shared pool) | Threads dedicated to the lookahead, up to half the hardware threads. |\n| `--bframes` | 4 | Maximum consecutive B-frames, 0–16 (`-b`). slower and above use 8; 0 gives a low-latency I/P stream. |\n| `--bframe-bias` | 0 | Bias toward B-frames in frame-type decisions, −90 to 100. |\n| `--b-adapt` | 2 | B-frame placement: 0 fixed pattern, 1 fast, 2 full trellis. ultrafast to fast use 0. |\n| `--[no-]b-pyramid` | on | Use B-frames as references. |\n| `--qpfile` | unset | Force frame types and optionally QPs: one `frame type [QP]` per line, types `I i K P B b`. |\n| `--force-flush` | 0 | Flushing (API): 0 only at end of input, 1 flush all frames immediately, 2 flush frames whose type is decided. |\n| `--[no-]hrd-concat` | off | Set the concatenation flag in the first buffering-period SEI; for every chunk after the first in chunked encoding. |\n\n</details>\n\n<details>\n<summary>Rate control, Adaptive Quantization</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--bitrate` | 0 (CRF mode) | Average bitrate in kbit/s: one-pass ABR, or the target for `--pass`. |\n| `--qp` | unset (CRF mode) | Constant QP for P frames, 0–51 (`-q`); I and B follow `--ipratio`/`--pbratio`. Turns off AQ and cuTree. QP 0 is not lossless. |\n| `--crf` | 28.0 | Constant rate factor, 0–51; lower means higher quality and larger files. The default rate-control mode. |\n| `--[no-]lossless` | off | Bypass transform, quantisation and loop filters for bit-exact output; rate-control options are ignored. |\n| `--crf-max` | 0 (off) | Highest rate factor a frame may reach under CRF with VBV; can cause VBV underflows. |\n| `--crf-min` | 0 (off) | Lowest rate factor a frame may get under CRF with VBV. |\n| `--vbv-maxrate` | 0 (off) | VBV maximum rate in kbit/s. With `--vbv-bufsize` it caps a CRF encode or constrains ABR. |\n| `--vbv-bufsize` | 0 (off) | VBV buffer size in kbit. |\n| `--vbv-init` | 0.9 | Initial buffer fill: a fraction of the buffer (up to 1) or kbit. |\n| `--vbv-end` | 0 (off) | Required final buffer fill (fraction or kbit), so separately encoded chunks join without VBV violations. |\n| `--min-vbv-fullness` | 50 | Minimum buffer fullness, in percent, that rate control tries to keep. Experimental. |\n| `--max-vbv-fullness` | 80 | Maximum buffer fullness, in percent. Experimental. |\n| `--vbv-end-fr-adj` | 0 | Fraction of the frames after which QP is steered toward `--vbv-end`; needs a known frame count. |\n| `--chunk-start` | 0 (off) | First frame written to the bitstream; earlier frames are encoded and discarded. Closed GOP only. |\n| `--chunk-end` | 0 (off) | Last frame written; later frames feed only the lookahead. Closed GOP only. |\n| `--pass` | 0 (off) | Multipass: 1 writes statistics, 2 reads them (final pass), 3 reads and rewrites them (middle passes). |\n| `--[no-]multi-pass-opt-analysis` | off | Reuse first-pass analysis (MVs, depths, modes) in the final pass. Not with `--analysis-save`/`--analysis-load`. |\n| `--[no-]multi-pass-opt-distortion` | off | Lower the QP of CTUs that had high distortion in the first pass, raise it for low-distortion CTUs. |\n| `--[no-]vbv-live-multi-pass` | off | In the second pass, adjust QP from the live VBV fill to reduce violations (ABR with VBV). Experimental. |\n| `--stats` | x265_2pass.log | Multipass statistics file; a `.cutree` file is written next to it. |\n| `--[no-]analyze-src-pics` | off | Run motion estimation on source pictures instead of reconstructed ones. |\n| `--[no-]slow-firstpass` | on | Run the first pass with full settings. `--no-slow-firstpass` uses a faster first pass (rd 2, `dia` search, one reference, no rect/AMP). |\n| `--strict-cbr` | off | ABR: hold the bitrate tightly, prioritising rate over quality (also sets `--pbratio` 1.0). For short segments that must not overshoot. |\n| `--analysis-save` | unset | Save analysis data for a later encode of the same source; amount set by `--analysis-save-reuse-level`. |\n| `--analysis-load` | unset | Load analysis data saved by an earlier encode of the same source to skip work. |\n| `--analysis-reuse-file` | x265_analysis.dat | File used by `--multi-pass-opt-analysis` and `--multi-pass-opt-distortion`. |\n| `--analysis-reuse-level` | 0 | Deprecated: sets both save and load reuse levels. |\n| `--analysis-save-reuse-level` | 0 (5 when saving) | How much analysis to save, 1 (lookahead only) to 10 (everything). 0 becomes 5 with `--analysis-save`. |\n| `--analysis-load-reuse-level` | 0 (5 when loading) | How much saved analysis to reuse, 1–10. 0 becomes 5 with `--analysis-load`. |\n| `--refine-analysis-type` | off | Reuse analysis passed through the API from an `avc` or `hevc` encode. |\n| `--scale-factor` | 0 | Resolution ratio between the saving and the loading encode (2 when 1080p reuses 540p analysis). |\n| `--refine-intra` | 0 | Intra refinement when loading analysis: 0 reuse mode and depth, up to 4 re-analyse every intra block. |\n| `--refine-inter` | 0 | Inter refinement when loading analysis: 0 reuse mode and depth, up to 3 re-evaluate all inter modes at the reused depth. |\n| `--[no-]dynamic-refine` | off | Pick the `--refine-inter` level per CU from the content. |\n| `--refine-mv` | 1 | MV refinement for scaled analysis reuse: 1 search around the scaled MV, 2 also the best AMVP candidate, 3 also the other candidate. |\n| `--refine-ctu-distortion` | 0 | 1 stores CTU distortion with `--analysis-save` and normalises it on `--analysis-load`. |\n| `--aq-mode` | 2 | Adaptive quantisation: 0 off, 1 uniform, 2 auto-variance, 3 auto-variance biased toward dark scenes (helps banding in 8-bit and low-bitrate encodes), 4 auto-variance with edge information. Constant QP turns AQ off; mode 0 with cuTree on becomes mode 1 at strength 0. |\n| `--[no-]hevc-aq` | off | Alternative AQ using the minimum variance of sub-blocks; replaces the other AQ modes. |\n| `--aq-strength` | 1.0 | AQ strength, 0–3.0; 0 disables the AQ offsets. |\n| `--qp-adaptation-range` | 1.0 | Maximum delta-QP range for `--hevc-aq`, 1.0–6.0. |\n| `--[no-]aq-motion` | off | Raise QP for blocks that move relative to the frame. Experimental. |\n| `--[no-]sbrc` | off | Segment-based rate control: capped CRF per keyframe-interval segment. Needs CRF with VBV; forces closed, fixed-length GOPs. Experimental. |\n| `--qg-size` | 32 | Quantisation-group size (64, 32, 16 or 8): the smallest block that gets its own AQ offset. Clamped to the CU size range. |\n\n</details>\n\n<details>\n<summary>Foveated encoding options (gaze-contingent per-QG QP mapping)</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--fovea-gaze` | -1,-1 (frame centre) | Gaze point in pixels; negative values use the frame centre. |\n| `--fovea-delta` | 0 (off) | QP increase at the periphery, 5–40; 0 disables foveated encoding. |\n| `--fovea-sigma` | 0 (auto: 95 px) | Gaussian radius of the sharp region in pixels; 0 uses 95 px (about 2.5° at 60 cm). |\n| `--fovea-gaze-file` | unset | Per-frame gaze points, one `frame x y` per line; overrides `--fovea-gaze`. |\n\n</details>\n\n<details>\n<summary>Quantizer curve, chroma offsets and zones</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]cutree` | on | Lower the QP of blocks that later frames reference heavily, using lookahead motion data. `--tune grain` and `--tune zerolatency` turn it off. |\n| `--[no-]rc-grain` | off | Rate control that minimises QP fluctuation so grain does not pulse; part of `--tune grain`. |\n| `--ipratio` | 1.4 | QP factor between I and P frames. |\n| `--pbratio` | 1.3 | QP factor between P and B frames. |\n| `--qcomp` | 0.6 | Quantiser curve compression, 0.5–1.0: lower holds bitrate steadier, 1.0 approaches constant QP. Also scales cuTree strength. |\n| `--qpstep` | 4 | Largest QP change between frames allowed to rate control. |\n| `--qpmin` | 0 | Lowest QP rate control may use. |\n| `--qpmax` | 69 | Highest QP rate control may use. |\n| `--[no-]const-vbv` | off | Make VBV decisions repeatable between runs; part of `--tune grain`. |\n| `--cbqpoffs` | 0 | Cb QP offset from luma, −12 to 12; negative spends more bits on chroma. With 4:4:4 input and psy-rd on, x265 sets 6 for both offsets if neither is given. |\n| `--crqpoffs` | 0 | Cr QP offset from luma, −12 to 12. |\n| `--scaling-list` | off | Quantisation scaling lists: `off`, `default` (the HEVC default lists) or an HM-format file. |\n| `--zones` | unset | Per-range overrides separated by `/`: `start,end,q=QP` or `start,end,b=multiplier`. Later zones win. |\n| `--zonefile` | unset | File of `frame options…` lines that reconfigure the encoder from that frame on. Forces closed GOP and repeated headers. CLI only. |\n| `--no-zonefile-rc-init` | rate control reset per zone | Keep rate-control history across zonefile zones. |\n| `--lambda-file` | unset | Replacement lambda tables (70 values each for lambda and lambda²). Process-global; for experiments. |\n| `--max-ausize-factor` | 1.0 | Fraction (0.5–1.0) of the specification's maximum access-unit size to allow. |\n\n</details>\n\n<details>\n<summary>Loop filters (deblock and SAO)</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]deblock` | on, `0:0` | Deblocking filter with optional `tC:beta` offsets from −6 to 6; negative values filter less (sharper, more blocking risk). `--no-deblock` disables it. |\n| `--[no-]sao` | on | Sample adaptive offset filter. Cleans ringing and banding but also softens fine texture; often turned off for high-quality and grainy encodes (`--tune grain` does). |\n| `--[no-]sao-non-deblock` | off | Analyse SAO on non-deblocked pixels instead of skipping the right/bottom CTU edges. |\n| `--[no-]limit-sao` | off | End SAO analysis early using mode and neighbour heuristics; faster, slightly less effective. |\n| `--selective-sao` | 0 stored; 4 (all slices) when SAO is on | SAO per slice type: 1 I only, 2 I and P, 3 all reference slices, 4 all slices. With SAO on, 0 is promoted to 4; with `--no-sao` it stays 0, and any non-zero value turns SAO back on. |\n\n</details>\n\n<details>\n<summary>VUI options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--sar` | 0 (undefined; Y4M header if present) | Sample aspect ratio: index 1–16 (1 = 1:1) or `w:h`. |\n| `--display-window` | unset | Default display window: `left,top,right,bottom` pixels for the player to crop. Signaling only. |\n| `--overscan` | not signaled | `show` or `crop` overscan hint. |\n| `--videoformat` | not signaled | Original analog format: `component`, `pal`, `ntsc`, `secam`, `mac`, `unknown`. |\n| `--range` | not signaled (players assume limited) | `limited` or `full`. Signaling only; samples are not converted. |\n| `--colorprim` | not signaled | Colour primaries, e.g. `bt709`, `bt2020`, `smpte432`. Signaling only. |\n| `--transfer` | not signaled | Transfer characteristics, e.g. `bt709`, `smpte2084` (PQ), `arib-std-b67` (HLG). Signaling only. |\n| `--colormatrix` | not signaled | Matrix coefficients, e.g. `bt709`, `bt2020nc`, `ictcp`. Signaling only. |\n| `--chromaloc` | not signaled | Chroma sample location type 0–5 (HDR10 4:2:0 normally uses 2). |\n| `--master-display` | unset | SMPTE ST 2086 mastering display SEI: `G(x,y)B(x,y)R(x,y)WP(x,y)L(max,min)`, chromaticities in 0.00002 units and luminance in 0.0001 cd/m². Copy it from the source. Turns on HDR10 SEI. |\n| `--max-cll` | 0,0 (unset) | Content light level SEI as `MaxCLL,MaxFALL` in cd/m². Turns on HDR10 SEI. |\n| `--video-signal-type-preset` | unset | Set primaries, transfer, matrix, range and chroma location at once, e.g. `BT709_YCC` or `BT2100_PQ_YCC`, optionally with `:P3D65x1000n0005` for the mastering display. Overrides the individual options. |\n| `--[no-]cll` | on | Include the content light level SEI (0,0 when `--max-cll` is unset) whenever HDR10 SEI is written. |\n| `--[no-]hdr10` | off | Force HDR10 SEI even with zero values. Implied by `--master-display` or `--max-cll`; also turns on repeated headers. |\n| `--[no-]hdr-opt` | off | Deprecated alias of `--hdr10-opt`. |\n| `--[no-]hdr10-opt` | off | Block-level luma and chroma QP adjustment for HDR10; only for 10-bit 4:2:0 BT.2020 PQ sources (otherwise disabled). Use with AQ. |\n| `--min-luma` | 0 | Clip input luma below this value. |\n| `--max-luma` | bit-depth maximum (255 at 8-bit, 1023 at 10-bit) | Clip input luma above this value. |\n\n</details>\n\n<details>\n<summary>Bitstream options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--[no-]repeat-headers` | off | Repeat VPS/SPS/PPS at every keyframe, for raw streams that must be decodable from any keyframe. Turned on automatically for HDR metadata, zonefiles, all-intra and `--uhd-bd`. |\n| `--[no-]info` | on | Write an SEI with the x265 version and full settings string. |\n| `--[no-]hrd` | off | Signal HRD parameters with buffering-period and picture-timing SEI. Needs VBV; ignored without it. |\n| `--[no-]idr-recovery-sei` | off | Recovery point SEI at each IDR. |\n| `--temporal-layers` | 0 (off) | Temporal sub-layers, 2–5. 3, 4 and 5 fix the mini-GOP at 3, 7 and 15 B-frames and turn off adaptive B placement. |\n| `--[no-]aud` | off | Access unit delimiter NAL units. |\n| `--[no-]eob` | off | End-of-bitstream NAL unit at the end. |\n| `--[no-]eos` | off | End-of-sequence NAL unit after each coded video sequence. |\n| `--hash` | 0 (off) | Decoded picture hash SEI for decoder checks: 1 MD5, 2 CRC, 3 checksum. |\n| `--atc-sei` | off | Alternative transfer characteristics SEI with this preferred transfer value; used for HLG (`--atc-sei 18`). |\n| `--pic-struct` | -1 (not signaled) | `pic_struct` value, 0–12, in the picture timing SEI. |\n| `--log2-max-poc-lsb` | 8 | Bits for the picture order count LSB in slice headers (minimum 4). |\n| `--[no-]vui-timing-info` | on | Frame-rate timing information in the VUI. |\n| `--[no-]vui-hrd-info` | on | HRD parameters in the VUI when `--hrd` is on. |\n| `--[no-]opt-qp-pps` | off | Set the PPS initial QP from the previous GOP instead of 26; needs repeated headers. |\n| `--[no-]opt-ref-list-length-pps` | off | Set the PPS L0/L1 list lengths from the previous GOP instead of 0. |\n| `--[no-]multi-pass-opt-rps` | off | In multipass encodes, store the most used reference picture sets in the SPS. |\n| `--[no-]opt-cu-delta-qp` | off | Pull low CU QPs toward the frame mean to reduce delta-QP signaling. `--rd` 5–6. |\n\n</details>\n\n<details>\n<summary>Reconstructed output, temporal filter and ABR ladder</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--recon` | unset | Write reconstructed pictures (`-r`): Y4M for a `.y4m` name, raw YUV otherwise. For debugging. |\n| `--recon-depth` | output bit depth | Bit depth of the `--recon` file. |\n| `--recon-y4m-exec` | unset | Pipe reconstructed Y4M to a viewer command, e.g. `\"ffplay -i pipe:0 -autoexit\"`. |\n| `--lowpass-dct` | off | Low-pass subband DCT approximation for 16×16 and 32×32 blocks: up to about 10% faster with a small efficiency loss. Experimental. |\n| `--[no-]frame-dup` | off | Replace 2–3 near-identical frames with one and signal frame doubling/tripling in `pic_struct`. Needs VBV and `--hrd`. |\n| `--dup-threshold` | 70 | Similarity threshold (PSNR) for `--frame-dup`, 1–99. A non-default value turns frame duplication on. |\n| `--[no-]mcstf` | off | Motion-compensated spatio-temporal filter: denoises I and P frames before encoding, saving bits on noisy sources. |\n| `--mcstf-ref-range` | 2 (1 when `--preset` ultrafast–medium is given) | Frames on each side used by `--mcstf`, 1–4. The ultrafast to medium preset definitions set 1, so an explicit `--preset medium` gives 1 while omitting `--preset` leaves 2. |\n| `--[no-]selective-mcstf` | off | Apply MCSTF only to GOPs estimated as noisy; implies `--mcstf`. |\n| `--abr-ladder` | unset | Config file listing several encodes (`[id:reuse-level:ref-id] options` per line) run together with analysis reuse. Experimental; CLI only. |\n\n</details>\n\n<details>\n<summary>SEI message options</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--film-grain` | unset | Binary film grain characteristics model to write as an FGC SEI; the decoder synthesises the grain. x265 does not estimate or remove grain. |\n| `--aom-film-grain` | unset | Binary AOM film grain parameters to carry in an SEI message. |\n| `--[no-]frame-rc` | off | API: allow per-frame QP, CRF or bitrate changes through `x265_encoder_reconfig`. |\n\n</details>\n\n<details>\n<summary>Additional accepted flags, aliases and legacy declarations</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--numa-pools` | auto | Alias of `--pools`. |\n| `--no-cu-stats` | off | Turn off the deprecated CU statistics flag. |\n| `--cu-stats` | off | Deprecated; 4.3 only prints a warning. |\n| `--frame-skip` | 0 | Alias of `--seek`. |\n| `--no-fast-cbf` | rejected | Declared by the CLI but rejected by the 4.3 parser (\"invalid argument\"). |\n| `--fast-cbf` | rejected | Declared by the CLI but rejected by the 4.3 parser. |\n| `--cip` | off | Alias of `--constrained-intra`. |\n| `--no-cip` | off | Alias of `--no-constrained-intra`. |\n| `--no-b-adapt` | b-adapt 2 | Same as `--b-adapt 0`. |\n| `--ratetol` | rejected | Declared by the CLI but rejected by the 4.3 parser. |\n| `--cplxblur` | 20 | Temporal blur of frame complexity before the QP curve is built (ABR and multipass). |\n| `--qblur` | 0.5 | Temporal blur of QPs after the curve is built. |\n| `--no-lft` | deblocking on | Deprecated alias of `--no-deblock`. |\n| `--lft` | deblocking on | Deprecated alias of `--deblock`. |\n| `--crop-rect` | unset | Deprecated alias of `--display-window`. |\n| `--no-dither` | rejected | Declared but rejected by the 4.3 parser; dithering is off unless `--dither` is given. |\n| `--analysis-reuse-mode` | 0 (off) | Deprecated and ignored; use `--analysis-save`/`--analysis-load`. |\n| `--hdr` | off | Deprecated alias of `--hdr10`. |\n| `--no-hdr` | off | Deprecated alias of `--no-hdr10`. |\n| `--no-dhdr10-opt` | off | Turn off `--dhdr10-opt`. |\n| `--single-sei` | off | Put all SEI messages of an access unit in one NAL unit. The HM decoder warns about this when HRD SEI is present. |\n| `--no-single-sei` | off | One NAL unit per SEI message. |\n| `--no-svt` | SVT-HEVC builds only | Use x265's own encoder instead of SVT-HEVC. |\n| `--no-svt-hme` | SVT-HEVC builds only | Turn off SVT-HEVC hierarchical motion estimation. |\n| `--no-svt-compressed-ten-bit-format` | SVT-HEVC builds only | Turn off SVT-HEVC packed 10-bit input. |\n| `--no-svt-speed-control` | SVT-HEVC builds only | Turn off SVT-HEVC speed control. |\n| `--no-svt-fps-in-vps` | SVT-HEVC builds only | Leave timing information out of the VPS (SVT-HEVC). |\n\n</details>\n\n<details>\n<summary>Conditional build features</summary>\n\n| Parameter | Default | Meaning |\n| --- | --- | --- |\n| `--dhdr10-info` | unset (HDR10+ builds) | JSON file of HDR10+ (SMPTE ST 2094-40) dynamic metadata to insert per frame. Needs a build with `ENABLE_HDR10_PLUS`. |\n| `--dhdr10-opt` | off (HDR10+ builds) | Insert HDR10+ SEI only at IDRs and when the metadata changes. |\n| `--alpha` | off (`ENABLE_ALPHA` builds) | Encode an alpha auxiliary layer; input must be YUVA 4:2:0. |\n| `--num-views` | 1 (`ENABLE_MULTIVIEW` builds) | Number of views for MV-HEVC; normally set in `--multiview-config`. |\n| `--multiview-config` | unset (`ENABLE_MULTIVIEW` builds) | File with `--num-views`, `--format` and one `--input` per view. |\n| `--format` | 0 (`ENABLE_MULTIVIEW` builds) | Multiview input layout: 0 separate files, 1 side by side, 2 top and bottom. |\n| `--scc` | 0 (`ENABLE_SCC_EXT` builds) | Screen content coding with intra block copy: 1 limited search, 2 full search. |\n| `--svt` | off (SVT-HEVC builds only) | Encode with the SVT-HEVC library instead of x265's encoder. |\n| `--svt-hme` | on (SVT-HEVC builds only) | SVT-HEVC hierarchical motion estimation. |\n| `--svt-search-width` | resolution-dependent (SVT-HEVC builds only) | SVT-HEVC motion search width, 1–256. |\n| `--svt-search-height` | resolution-dependent (SVT-HEVC builds only) | SVT-HEVC motion search height, 1–256. |\n| `--svt-compressed-ten-bit-format` | off (SVT-HEVC builds only) | Accept SVT-HEVC's packed 10-bit input format. |\n| `--svt-speed-control` | off (SVT-HEVC builds only) | Adjust SVT-HEVC speed to reach `--fps` in real time. |\n| `--svt-preset-tuner` | unset (SVT-HEVC builds only) | With `--preset placebo`, select SVT-HEVC preset 0 or 1. |\n| `--svt-hierarchical-level` | 3 (SVT-HEVC builds only) | SVT-HEVC hierarchy: 0 flat to 3 four levels. |\n| `--svt-base-layer-switch-mode` | 0 (SVT-HEVC builds only) | SVT-HEVC base layer: 0 B-frames, 1 P-frames. |\n| `--svt-pred-struct` | 2 (SVT-HEVC builds only) | SVT-HEVC prediction structure: 0 low-delay P, 1 low-delay B, 2 random access. |\n| `--svt-fps-in-vps` | off (SVT-HEVC builds only) | Timing information in the VPS (SVT-HEVC). |\n\n</details>\n\n## Complete FFmpeg libx265 private options\n\nFFmpeg 9.0.2's `libx265` wrapper adds the private options below. Several x265 settings come from FFmpeg's generic options instead: `-b:v` (ABR bitrate), `-maxrate` and `-bufsize` (VBV), `-g`, `-keyint_min`, `-bf`, `-refs`, `-qmin`/`-qmax` and `-pass`. The output bit depth follows `-pix_fmt` (for example `yuv420p10le` loads the 10-bit libx265). Anything else goes through `-x265-params`.\n\n<details>\n<summary>All libx265 private options</summary>\n\n| Parameter | Type | Default | Range | Meaning |\n| --- | --- | --- | --- | --- |\n| `-crf` | float | `-1` | `-1` to `FLT_MAX` | x265 CRF (0–51). `-1` passes nothing, so x265's CRF 28 applies unless `-b:v` or `-qp` is set. Takes priority over `-b:v` and `-qp`. |\n| `-qp` | int | `-1` | `-1` to `INT_MAX` | Constant QP; used only when neither `-crf` nor `-b:v` is set. |\n| `-forced-idr` | boolean | `false` | `0` to `1` | Code forced keyframes (e.g. from `-force_key_frames`) as IDR instead of I/CRA frames. |\n| `-preset` | string | `unset` | x265 preset name | x265 preset; unset gives x265's defaults, which match `medium`. |\n| `-tune` | string | `unset` | x265 tune name | x265 tune (`psnr`, `ssim`, `grain`, `zerolatency`, `fastdecode`, `animation`). |\n| `-profile` | string | `unset` | x265 profile name | Enforce a profile such as `main10` or `main422-10`. It does not change the bit depth or chroma format; `-pix_fmt` does. |\n| `-x265-stats` | string | `unset` | file name | Statistics file for `-pass 1`/`-pass 2` (x265 `--stats`); x265 uses `x265_2pass.log` when unset. |\n| `-udu_sei` | boolean | `false` | `0` to `1` | Copy user-data-unregistered SEI from the input frames into the output. |\n| `-a53cc` | boolean | `false` | `0` to `1` | Copy A/53 closed captions from the input frames into SEI. |\n| `-x265-params` | dictionary | `unset` | `key=value:key=value` | Any x265 library option without the leading `--`, e.g. `-x265-params aq-mode=3:sao=0`. Applied after the preset, tune and generic options. CLI-only options (`input`, `output`, `dither`, `seek`…) do not exist here, and unknown names or bad values only log a warning. |\n| `-dolbyvision` | boolean | `auto` | `-1` (`auto`) to `1` | Write Dolby Vision RPUs regenerated from the per-frame Dolby Vision metadata of the input (a decoded Dolby Vision source). `auto` enables it when that metadata is present, `0` disables it, `1` fails if it cannot. Profiles 5 and 8.x only (10-bit 4:2:0); profile 7 enhancement layers are not supported. |\n\n</details>\n\n## Related pages\n\n- [H.265 / HEVC](/codecs/video/hevc/)\n- [x264](/tools/software-encoders/x264/)\n- [Kvazaar](/tools/software-encoders/kvazaar/)\n- [FFmpeg](/tools/utilities/ffmpeg/)\n- [Psychovisual optimization](/start-here/psychovisual/)\n"
}
