From ef090948791eaadfa484c28b0c6a5eaea5b19841 Mon Sep 17 00:00:00 2001 From: Shlee Date: Thu, 17 Sep 2026 19:39:31 +0930 Subject: [PATCH] Update Dockerfile --- Dockerfile | 43 +++++-------------------------------------- 1 file changed, 5 insertions(+), 38 deletions(-) diff --git a/Dockerfile b/Dockerfile index d021860a5..8e8380601 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,13 @@ -# FFmpeg build stage - compile the latest FFmpeg from source (shared/dynamic). -# Built on the SAME base image as the final stage so the compiled shared -# libraries and the codec libraries they link against are ABI-compatible when -# copied/installed into the final image. -# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="9.0.1"] FROM serversideup/php:8.5-frankenphp AS ffmpeg + +# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="9.0.1"] ARG FFMPEG_VERSION=9.0.1 ARG FFMPEG_URL=https://ffmpeg.org/releases + # x264 has no numbered releases; it is built from its rolling `stable` branch. ARG X264_URL=https://code.videolan.org/videolan/x264.git ARG X264_BRANCH=stable + # x265 version to compile, change with [--build-arg X265_VERSION="4.2"] ARG X265_VERSION=4.2 ARG X265_URL=https://bitbucket.org/multicoreware/x265_git/get @@ -16,7 +15,6 @@ ARG X265_URL=https://bitbucket.org/multicoreware/x265_git/get USER root SHELL ["/bin/bash", "-o", "pipefail", "-o", "errexit", "-c"] -# Install build tools and codec development libraries. RUN apt-get update && apt-get install -y --no-install-recommends \ autoconf \ automake \ @@ -32,12 +30,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ wget \ xz-utils \ yasm \ - # codec dev libraries. - # x264 (H.264) and x265 (HEVC) are compiled from upstream source below - # (not from Debian's older packages). AV1 uses Debian's libraries - # (libaom encode/decode, libdav1d for fast decode). - # Subtitle rendering libs (libass/fontconfig/freetype) are omitted as they - # are not needed for transcoding. libaom-dev \ libdav1d-dev \ libmp3lame-dev \ @@ -51,9 +43,6 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ libbz2-dev \ && rm -rf /var/lib/apt/lists/* -# Build x264 (H.264 encoder) from its upstream `stable` branch as shared libs. -# Installs into /usr/local so FFmpeg's configure finds it via pkg-config ahead -# of any Debian-packaged version. WORKDIR /usr/local/x264/src RUN git clone --depth 1 --branch ${X264_BRANCH} ${X264_URL} . \ && ./configure \ @@ -65,7 +54,6 @@ RUN git clone --depth 1 --branch ${X264_BRANCH} ${X264_URL} . \ && make install \ && ldconfig -# Build x265 (HEVC encoder) from upstream source as shared libs (uses CMake). WORKDIR /usr/local/x265/src ADD ${X265_URL}/${X265_VERSION}.tar.gz /usr/local/x265/src/x265.tar.gz RUN tar xf x265.tar.gz --strip-components=1 @@ -80,21 +68,12 @@ RUN cmake -G "Unix Makefiles" \ && ldconfig WORKDIR /usr/local/ffmpeg/src -# Download and extract FFmpeg source ADD ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz /usr/local/ffmpeg/src/ RUN tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz WORKDIR /usr/local/ffmpeg/src/ffmpeg-${FFMPEG_VERSION} -# Configure, compile and install FFmpeg into /usr/local/ffmpeg. -# Built with --enable-shared: the ffmpeg/ffprobe binaries link dynamically -# against the codec libraries. The FFmpeg shared libs are copied into the final -# image and the codec runtime packages are installed there via apt. -# PKG_CONFIG_PATH / extra flags ensure the source-built x264 & x265 in -# /usr/local are discovered ahead of any Debian-packaged versions. -# --toolchain=hardened : compiler hardening (stack protector, FORTIFY, RELRO) -# for a tool that parses untrusted user-uploaded media. -# --enable-lto : link-time optimization for a small runtime speedup. +# --toolchain=hardened : compiler hardening (stack protector, FORTIFY, RELRO) for a tool that parses untrusted user-uploaded media. ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig" RUN ./configure \ --prefix=/usr/local/ffmpeg \ @@ -134,12 +113,6 @@ WORKDIR /var/www/html USER root -# Install system dependencies. -# NOTE: ffmpeg itself is NOT installed from apt; it is compiled from source in -# the `ffmpeg` build stage above and copied in below. The codec runtime shared -# libraries that the source-built FFmpeg links against ARE installed here via -# apt. x264 and x265 are NOT installed here; their source-built shared -# libraries are copied in from the build stage below. RUN apt-get update && apt-get install -y \ unzip \ zip \ @@ -150,7 +123,6 @@ RUN apt-get update && apt-get install -y \ libvips42 \ git \ curl \ - # runtime codec libraries required by the source-built FFmpeg. libaom-dev \ libdav1d-dev \ libmp3lame0 \ @@ -178,17 +150,12 @@ RUN install-php-extensions \ vips \ ffi -# Copy the source-built FFmpeg binaries and shared libraries into the final image. -# Binaries go to /usr/bin to match the ffmpeg/ffprobe defaults (/usr/bin/ffmpeg, -# /usr/bin/ffprobe). COPY --from=ffmpeg /usr/local/ffmpeg/bin/ffmpeg /usr/bin/ffmpeg COPY --from=ffmpeg /usr/local/ffmpeg/bin/ffprobe /usr/bin/ffprobe COPY --from=ffmpeg /usr/local/ffmpeg/lib /usr/local/lib -# Copy the source-built x264 and x265 shared libraries that FFmpeg links against. COPY --from=ffmpeg /usr/local/lib/libx264.so* /usr/local/lib/ COPY --from=ffmpeg /usr/local/lib/libx265.so* /usr/local/lib/ -# Refresh the dynamic linker cache and smoke-test the media processors RUN ldconfig \ && /usr/bin/ffmpeg -version \ && /usr/bin/ffprobe -version