No description
  • Shell 96.9%
  • Dockerfile 3.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
8lackangel 6810e0aac2
Some checks failed
ci/woodpecker/manual/build/1 Pipeline failed
ci/woodpecker/manual/build/2 Pipeline failed
deps: add patch and rsync; build: re-prepare unless the series was fully applied; gputest from tarball
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-13 00:32:59 +01:00
.woodpecker jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
ci jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
docs jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
gputest deps: add patch and rsync; build: re-prepare unless the series was fully applied; gputest from tarball 2026-11-13 00:32:59 +01:00
patches jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
scripts deps: add patch and rsync; build: re-prepare unless the series was fully applied; gputest from tarball 2026-11-13 00:32:59 +01:00
.gitignore jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
LICENSE jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
pins.env jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00
README.md jelly-ffmpeg: build scripts, pins, Woodpecker CI and dev-tarball packaging 2026-11-13 00:28:52 +01:00

jelly-ffmpeg

The FFmpeg build used by Jelly: jellyfin-ffmpeg (pinned tag + its patch series, with two patches excluded and one rebased) built with clang in a full configuration, in two variants, and shipped as relocatable dev tarballs with all dependencies so that Jelly never has to rebuild FFmpeg.

Variant Configure Licence of the build Distribution
free everything jellyfin-ffmpeg enables + extra Debian libraries; never --enable-nonfree GPL-3.0-or-later published to the package registry, with Corresponding Source
nonfree free + --enable-nonfree --enable-libfdk-aac GPL + FDK AAC licence (incompatible) not redistributable in binary form; built and tested in CI, published only by hand to a private owner

Decision record: ADR 0022 in the Jelly repository (own patched FFmpeg; jellyfin-ffmpeg base; full build in two variants). Patch inventory and licence notes: docs/patches.csv, docs/first-build-notes.md.

What a dev tarball contains

jelly-ffmpeg-<version>-<variant>-linux-x86_64-trixie.tar.xz → one top-level directory with bin/ (ffmpeg, ffprobe), lib/ (FFmpeg libraries and every runtime dependency except the C/C++ runtime, all with RUNPATH=$ORIGIN, so nothing has to be installed), include/, lib/pkgconfig/ (relocatable: prefix=${pcfiledir}/../..), env.sh, BUILDINFO.txt (pins, compiler, configure line, patch-inventory hash), BUNDLED_PACKAGES.txt (library → Debian package, version, source package), lib/bundled-licenses/, share/licenses/, SHA256SUMS. Target: x86-64 glibc systems compatible with Debian 13 (glibc ≥ 2.41). GPU user-space drivers (VA-API drivers, NVIDIA libcuda/libnvidia-encode, oneVPL runtime, Vulkan ICDs) are not bundled: they come from the host, as for any FFmpeg.

Use: tar xf jelly-ffmpeg-…tar.xz && . jelly-ffmpeg-…/env.sh → ffmpeg, and pkg-config --cflags --libs libavformat for building against it.

Version

<jellyfin-ffmpeg tag>.jelly<JELLY_REVISION> for tags (e.g. 7.1.4-3.jelly1), plus +git<commit time>.g<sha> for untagged CI builds (scripts/version.sh).

Build

  • CI (Woodpecker): .woodpecker/build.yaml — matrix VARIANT=free|nonfree: build on debian:trixie → smoke test on debian:trixie-slim (closure, encoders/filters/demuxers, variant check, C program built via pkg-config) → publish free (master/tags) to <forge>/api/packages/<owner>/generic/jelly-ffmpeg/<version>/. .woodpecker/publish-nonfree.yaml — manual only, PUBLISH_NONFREE=true, secret nonfree_owner must be a private org (checked).
  • Local, identical to CI: scripts/local-build.sh free|nonfree (Docker; logs in logs/).
  • Pieces: scripts/deps.sh, fetch-source.sh (network), prepare-source.sh, configure.sh, build.sh, bundle.sh, smoke-test.sh. Pins: pins.env.

Device tests

gputest/ holds the hardware test used for Intel, AMD and NVIDIA (jff-test.sh), a GPU test image and a kit bundler for hosts without Docker. Results are recorded in the Jelly repository (contracts/jelly-ffmpeg/README.md, hardware/jelly-ffmpeg/).

Licence

Build scripts: AGPL-3.0-or-later (as Jelly). FFmpeg and the patches: see share/licenses/ inside each tarball and docs/patches.csv.