FFmpeg 5.0

17 January 2022

FFmpeg 5.0 release

Today, FFmpeg made a new release, numbered 5.0, called Lorentz.

This release is a major release, with numerous API changes, a few new features, and because we hope to have this one as LTS.

Big API changes and deprecations

FFmpeg has had a lot of API changes during its history, but the project is very careful about those deprecations and removals: we deprecate then we wait to allow the users time to upgrade, then we remove the APIs, because it could break the users programs.
But lately a lot of the APIs marked as deprecated were kept. Worse, internally, some of those APIs were still used, because it has been 4 years since we last removed anything.

So, in FFmpeg 5.0, a huge patchset removing all those deprecated APIs was merged last April. You can see that the patchset is more than 80 commits of removal :)

Some APIs were deprecated since 2013 and the changes can appear huge. But it’s a good thing for the project, to avoid too much cruft. However it will probably require you to update your application (unless you did follow the deprecations very closely).

Some of the main API changes are:

  • avcodec encoding+decoding change
    • Single API for Audio & Video
    • Decoupled codec input & output
  • new callback allowing encoders to output data into user-managed buffers
  • AVFrame based API in swscale
  • disentangled avformat and avcodec
    • demuxers no longer embed an entire decoder context
  • new bitstream filtering API
    • can be used as codec header analyzer
  • codec/format registration APIs removed, all formats are always registered
  • type safety: int to size_t replacements in various APIs
  • libavresample removal

In the meantime, you can still use FFmpeg 4.4, that is still supported :)

Features

You can see the features for 5.0 on the website, but I will focus on the most important ones.

FFmpeg 5.0 has:

  • a few new decoders, including a native speex decoder and decoders for MSN Siren, GEM Image and Apple Graphics (SMC);
  • big additions to VideoToolbox support with VP9 and Prores decoding and Prores encoding;
  • improvements on Vulkan support and notably Vulkan filters;
  • optimizations for the loongarch platform;
  • slice-threading in swscale;
  • RTP packetizer for uncompressed video (RFC 4175);
  • support for libplacebo video filter for all your HDR needs;
  • numerous audio and video filters, notably segment, latency, decorrelate and several color filters;

and a few other (see the Changelog and the git log).

LTS and time-based releases?

Finally, this FFmpeg 5.0 release is important, because I hope that this release will start a new scheduling of FFmpeg releases.

I’d like to see one major release per year, and a LTS every other year. Which would mean 5.x would be a LTS release…

We’ll see how realistic this is.

Enjoy this release!

Jean-Baptiste Kempf