{
  "schemaVersion": 1,
  "contentVersion": "ca42e61ede0a24f789d7287a0001244ad22f4abf",
  "id": "docs/tools/software-encoders/exhale",
  "collection": "docs",
  "title": "exhale",
  "description": "exhale is the free command-line encoder for xHE-AAC (USAC) audio; this page covers its presets, expert options and where the files will play.",
  "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/",
  "apiUrl": "https://encode.wiki/api/v1/documents/docs/tools/software-encoders/exhale.json",
  "markdownUrl": "https://encode.wiki/api/v1/markdown/docs/tools/software-encoders/exhale.md",
  "status": "current",
  "tags": [
    "audio",
    "aac",
    "usac"
  ],
  "license": "CC BY-SA 4.0",
  "dates": {
    "lastVerified": "2026-10-08T00:00:00.000Z"
  },
  "authors": [],
  "sources": [
    {
      "title": "exhale 1.2.2 README",
      "url": "https://gitlab.com/ecodis/exhale/-/blob/v1.2.2/README.md",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "exhale 1.2.2 application source",
      "url": "https://gitlab.com/ecodis/exhale/-/blob/v1.2.2/src/app/exhaleApp.cpp",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "exhale 1.2.2 release notes and version history",
      "url": "https://gitlab.com/ecodis/exhale/-/blob/v1.2.2/include/Release.htm",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    },
    {
      "title": "Fraunhofer xHE-AAC platform support",
      "url": "https://www.iis.fraunhofer.de/en/ff/amm/broadcast-streaming/xheaac.html",
      "accessedAt": "2026-10-08T00:00:00.000Z"
    }
  ],
  "headings": [
    {
      "depth": 2,
      "text": "Get it",
      "anchor": "get-it"
    },
    {
      "depth": 2,
      "text": "Usage",
      "anchor": "usage"
    },
    {
      "depth": 3,
      "text": "Expert mode",
      "anchor": "expert-mode"
    },
    {
      "depth": 3,
      "text": "Decoding in FFmpeg",
      "anchor": "decoding-in-ffmpeg"
    },
    {
      "depth": 2,
      "text": "Full option reference",
      "anchor": "full-option-reference"
    },
    {
      "depth": 3,
      "text": "Preset rates",
      "anchor": "preset-rates"
    }
  ],
  "sections": [
    {
      "id": "_preamble",
      "title": "Page introduction",
      "depth": 0,
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/_preamble.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/_preamble.md",
      "checksum": "7d8dcb38af9f2e538e69832abcb6e77538d472807b1e16444e8f81f682e50b10",
      "bytes": 1307
    },
    {
      "id": "get-it",
      "title": "Get it",
      "depth": 2,
      "anchor": "get-it",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#get-it",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/get-it.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/get-it.md",
      "checksum": "76d60bad0cfc25194cbc84b1ea389dd499ef94b6070d152cc61171077361f555",
      "bytes": 243
    },
    {
      "id": "usage",
      "title": "Usage",
      "depth": 2,
      "anchor": "usage",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#usage",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/usage.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/usage.md",
      "checksum": "9b75cf5e177313904a4c23ab1035ba99244079148d1018a41e9d476c175c01ec",
      "bytes": 1939
    },
    {
      "id": "expert-mode",
      "title": "Expert mode",
      "depth": 3,
      "anchor": "expert-mode",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#expert-mode",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/expert-mode.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/expert-mode.md",
      "checksum": "61654bd90c2ec765496de98bc8876111c313de06ad42921aca485bc3b0b3b47d",
      "bytes": 609
    },
    {
      "id": "decoding-in-ffmpeg",
      "title": "Decoding in FFmpeg",
      "depth": 3,
      "anchor": "decoding-in-ffmpeg",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#decoding-in-ffmpeg",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/decoding-in-ffmpeg.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/decoding-in-ffmpeg.md",
      "checksum": "8e840c9c48a1a36850e39787cb2229aeac15e7a2e9d92b2fd10f34557c9f9d48",
      "bytes": 472
    },
    {
      "id": "full-option-reference",
      "title": "Full option reference",
      "depth": 2,
      "anchor": "full-option-reference",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#full-option-reference",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/full-option-reference.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/full-option-reference.md",
      "checksum": "009be95525a29d71defd3c4fe854d299efc9d992c8b895ae1d1094f3471061a8",
      "bytes": 2445
    },
    {
      "id": "preset-rates",
      "title": "Preset rates",
      "depth": 3,
      "anchor": "preset-rates",
      "canonicalUrl": "https://encode.wiki/tools/software-encoders/exhale/#preset-rates",
      "apiUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/preset-rates.json",
      "markdownUrl": "https://encode.wiki/api/v1/sections/docs/tools/software-encoders/exhale/preset-rates.md",
      "checksum": "a8c377b1d02a9134eb58bfeaf20ba6dfeda1dd6c538cfbe5a5287dc2c6e5f747",
      "bytes": 778
    }
  ],
  "outboundReferences": [
    "/codecs/audio/aac/",
    "/codecs/audio/opus/",
    "https://gitlab.com/ecodis/exhale",
    "https://gitlab.com/ecodis/exhale/-/blob/v1.2.2/src/app/exhaleApp.cpp",
    "https://gitlab.com/ecodis/exhale/-/releases/v1.2.2",
    "https://www.ecodis.de"
  ],
  "checksum": "a5e3e31989c4005d0524b828595b1e3753c1d9eb3fe0922f3f197c73934e45f1",
  "contentFormat": "markdown",
  "markdown": "> **Repository:** [ecodis/exhale](https://gitlab.com/ecodis/exhale). ecodis extended high-efficiency and low-complexity encoder - an open-source ISO/IEC 23003-3 (USAC, Extended HE-AAC) encoder. Latest release: [v1.2.2](https://gitlab.com/ecodis/exhale/-/releases/v1.2.2), Dec 20, 2025. Last commit: Dec 30, 2025. Stars: 48.\n\n`exhale` (\"Ecodis eXtended High-efficiency And Low-complexity Encoder\") by Christian Helmrich turns WAV files into MPEG-D **USAC / xHE-AAC** in an M4A file, with loudness and peak metadata for decoders that support MPEG-D DRC. It is the only free xHE-AAC encoder. Version 1.2.2 (December 2025) is the latest and, per its release notes, the end of active development.\n\nxHE-AAC is a different codec from [AAC-LC and HE-AAC](/codecs/audio/aac/), so ordinary AAC players cannot decode it. Use exhale only when the playback side is known to support USAC (current Android, Apple and Windows 11 platforms do). Otherwise encode AAC-LC or [Opus](/codecs/audio/opus/).\n\nexhale implements the frequency-domain USAC tools only: no ACELP, TCX or MPEG Surround. It is built for medium and high bitrates, and its author asks that the lowest preset (`a`, about 36 kbit/s stereo or 18 kbit/s mono) be used only when required, since without those low-rate tools it does not show what xHE-AAC can do.\n\n## Get it\n\nBuild from the [source](https://gitlab.com/ecodis/exhale) with `make release` on Linux or macOS (the binary lands in `bin/`), or open `exhale_vs2012.sln` on Windows. New releases are announced on [ecodis.de](https://www.ecodis.de).\n\n## Usage\n\n```sh\nexhale 5 input.wav output.m4a\n```\n\nThe first argument is a preset: `0`–`9` for plain xHE-AAC, `a`–`g` for lower rates with eSBR. Preset `5` is roughly 128 kbit/s stereo; `b` is roughly 48 kbit/s stereo with eSBR. Bitrates scale for mono and multichannel.\n\nInput is WAV, from a file or stdin. The highest sample rate a preset accepts rises with the preset: preset 0 takes up to 32 kHz, 1 up to 44.1 kHz, 2 and above 48 kHz, and 5 and above 96 kHz; the eSBR presets need at least 22.05 kHz. Piping from FFmpeg avoids a lossless intermediate file:\n\n```sh\nffmpeg -i input.flac -f wav - | exhale 5 output.m4a\n```\n\nPresets `a`–`g` support mono and stereo only; the numeric presets accept up to six channels. Rates follow 16 × preset + 48 kbit/s for `0`–`9` and 12 × index + 36 kbit/s for `a`–`g`; the table at the end lists them all.\n\n### Expert mode\n\nTwo extra positional arguments go between the preset and the input:\n\n```sh\nexhale b s 42 input.wav output.m4a\n```\n\nThe first is a single letter: `s` forces media time 0 in the edit list (seamless operation), `l` levels loudness to about −23 LUFS, `n` disables core noise filling (not recommended); any other letter, such as `x`, changes nothing. The second is the independent-frame interval, 10–99 encoded frames, which sets seeking granularity. Keep it under about 2.5 seconds, for example 78 at 32 kHz. Presets `10`–`12` (non-eSBR, very high rates) are only available in expert mode.\n\n### Decoding in FFmpeg\n\nFFmpeg 9.0.2 decodes exhale's eSBR output (presets `a`–`g`), but fails on non-eSBR files with \"Not yet implemented in FFmpeg\". Playback on Android, Apple platforms and Windows 11 is unaffected. Add `-xerror` when checking files with FFmpeg, otherwise it reports success despite the errors.\n\nfoobar2000 can run exhale as a custom encoder: set the encoder to `exhale.exe`, extension `m4a`, and parameters `# %d`, where `#` is the preset character.\n\n## Full option reference\n\nexhale 1.2.2 takes positional arguments only ([`exhaleApp.cpp`](https://gitlab.com/ecodis/exhale/-/blob/v1.2.2/src/app/exhaleApp.cpp)); there is no `--help`, bitrate or thread option. Run it with no arguments to print usage.\n\n```text\nexhale PRESET INPUT.wav OUTPUT.m4a\nexhale PRESET OUTPUT.m4a                              # WAV from stdin\nexhale PRESET MODIFIER INTERVAL INPUT.wav OUTPUT.m4a  # expert mode\nexhale PRESET MODIFIER INTERVAL OUTPUT.m4a            # expert mode, stdin\n```\n\n| Argument / parameter | Default | Values / units | Effect |\n| --- | --- | --- | --- |\n| `PRESET` | Required; `#` means `3` | `0`–`9`, `a`–`g`; `10`–`12` in expert mode | Bitrate preset. `0`–`9` are plain xHE-AAC; `a`–`g` add eSBR for low bitrates. Quote `'#'` in a shell. |\n| `INPUT.wav` | stdin | WAV file | Input. Omit it to read WAV from stdin. |\n| `OUTPUT.m4a` | Required | `.m4a` or `.mp4` filename | Output MP4 file. |\n| Expert `MODIFIER` | None | One character: `s`, `l`, `n` (either case) or any other | Expert mode only. `s` starts media time at 0 in the edit list; `l` levels loudness to about −23 LUFS; `n` disables noise filling; anything else, such as `x`, changes nothing. Only one applies. |\n| Expert `INTERVAL` | About one second | `10`–`99` frames | Expert mode only. Frames between independent (seekable) frames. Keep it under about 2.5 seconds, e.g. at most 78 at 32 kHz. Anything else falls back to the default. |\n| `-V` | — | Flag | Print version, architecture and build date, then exit. |\n| `-v` | — | Flag | Print version and architecture, then exit. |\n| No arguments | — | Empty invocation | Print usage. |\n\n### Preset rates\n\nStereo targets as exhale reports them when encoding; actual bitrates vary with the content. Mono is half the stereo figure and 5.1 is 2.5 times it.\n\n| Preset | SBR | Stereo target |\n| --- | --- | --- |\n| `0` | Off | 48 kbit/s |\n| `1` | Off | 64 kbit/s |\n| `2` | Off | 80 kbit/s |\n| `3`, `#` | Off | 96 kbit/s |\n| `4` | Off | 112 kbit/s |\n| `5` | Off | 128 kbit/s |\n| `6` | Off | 144 kbit/s |\n| `7` | Off | 160 kbit/s |\n| `8` | Off | 176 kbit/s |\n| `9` | Off | 192 kbit/s |\n| `10` (expert) | Off | 208 kbit/s |\n| `11` (expert) | Off | 256 kbit/s |\n| `12` (expert) | Off | 288 kbit/s |\n| `a` | On | 36 kbit/s |\n| `b` | On | 48 kbit/s |\n| `c` | On | 60 kbit/s |\n| `d` | On | 72 kbit/s |\n| `e` | On | 84 kbit/s |\n| `f` | On | 96 kbit/s |\n| `g` | On | 108 kbit/s |\n"
}
