- Shell 96.9%
- Dockerfile 3.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
|
|
||
| .woodpecker | ||
| ci | ||
| docs | ||
| gputest | ||
| patches | ||
| scripts | ||
| .gitignore | ||
| LICENSE | ||
| pins.env | ||
| README.md | ||
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— matrixVARIANT=free|nonfree: build ondebian:trixie→ smoke test ondebian:trixie-slim(closure, encoders/filters/demuxers, variant check, C program built via pkg-config) → publishfree(master/tags) to<forge>/api/packages/<owner>/generic/jelly-ffmpeg/<version>/..woodpecker/publish-nonfree.yaml— manual only,PUBLISH_NONFREE=true, secretnonfree_ownermust be a private org (checked). - Local, identical to CI:
scripts/local-build.sh free|nonfree(Docker; logs inlogs/). - 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.