On August 4, 2026, FFmpeg shipped major version 9.0, codename “Lei,” about four and a half months after 8.1 “Hoare.” This is a real ABI-breaking major release: all seven core libraries bumped versions (libavutil 61, libavcodec 63, libavformat 63, and the rest), so every application linking them must rebuild. The scale: more than 2,200 commits from over 160 contributors, roughly 85,000 lines added and 33,000 removed. Jean-Baptiste Kempf’s breakdown frames it as the release VLC 4 will build on.
The swscale Rewrite Finally Lands
The headline is the multi-year rewrite of swscale — the conversion code that nearly every pipeline touches at some point. It was led by Niklas Haas with more than 300 commits, plus Ramiro Polla’s work on ARM. The new design decomposes color conversions into lists of elementary operations, then compiles them into kernel chains. Backends cover a C reference implementation, a memcpy path, x86 SIMD, AArch64 NEON, and Vulkan SPIR-V — the same conversion graph can run on CPU or GPU. Internally, exact 64-bit rational math replaces floating point, and the Vulkan backend honors SWS_BITEXACT. The whole new path still sits behind the SWS_UNSTABLE flag, which tells you how carefully the project is treading. PAL8 support came along for the ride.
New Codecs, Cameras, and HDR
The feature list has real highlights. Animated WebP can finally be decoded — the ticket dates to 2015, and issue 4907’s title asked why FFmpeg only decoded the first frame. The AAC decoder now handles 960-sample frames for DAB+. NVENC gains AV1 hierarchical B-frame references, 12-bit input, and Video Codec SDK 13.1 support. ProRes RAW gets VideoToolbox and Vulkan decoding. FFV1 can now losslessly encode Bayer sensor data, with a Vulkan GPU encoder and decoder — partly funded by the Sovereign Tech Fund. On the HDR side, there is a bitstream filter to split Dolby Vision Profile 7 enhancement layers, plus SMPTE 2094-50 dynamic HDR metadata support. libavformat adds a demuxer command API, first used for RTSP camera control, and a shared: protocol built on cross-process memory mapping, while LCEVC muxing as MP4 tracks and IAMF dynamic parameters round out the format work. And one entry that is not important but is cool: a 1-bit 400x240 video encoder for the Playdate, which its author introduced with exactly that phrase.
Assembly work kept pace too: the last MMX code is gone from x86, with mpegvideoenc’s final MMX routines ported to SSE2 and AVX2; ARM saw a reworked NEON yuv2rgb; RISC-V picked up RVV implementations for HEVC and pixel operations.
Safer Defaults and a New Development Home
Two changes affect everyone. TLS peer certificate verification is now on by default — the previous default-off behavior was long-criticized security debt. And the -vsync option is removed in favor of -fps_mode. Shaders are now compiled to SPIR-V at build time, and hwcontext gained new pixel formats such as RGBAF16. The cleanup extended to dead weight: the standalone CELT decoder, broken since 2014 with, in a maintainer’s words, no one noticing or complaining, is gone, along with Michael Niedermayer’s early-2000s Sonic codecs. The development process changed too: the project’s home has moved to a Forgejo instance at code.ffmpeg.org, and the project states plainly that GitHub pull requests will be ignored — contributors relying on the GitHub mirror need to use the official channels. An automated bug-finding bot landed nine hardening patches of its own.
What It Means for Developers
Maintainers of multimedia pipelines have an upgrade checklist in the short term: the ABI break means applications tied to prebuilt libraries must wait for downstream rebuilds, and VLC 4 will follow the same version bumps. In the long run they get a cleaner swscale and a usable GPU path out of it. The -re/-readrate throttling fix, which now paces on the slowest stream, will quietly repair subtitle-starved restreams for anyone running 24/7 relays. Also worth watching: DNN filters gained an ONNX Runtime backend with CUDA and DirectML support, connecting local AI inference to FFmpeg’s filter graph — a line worth tracking for any team doing media processing. Nothing here changes what FFmpeg is for; it changes how much of the modern GPU and AI stack the CLI can reach.
Sources
AI-assisted summary compiled from the sources above, reviewed by a human before publishing.
