How ffmpeg is put together
FFmpeg is a multimedia processing framework written primarily in C that provides libraries and CLI tools to decode, encode, transcode, filter, and stream audio/video content. The architecture is layered: libavutil supplies core utilities, libavcodec handles codecs, libavformat handles container formats and protocols, with libavfilter/libswscale/libswresample/libavdevice providing filtering, scaling, resampling, and device access. Data flows from demuxers/protocols in libavformat through decoders in libavcodec into filter graphs in libavfilter, then out through encoders and muxers. The fftools directory contains the end-user applications (ffmpeg, ffplay, ffprobe) built on top of these libraries, and the build is driven by a custom configure script plus GNU Make makefiles in ffbuild.
Languages
Infrastructure
Major components
libavcodec
Implements audio/video/subtitle codecs — encoders, decoders, and bitstream parsers (e.g., aac*, ac3*, adpcm* files).
libavformat
Implements streaming protocols, container formats (muxers/demuxers), and basic I/O access.
libavutil
Provides hashers, decompressors, and miscellaneous utility functions shared by all other libraries.
libavfilter
Provides alteration of decoded audio and video through a directed graph of connected filters.
libavdevice
Provides an abstraction layer to access capture and playback devices.
libswscale / libswresample
Implement color conversion/scaling routines and audio mixing/resampling routines respectively.
fftools
Command-line tools: ffmpeg.c plus split ffmpeg_dec/mux/filter/sched modules, ffplay.c player, and ffprobe.c analyzer.
ffbuild + compat
Build-system makefiles/scripts (common.mak, library.mak, version.sh) and portability shims for non-POSIX platforms (w32pthreads.h, os2threads.h).
A quiet week with two targeted fixes: one restoring builds on Apple Silicon Macs, another updating the external AAC encoder to current APIs.
5 weeksWeek of 2026-08-24
Week of 2026-08-24latest
A quiet week with two targeted fixes: one restoring builds on Apple Silicon Macs, another updating the external AAC encoder to current APIs.
Week of 2026-08-17
The AAC encoder gained support for advanced surround-sound formats including ambisonics and height channels, while dozens of cleanup and bugfix patches landed across codecs and tests.
Week of 2026-08-10
Vulkan hardware encoding and decoding received major reliability upgrades, and the CUDA scaling filter was restructured for smarter scaling decisions.
Week of 2026-08-03
MP3 writing gained gapless-playback support for non-seekable outputs, the scaling engine got threading speedups, and many parsers were hardened against corrupt input.
Week of 2026-07-27
iTunes-style gapless playback info is now read from MP3 files, compiler warnings were swept away en masse, and machine-learning filters gained faster CUDA integration.
Over the last month, FFmpeg development focused heavily on audio encoding improvements—especially AAC channel layouts (ambisonics and height channels)—plus a wave of modernization replacing old MMX instructions with SSE2 across video codecs. There was also substantial work on Vulkan-based hardware video encoding/decoding for H.264, HEVC, and FFV1, alongside numerous robustness fixes that guard against malformed files. Performance work continued in the scaling engine (swscale), which gained multithreading and smarter internal buffer handling.
Week by week
2026-08-24A quiet week with two targeted fixes: one restoring builds on Apple Silicon Macs, another updating the external AAC encoder to current APIs.latest2 changes
Fix
Fixed macOS ARM build tooling
The checkasm testing utility now builds correctly on Macs using ARM processors.
Refactor
Updated fdk-aac encoder
The AAC encoder plugin no longer uses a deprecated way of describing speaker/channel arrangements, keeping it compatible with newer library versions.
2026-08-17The AAC encoder gained support for advanced surround-sound formats including ambisonics and height channels, while dozens of cleanup and bugfix patches landed across codecs and tests.6 changes
Feature
AAC ambisonic audio support
FFmpeg's built-in AAC encoder can now encode 3D/spatial (ambisonic) audio layouts.
Feature
Height-channel speaker layouts in AAC
The encoder can now write PCE headers describing speakers placed above the listener, like in cinema-style sound setups, with matching test coverage added.
Refactor
MMX replaced by SSE2 in several decoders
Older single-instruction routines used by the VP9, PNG, and H.264 decoders were upgraded to the more modern SSE2 instruction set.
Fix
H.264 Vulkan decoding correctness
Video decoding via Vulkan now correctly reads whether a stream uses progressive or interlaced frames from the stream settings.
Fix
E-AC-3 in MP4 fix
Writing E-AC-3 audio into MP4 files now derives channel information correctly for dependent substreams, verified by a new automated test.
Fix
Robustness hardening
Several file readers (GENH, FSB) and network writers (DASH, HTTP) now handle truncated data or failed allocations gracefully instead of misbehaving.
2026-08-10Vulkan hardware encoding and decoding received major reliability upgrades, and the CUDA scaling filter was restructured for smarter scaling decisions.6 changes
Refactor
Faster HEVC encoding via Vulkan
Hardware-accelerated HEVC encoding through Vulkan got optimization work to speed it up.
Fix
Vulkan reference-picture handling improved
The Vulkan decoder now prefers the more reliable 'distinct' mode when a graphics driver offers multiple ways to manage reference frames.
Fix
H.264 Vulkan encoder profile fixes
The Vulkan H.264 encoder now signals the correct profile information and disables B-frames for baseline profiles where they aren't allowed.
Refactor
CUDA scaler optimizations
The GPU-based scale filter now accounts for chroma subsampling and skips unnecessary intermediate textures and disabled processing steps, making scaling more efficient.
Fix
Reverted decoder throttling change
A recent change allowing throttled decoder output was rolled back after problems.
Chore
More MMX-to-SSE2 migrations
VP8, VP9, and HEVC assembly routines were ported off legacy MMX instructions.
2026-08-03MP3 writing gained gapless-playback support for non-seekable outputs, the scaling engine got threading speedups, and many parsers were hardened against corrupt input.6 changes
Feature
Gapless MP3 writing
When writing MP3s to streams that can't be rewound (like pipes), FFmpeg now buffers metadata so gapless playback info is preserved.
Refactor
Multithreaded pixel-format conversions
The swscale image-scaling subsystem now uses multiple threads for generating conversion operations and macro building, speeding things up.
Refactor
Smarter plane copying in swscale
The new scaling graph can skip redundant memory copies when source and destination planes are identical, reducing wasted work.
Fix
AC-3 audio quality fix
The float AC-3 decoder no longer truncates coefficients, avoiding small precision losses, and the fixed-point variant had its dither corrected.
Fix
Malformed-input protection
RTP streamers and file readers (VC2, HEVC, MPEG, DASH) now reject oversized or negative values instead of risking buffer overruns.
Fix
Dynamic HDR metadata fix
Parsing HDR10+ dynamic metadata now correctly returns nothing rather than an error when no data is present.
2026-07-27iTunes-style gapless playback info is now read from MP3 files, compiler warnings were swept away en masse, and machine-learning filters gained faster CUDA integration.6 changes
Feature
Reading iTunes gapless info from MP3s
FFmpeg can now parse iTunes' gapless playback tags, so albums play without tiny gaps between tracks.
Refactor
Zero-copy CUDA for AI filters
The deep-learning filter backend can now pass tensors directly on the GPU without extra copies when using Torch, speeding up AI-powered filtering.
Fix
H.264 interlaced-video fix
The H.264 decoder now properly waits for both fields of an interlaced frame pair before using them as references, avoiding glitches.
Chore
Compiler warning cleanup
Numerous code spots were annotated so the compiler stops flagging intentional behavior like switch fall-throughs and unused helpers.
Refactor
GPU-side slice gathering for ProRes
The Vulkan ProRes encoder now collects encoded slices directly on the GPU, reducing transfers.
Fix
BMP and ID3 tag handling fixes
16-bit BMP images decode without misaligned memory reads, and legacy ID3 comment-tag behavior is now opt-in rather than automatic.
Dependencies and code review
Dependency advisories
Security Watch
No known advisories across 0 scanned dependencies.
No known advisories in the scanned dependencies.
Code review
No concrete code-level issues confirmed.
Get this report every week for your repos.
GitZoid learns each repo, reports what changed, and flags what needs attention. One flat price for the whole team.
$19 a month, flat · First 10 outputs free · No card required