Build ffmpeg from source in Dockerfile (#30569)
This commit is contained in:
		
				
					committed by
					
						
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							d558dfd77d
						
					
				
				
					commit
					d97fcd0cbb
				
			
							
								
								
									
										87
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										87
									
								
								Dockerfile
									
									
									
									
									
								
							@@ -24,10 +24,10 @@ FROM docker.io/node:${NODE_MAJOR_VERSION}-${DEBIAN_VERSION}-slim as node
 | 
			
		||||
FROM docker.io/ruby:${RUBY_VERSION}-slim-${DEBIAN_VERSION} as ruby
 | 
			
		||||
 | 
			
		||||
# Resulting version string is vX.X.X-MASTODON_VERSION_PRERELEASE+MASTODON_VERSION_METADATA
 | 
			
		||||
# Example: v4.2.0-nightly.2023.11.09+something
 | 
			
		||||
# Overwrite existence of 'alpha.0' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"]
 | 
			
		||||
# Example: v4.3.0-nightly.2023.11.09+pr-123456
 | 
			
		||||
# Overwrite existence of 'alpha.X' in version.rb [--build-arg MASTODON_VERSION_PRERELEASE="nightly.2023.11.09"]
 | 
			
		||||
ARG MASTODON_VERSION_PRERELEASE=""
 | 
			
		||||
# Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="pr-12345"]
 | 
			
		||||
# Append build metadata or fork information to version.rb [--build-arg MASTODON_VERSION_METADATA="pr-123456"]
 | 
			
		||||
ARG MASTODON_VERSION_METADATA=""
 | 
			
		||||
 | 
			
		||||
# Allow Ruby on Rails to serve static files
 | 
			
		||||
@@ -100,9 +100,7 @@ RUN \
 | 
			
		||||
  apt-get dist-upgrade -yq; \
 | 
			
		||||
# Install jemalloc, curl and other necessary components
 | 
			
		||||
  apt-get install -y --no-install-recommends \
 | 
			
		||||
    ca-certificates \
 | 
			
		||||
    curl \
 | 
			
		||||
    ffmpeg \
 | 
			
		||||
    file \
 | 
			
		||||
    libjemalloc2 \
 | 
			
		||||
    patchelf \
 | 
			
		||||
@@ -137,7 +135,10 @@ RUN \
 | 
			
		||||
--mount=type=cache,id=apt-lib-${TARGETPLATFORM},target=/var/lib/apt,sharing=locked \
 | 
			
		||||
# Install build tools and bundler dependencies from APT
 | 
			
		||||
  apt-get install -y --no-install-recommends \
 | 
			
		||||
    autoconf \
 | 
			
		||||
    automake \
 | 
			
		||||
    build-essential \
 | 
			
		||||
    cmake \
 | 
			
		||||
    git \
 | 
			
		||||
    libgdbm-dev \
 | 
			
		||||
    libglib2.0-dev \
 | 
			
		||||
@@ -146,9 +147,12 @@ RUN \
 | 
			
		||||
    libidn-dev \
 | 
			
		||||
    libpq-dev \
 | 
			
		||||
    libssl-dev \
 | 
			
		||||
    libtool \
 | 
			
		||||
    meson \
 | 
			
		||||
    nasm \
 | 
			
		||||
    pkg-config \
 | 
			
		||||
    shared-mime-info \
 | 
			
		||||
    xz-utils \
 | 
			
		||||
	# libvips components
 | 
			
		||||
    libcgif-dev \
 | 
			
		||||
    libexif-dev \
 | 
			
		||||
@@ -162,6 +166,16 @@ RUN \
 | 
			
		||||
    libspng-dev \
 | 
			
		||||
    libtiff-dev \
 | 
			
		||||
    libwebp-dev \
 | 
			
		||||
  # ffmpeg components
 | 
			
		||||
    libdav1d-dev \
 | 
			
		||||
    liblzma-dev \
 | 
			
		||||
    libmp3lame-dev \
 | 
			
		||||
    libopus-dev \
 | 
			
		||||
    libsnappy-dev \
 | 
			
		||||
    libvorbis-dev \
 | 
			
		||||
    libvpx-dev \
 | 
			
		||||
    libx264-dev \
 | 
			
		||||
    libx265-dev \
 | 
			
		||||
  ;
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
@@ -190,6 +204,48 @@ RUN \
 | 
			
		||||
  ninja; \
 | 
			
		||||
  ninja install;
 | 
			
		||||
 | 
			
		||||
# Create temporary ffmpeg specific build layer from build layer
 | 
			
		||||
FROM build as ffmpeg
 | 
			
		||||
 | 
			
		||||
# ffmpeg version to compile, change with [--build-arg FFMPEG_VERSION="7.0.x"]
 | 
			
		||||
# renovate: datasource=repology depName=ffmpeg packageName=openpkg_current/ffmpeg
 | 
			
		||||
ARG FFMPEG_VERSION=7.0.1
 | 
			
		||||
# ffmpeg download URL, change with [--build-arg FFMPEG_URL="https://ffmpeg.org/releases"]
 | 
			
		||||
ARG FFMPEG_URL=https://ffmpeg.org/releases
 | 
			
		||||
 | 
			
		||||
WORKDIR /usr/local/ffmpeg/src
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  curl -sSL -o ffmpeg-${FFMPEG_VERSION}.tar.xz ${FFMPEG_URL}/ffmpeg-${FFMPEG_VERSION}.tar.xz; \
 | 
			
		||||
  tar xf ffmpeg-${FFMPEG_VERSION}.tar.xz; \
 | 
			
		||||
  cd ffmpeg-${FFMPEG_VERSION}; \
 | 
			
		||||
  ./configure \
 | 
			
		||||
    --prefix=/usr/local/ffmpeg \
 | 
			
		||||
    --toolchain=hardened \
 | 
			
		||||
    --disable-debug \
 | 
			
		||||
    --disable-devices \
 | 
			
		||||
    --disable-doc \
 | 
			
		||||
    --disable-ffplay \
 | 
			
		||||
    --disable-network \
 | 
			
		||||
    --disable-static \
 | 
			
		||||
    --enable-ffmpeg \
 | 
			
		||||
    --enable-ffprobe \
 | 
			
		||||
    --enable-gpl \
 | 
			
		||||
    --enable-libdav1d \
 | 
			
		||||
    --enable-libmp3lame \
 | 
			
		||||
    --enable-libopus \
 | 
			
		||||
    --enable-libsnappy \
 | 
			
		||||
    --enable-libvorbis \
 | 
			
		||||
    --enable-libvpx \
 | 
			
		||||
    --enable-libwebp \
 | 
			
		||||
    --enable-libx264 \
 | 
			
		||||
    --enable-libx265 \
 | 
			
		||||
    --enable-shared \
 | 
			
		||||
    --enable-version3 \
 | 
			
		||||
  ; \
 | 
			
		||||
  make -j$(nproc); \
 | 
			
		||||
  make install;
 | 
			
		||||
 | 
			
		||||
# Create temporary bundler specific build layer from build layer
 | 
			
		||||
FROM build as bundler
 | 
			
		||||
 | 
			
		||||
@@ -289,6 +345,20 @@ RUN \
 | 
			
		||||
    libwebp7 \
 | 
			
		||||
    libwebpdemux2 \
 | 
			
		||||
    libwebpmux3 \
 | 
			
		||||
  # ffmpeg components
 | 
			
		||||
    libdav1d6 \
 | 
			
		||||
    libmp3lame0 \
 | 
			
		||||
    libopencore-amrnb0 \
 | 
			
		||||
    libopencore-amrwb0 \
 | 
			
		||||
    libopus0 \
 | 
			
		||||
    libsnappy1v5 \
 | 
			
		||||
    libtheora0 \
 | 
			
		||||
    libvorbis0a \
 | 
			
		||||
    libvorbisenc2 \
 | 
			
		||||
    libvorbisfile3 \
 | 
			
		||||
    libvpx7 \
 | 
			
		||||
    libx264-164 \
 | 
			
		||||
    libx265-199 \
 | 
			
		||||
  ;
 | 
			
		||||
 | 
			
		||||
# Copy Mastodon sources into final layer
 | 
			
		||||
@@ -302,11 +372,16 @@ COPY --from=bundler /usr/local/bundle/ /usr/local/bundle/
 | 
			
		||||
# Copy libvips components to layer
 | 
			
		||||
COPY --from=libvips /usr/local/libvips/bin /usr/local/bin
 | 
			
		||||
COPY --from=libvips /usr/local/libvips/lib /usr/local/lib
 | 
			
		||||
# Copy ffpmeg components to layer
 | 
			
		||||
COPY --from=ffmpeg /usr/local/ffmpeg/bin /usr/local/bin
 | 
			
		||||
COPY --from=ffmpeg /usr/local/ffmpeg/lib /usr/local/lib
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  ldconfig; \
 | 
			
		||||
# Smoketest media processors
 | 
			
		||||
  vips -v;
 | 
			
		||||
  vips -v; \
 | 
			
		||||
  ffmpeg -version; \
 | 
			
		||||
  ffprobe -version;
 | 
			
		||||
 | 
			
		||||
RUN \
 | 
			
		||||
  # Precompile bootsnap code for faster Rails startup
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user