Summary: FFmpeg 9.0, codename Lei, shipped on August 4, 2026 with an ABI break across all seven core libraries, requiring linked applications to be rebuilt. The release includes the long-running swscale rewrite with CPU and GPU backends and turns TLS peer-certificate verification on by default. Development has also moved to a Forgejo instance, where GitHub pull requests will be ignored.
FFmpeg shipped major version 9.0, codename “Lei,” on August 4, 2026, about four and a half months after 8.1 “Hoare.” The ABI break here is the real thing: all seven core libraries carry new version numbers (libavutil 61, libavcodec 63, libavformat 63, and the rest), so every application linked against them has to be rebuilt. By the numbers, the release brings in more than 2,200 commits from over 160 contributors, adding roughly 85,000 lines and removing 33,000. Jean-Baptiste Kempf’s write-up treats it as the release VLC 4 will be built on.
The swscale Rewrite, Years in the Making, Has Landed
Top of the bill is swscale’s rewrite, years in the making — the conversion code that nearly every pipeline runs into somewhere. Niklas Haas drove it with more than 300 commits of his own, while Ramiro Polla handled the ARM side. The new design takes a color conversion, breaks it into a list of elementary operations, and compiles those into kernel chains. Backends on offer include a C reference implementation, a memcpy path, x86 SIMD, AArch64 NEON and Vulkan SPIR-V, so a single conversion graph can execute on CPU or GPU. Exact 64-bit rational arithmetic replaces floating point internally, and the Vulkan backend honors SWS_BITEXACT as well. All of it still sits behind the SWS_UNSTABLE flag, which tells you how carefully the project is treading. PAL8 support came along for the ride.
New Decoding, Encoding, and HDR Capabilities
The feature list has real substance. Animated WebP is finally decodable: the ticket goes back to 2015, issue 4907, and its title was framed around the question of why only the first frame came out. The AAC decoder now copes with 960-sample frames for DAB+. NVENC picks up AV1 hierarchical B-frame references, 12-bit input, and Video Codec SDK 13.1 support. ProRes RAW becomes decodable through VideoToolbox and Vulkan. FFV1 gains lossless encoding of Bayer sensor data, plus a Vulkan GPU encoder and decoder — partly funded by the Sovereign Tech Fund. On the HDR front, a bitstream filter splits Dolby Vision Profile 7 enhancement layers, and SMPTE 2094-50 dynamic HDR metadata is supported. libavformat contributes a demuxer command API, first put to use for RTSP camera control, a shared: protocol built on cross-process memory mapping, LCEVC muxing as MP4 tracks, and IAMF dynamic parameters. Then there is the entry that is not important but is cool: a 1-bit 400x240 video encoder for the Playdate, introduced by its author in exactly those words.
Assembly work kept pace too. The last MMX code is gone from x86, mpegvideoenc’s remaining MMX routines having been ported to SSE2 and AVX2; ARM got a reworked NEON yuv2rgb; and RISC-V gained RVV implementations for HEVC and pixel operations.
Safer Defaults and a New Home for Development
Two of the changes reach everyone. TLS peer certificate verification now defaults to on — the old default-off behavior was security debt that drew criticism for years. The -vsync option is gone, replaced by -fps_mode. Shaders are compiled to SPIR-V at build time now, and hwcontext has picked up new pixel formats such as RGBAF16. The housekeeping reached the dead weight as well: the standalone CELT decoder, broken since 2014 and, in a maintainer’s words, missed by no one, has been dropped, together with Michael Niedermayer’s Sonic codecs from the early 2000s. The process changed too — the project’s home has moved to a Forgejo instance at code.ffmpeg.org, and it states plainly that GitHub pull requests will be ignored, so contributors who rely on the GitHub mirror need to use the official channels. An automated bug-finding bot landed nine hardening patches of its own.
What This Means for Developers
Maintainers of multimedia pipelines face an upgrade checklist in the near term: because the ABI broke, applications tied to prebuilt libraries have to wait for downstream rebuilds, and VLC 4 will follow the same version bumps. Longer term, the payoff is a cleaner swscale and a GPU path that actually works. The -re/-readrate throttling fix, now paced on the slowest stream, will quietly repair subtitle-starved restreams for anyone running 24/7 relays. Also worth tracking: DNN filters picked up an ONNX Runtime backend with CUDA and DirectML support, wiring local AI inference into FFmpeg’s filter graph — something for any team doing media processing to keep an eye on. None of this changes what FFmpeg is for; what it changes is how much of the modern GPU and AI stack the CLI can reach.
