github markus-perl/ffmpeg-build-script v1.60
V1.60

6 hours ago

Highlights

  • FFmpeg 9.0 (was 8.1).
  • Subtitle rendering: libass is now built and enabled, together with fribidi
    (bidirectional text), harfbuzz (text shaping), libunibreak (Unicode line breaking for
    CJK/Thai) and fontconfig (font lookup by name). SRT/ASS subtitles can be burned into video
    via the subtitles and ass filters, and drawtext now accepts font=Helvetica instead of
    requiring an explicit fontfile= path.
  • AviSynth+ support (--enable-avisynth, GPL/non-free builds only). Only the headers are
    built; the AviSynth+ library is loaded at runtime and has to be installed separately.
  • libxml2 is built and enabled, which the DASH and IMF demuxers require.
  • lcms2 is now actually enabled, giving ICC profile support in the image decoders and the
    iccdetect/iccgen filters.
  • CUDA 13.3.1 for the CUDA docker image (was 12.6.2/12.9.0).
  • The README now documents what every optional library actually enables.

Fixes

  • ffplay was silently not being built. ffmpeg 9.0 requires SDL2 (sdl2 >= 2.0.1, < 3.0.0),
    so the SDL3 build produced no usable sdl2.pc and configure quietly dropped ffplay. The build
    still reported success and the docker images then failed copying a binary that never existed.
    The script is back on SDL2.
  • --enable-vaapi was never passed. library_exists() tested pkg-config's (empty) output
    instead of its exit code and always reported the library as missing.
  • A failed cd after extraction only exited a subshell, so the script kept building in the
    previous package's directory.
  • Unknown --options were silently ignored. The argument parser now has one explicit case
    per option and errors out on anything else; cleanup is deferred until the whole command line
    has been parsed.
  • .git is restored from .git.bak via an EXIT trap, so a failed build no longer leaves
    the repository renamed.
  • Binaries are portable again: removed -march=native (zix) and -C target-cpu=native
    (rav1e).
  • The install step checks each copy, only handles ffplay and manpages when they were actually
    built, and no longer prints a misleading "already built" message for ffmpeg itself.
  • --enable-libzmq was only added inside the libzmq build block, so it was dropped on rebuilds.
  • Fixed the giflib 6.x install, the fontconfig tools linking against static brotli, GNU mirror
    downloads, and the OpenCL ICD loader building its test suite unnecessarily.
  • gperf is now built, since fontconfig needs it on Linux.
  • Fontconfig configuration and DejaVu fonts are shipped in the docker images
    (FONTCONFIG_PATH=/etc/fonts); without this, drawtext cannot resolve fonts by name and
    libass falls back to a default font.
  • The full-static CI job pulled a CUDA base image it never used — it builds FROM ubuntu:24.04.

Build script / CI

  • Every dependency now builds in its own build_<package>() function, dispatched from the
    ordered PACKAGE_BUILD_ORDER array. Behavior is unchanged — verified against stubbed execution
    transcripts in 17 configurations and a full docker build producing an identical ffmpeg
    configure line.
  • Shell formatting is pinned with .editorconfig and enforced in CI by a new lint job running
    shfmt and shellcheck --severity=error. The reformatting commits are listed in
    .git-blame-ignore-revs.
  • actions/checkout updated to v5 (v4 runs on the deprecated Node.js 20 runtime).
  • The cuda-samples checkout is pinned to a tag matching the CUDA version instead of tracking
    master, whose directory layout changed in v13.0.

Dependency updates

FreeType2 2.14.3, VapourSynth R78, amf 1.5.2, autoconf 2.73, av1 3.14.1, cmake 4.4.2,
dav1d 1.5.4, giflib 6.1.3, gnutls 3.8.13, lame 4.0, lcms2 2.19.1, libjxl 0.12.0, libpng 1.6.58,
libsdl 2.32.10, libtiff 4.7.2, libtool 2.6.2, lilv 0.28.0, m4 1.4.21, nasm 3.02, nettle 4.0,
nv-codec 13.1.15.0, opencl-headers/icd-loader 2026.05.29, openssl 4.0.1, serd 0.32.10,
srt 1.5.6, svtav1 4.2.0, vid.stab 1.1.2, vulkan-headers 1.4.358, x265 b81f650, zix 0.8.2,
plus new: avisynth 3.7.5, fontconfig 2.18.3, fribidi 1.0.16, gperf 3.3, harfbuzz 14.3.0,
libass 0.17.5, libunibreak 7.0, libxml2 2.15.3.

glslang is no longer built: ffmpeg 9.0 dropped --enable-libglslang.

Full changelog: v1.59...v1.60

Don't miss a new ffmpeg-build-script release

NewReleases is sending notifications on new releases.