{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/codecs/video/ecm",
  "collection": "docs",
  "title": "ECM",
  "description": "ECM is JVET's Enhanced Compression Model, the research software used to explore compression tools beyond VVC.",
  "canonicalUrl": "https://encode.wiki/codecs/video/ecm/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/codecs/video/ecm.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/codecs/video/ecm.md",
  "status": "current",
  "tags": [
    "migrated",
    "video"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "JVET Enhanced Compression Model repository",
      "url": "https://vcgit.hhi.fraunhofer.de/ecm/ECM",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "ECM-20.0 README and build instructions",
      "url": "https://vcgit.hhi.fraunhofer.de/ecm/ECM/-/blob/ECM-20.0/README.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "ECM-20.0 encoder configuration parser",
      "url": "https://vcgit.hhi.fraunhofer.de/ecm/ECM/-/blob/ECM-20.0/source/App/EncoderApp/EncAppCfg.cpp",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "ECM-20.0 random-access configuration",
      "url": "https://vcgit.hhi.fraunhofer.de/ecm/ECM/-/blob/ECM-20.0/cfg/encoder_randomaccess_ecm.cfg",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "ECM-20.0 decoder configuration parser",
      "url": "https://vcgit.hhi.fraunhofer.de/ecm/ECM/-/blob/ECM-20.0/source/App/DecoderApp/DecAppCfg.cpp",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "ITU-T JVET page (joint call for proposals beyond VVC)",
      "url": "https://www.itu.int/en/ITU-T/studygroups/2025-2028/21/video/Pages/jvet.aspx",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "MPEG 155th meeting press release",
      "url": "https://www.mpeg.org/155th-meeting-of-mpeg/",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "provenance": {
    "originUrl": "https://github.com/av1-community-contributors/codec-wiki/blob/37c3317fd058b23c71a87679bed5619a98f77752/docs/video/ECM.mdx",
    "originCommit": "37c3317fd058b23c71a87679bed5619a98f77752",
    "migratedAt": "2026-08-21T00:00:00.000Z",
    "modified": true,
    "originPath": "docs/video/ECM.mdx"
  },
  "headings": [
    {
      "depth": 2,
      "text": "Build",
      "anchor": "build"
    },
    {
      "depth": 2,
      "text": "Encode and decode",
      "anchor": "encode-and-decode"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/codecs/video/ecm/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/_preamble.md",
      "checksum": "e0104c97d1a47027f576ea446c324c7375856bc54a11586bda631f940eac596f",
      "bytes": 1013
    },
    {
      "id": "build",
      "title": "Build",
      "depth": 2,
      "anchor": "build",
      "canonicalUrl": "https://encode.wiki/codecs/video/ecm/#build",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/build.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/build.md",
      "checksum": "27d6b970828c688b5005134668ad7e92f6c316ea45d61a07029d6d32599ef1c5",
      "bytes": 442
    },
    {
      "id": "encode-and-decode",
      "title": "Encode and decode",
      "depth": 2,
      "anchor": "encode-and-decode",
      "canonicalUrl": "https://encode.wiki/codecs/video/ecm/#encode-and-decode",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/encode-and-decode.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/codecs/video/ecm/encode-and-decode.md",
      "checksum": "95464110b594db6ef92ffcbe5ed5c5e94dccb305bf6b31a4cae84ac1003d833b",
      "bytes": 1133
    }
  ],
  "outboundReferences": [
    "/codecs/video/vvc/"
  ],
  "checksum": "c4b1c8dc86f7acb8dc3e0c31a5f218c57cf04882eed885a9f9a7c38063d63135",
  "contentFormat": "markdown",
  "markdown": "ECM (Enhanced Compression Model) is the reference software JVET uses to explore compression tools beyond [VVC](/codecs/video/vvc/). JVET is the joint video team of ITU-T VCEG and ISO/IEC MPEG, and ECM is built on the VVC test model (VTM). The code is hosted at Fraunhofer HHI but is a joint effort, not an HHI codec.\n\nECM is a research platform, not a standard or a product. Its bitstreams are not VVC-compatible, can change between ECM versions, and play only in the matching ECM decoder. It is also far slower than production encoders. Use it to see what next-generation tools look like or to reproduce JVET results, not to encode video you want to keep.\n\nThe next standard is a separate process: in July 2026 ITU-T and ISO/IEC issued a joint Call for Proposals on video compression beyond VVC. Responses are evaluated in January 2027, and MPEG targets a first version of the new standard by the end of 2029.\n\nThe latest tag is **ECM-20.0** (June 2026). The software is released under the BSD 3-clause licence.\n\n## Build\n\nECM builds with CMake; build 64-bit. On Linux the binaries land in `bin/` as `EncoderAppStatic` and `DecoderAppStatic`:\n\n```sh\ngit clone -b ECM-20.0 https://vcgit.hhi.fraunhofer.de/ecm/ECM.git && cd ECM\ncmake -S . -B build -DCMAKE_BUILD_TYPE=Release\ncmake --build build --parallel\n```\n\nThe optional neural-network loop filter (`-DEXTENSION_NNLF=ON`) needs the SADL submodule and is off by default. The software manual is in `doc/`.\n\n## Encode and decode\n\nECM reads raw planar YUV, so the source format goes on the command line. Start from a shipped configuration in `cfg/` (random access is `encoder_randomaccess_ecm.cfg`) and override the input:\n\n```sh\n./bin/EncoderAppStatic -c cfg/encoder_randomaccess_ecm.cfg --InputFile=input.yuv \\\n  --SourceWidth=1920 --SourceHeight=1080 --FrameRate=30 --FramesToBeEncoded=32 \\\n  --InputBitDepth=10 --QP=32 --BitstreamFile=str.bin\n./bin/DecoderAppStatic -b str.bin -o decoded.yuv\n```\n\n- `InputBitDepth` defaults to 8, so set it for 10-bit input. The shipped configs code at `InternalBitDepth: 10`, and the decoder writes the stream's native depth unless you pass `-d 8`.\n- `QP` (32 in the shipped config, range 0–51) is the usual way to sweep rate points.\n- The random-access config uses a GOP and intra period of 32, so encode a multiple of 32 frames.\n- The encoder also writes a reconstruction to `rec.yuv` (set in the config); override `--ReconFile` or ignore it.\n\nResults from ECM only mean something relative to the ECM or VTM revision and configuration they were measured with, so name the tag when you quote numbers.\n"
}
