mirror of
https://github.com/linuxserver/ffmpeg-builder.git
synced 2026-01-09 06:51:13 +08:00
384 lines
12 KiB
Docker
384 lines
12 KiB
Docker
FROM lsiobase/xenial-root-x86
|
||
MAINTAINER sparklyballs
|
||
|
||
# install build packages
|
||
RUN \
|
||
apt-get update && \
|
||
DEBIAN_FRONTEND="noninteractive" apt-get install -y \
|
||
autoconf \
|
||
automake \
|
||
bash \
|
||
build-essential \
|
||
bzip2 \
|
||
cmake \
|
||
curl \
|
||
frei0r-plugins-dev \
|
||
gawk \
|
||
libfontconfig-dev \
|
||
libsdl1.2-dev \
|
||
libtool \
|
||
libva-dev \
|
||
libvdpau-dev \
|
||
libvo-amrwbenc-dev \
|
||
libwebp-dev \
|
||
libxcb1-dev \
|
||
libxcb-shm0-dev \
|
||
libxcb-xfixes0-dev \
|
||
libxvidcore-dev \
|
||
lsb-release \
|
||
perl \
|
||
pkg-config \
|
||
sudo \
|
||
tar \
|
||
texi2html \
|
||
wget \
|
||
xz-utils \
|
||
yasm && \
|
||
rm -rf \
|
||
/var/lib/apt/lists/*
|
||
|
||
# package versions
|
||
ARG FFMPEG_VER="3.3.3"
|
||
ARG FREETYPE_VER="2.7.1"
|
||
ARG FRIBIDI_VER="0.19.7"
|
||
ARG HARFBUZZ_VER="1.5.0"
|
||
ARG LAME_VER="3.99.5"
|
||
ARG LIBASS_VER="0.13.7"
|
||
ARG LIBOGG_VER="1.3.2"
|
||
ARG LIBTHEORA_VER="1.2.0alpha1"
|
||
ARG LIBVORBIS_VER="1.3.5"
|
||
ARG NASM_VER="2.13.01"
|
||
ARG O_AMR_VER="0.1.5"
|
||
ARG OPENJPEG_VER="2.2.0"
|
||
ARG OPENSSL_VER="1.0.2l"
|
||
ARG OPUS_VER="1.2.1"
|
||
ARG RTMP_COMMIT="fa8646daeb19dfd12c181f7d19de708d623704c0"
|
||
ARG SOXR_VER="0.1.2"
|
||
ARG SPEEX_VER="1.2.0"
|
||
ARG VIDSTAB_VER="1.1.0"
|
||
ARG VPX_VER="1.6.1"
|
||
ARG X265_VER="2.5"
|
||
ARG ZIMG_VER="2.6a"
|
||
ARG ZLIB_VER="1.2.11"
|
||
|
||
# environment variables
|
||
ARG BUILD_ROOT="/tmp/build-root"
|
||
ARG SOURCE_FOLDER="/tmp/source-folder"
|
||
|
||
# copy patches
|
||
COPY patches/ /tmp/patches/
|
||
|
||
# make folders
|
||
RUN \
|
||
mkdir -p \
|
||
${BUILD_ROOT} \
|
||
${SOURCE_FOLDER} && \
|
||
rm -rf ${BUILD_ROOT}/* \
|
||
${SOURCE_FOLDER}/*
|
||
|
||
# fetch source codes
|
||
RUN set -ex && \
|
||
RTMP_VER=$(printf "%.7s" $RTMP_COMMIT) && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/fdk-aac.tar.gz -L \
|
||
https://github.com/mstorsjo/fdk-aac/tarball/master && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/ffmpeg.tar.bz2 -L \
|
||
http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VER}.tar.bz2 && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/freetype-${FREETYPE_VER}.tar.gz -L \
|
||
http://download.savannah.gnu.org/releases/freetype/freetype-${FREETYPE_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/fribidi-${FRIBIDI_VER}.tar.bz2 -L \
|
||
http://fribidi.org/download/fribidi-${FRIBIDI_VER}.tar.bz2 && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/harfbuzz-${HARFBUZZ_VER}.tar.bz2 -L \
|
||
https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-${HARFBUZZ_VER}.tar.bz2 && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/lame-${LAME_VER}.tar.gz -L \
|
||
http://downloads.sourceforge.net/project/lame/lame/${LAME_VER%.*}/lame-${LAME_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/last_x264.tar.bz2 -L \
|
||
http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/${LIBASS_VER}.tar.gz -L \
|
||
https://github.com/libass/libass/archive/${LIBASS_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/libogg-${LIBOGG_VER}.tar.gz -L \
|
||
http://downloads.xiph.org/releases/ogg/libogg-${LIBOGG_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/libtheora-${LIBTHEORA_VER}.tar.gz -L \
|
||
http://downloads.xiph.org/releases/theora/libtheora-${LIBTHEORA_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/libvorbis-${LIBVORBIS_VER}.tar.gz -L \
|
||
http://downloads.xiph.org/releases/vorbis/libvorbis-${LIBVORBIS_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/nasm-${NASM_VER}.tar.bz2 -L \
|
||
http://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.bz2 && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/opus-${OPUS_VER}.tar.gz -L \
|
||
https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/release-${ZIMG_VER}.tar.gz -L \
|
||
https://github.com/sekrit-twc/zimg/archive/release-${ZIMG_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/rtmpdump-${RTMP_VER}.tgz -L \
|
||
https://git.ffmpeg.org/gitweb/rtmpdump.git/snapshot/${RTMP_COMMIT}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/soxr-${SOXR_VER}-Source.tar.xz -L \
|
||
https://sourceforge.net/projects/soxr/files/soxr-${SOXR_VER}-Source.tar.xz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/speex-${SPEEX_VER}.tar.gz -L \
|
||
http://downloads.us.xiph.org/releases/speex/speex-${SPEEX_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/v${OPENJPEG_VER}.tar.gz -L \
|
||
https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/v${VIDSTAB_VER}.tar.gz -L \
|
||
https://github.com/georgmartius/vid.stab/archive/v${VIDSTAB_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/v${VPX_VER}.tar.gz -L \
|
||
https://github.com/webmproject/libvpx/archive/v${VPX_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/x265_${X265_VER}.tar.gz -L \
|
||
https://bitbucket.org/multicoreware/x265/downloads/x265_${X265_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/v${ZLIB_VER}.tar.gz -L \
|
||
https://github.com/madler/zlib/archive/v${ZLIB_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/openssl-${OPENSSL_VER}.tar.gz -L \
|
||
https://www.openssl.org/source/openssl-${OPENSSL_VER}.tar.gz && \
|
||
curl -o \
|
||
${SOURCE_FOLDER}/opencore-amr-${O_AMR_VER}.tar.gz -L \
|
||
http://downloads.sourceforge.net/project/opencore-amr/opencore-amr/opencore-amr-${O_AMR_VER}.tar.gz
|
||
|
||
# unpack source codes
|
||
RUN set -ex && \
|
||
for file in ${SOURCE_FOLDER}/* ; do tar xvf $file -C ${BUILD_ROOT} ; done
|
||
|
||
# compile nasm
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/nasm-${NASM_VER} && \
|
||
./autogen.sh && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile zlib
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/zlib-${ZLIB_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --static && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile openssl
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/openssl-${OPENSSL_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./config \
|
||
no-shared \
|
||
zlib \
|
||
--openssldir="$HOME/ffmpeg_build/etc/ssl" \
|
||
--prefix="$HOME/ffmpeg_build" && \
|
||
PATH="$HOME/bin:$PATH" make depend && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libogg
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/libogg-${LIBOGG_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile speex
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/speex-${SPEEX_VER} && \
|
||
./configure --prefix="$HOME/ffmpeg_build" --disable-shared --enable-sse --disable-oggtest --with-ogg="$HOME/ffmpeg_build" && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libvorbis
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/libvorbis-${LIBVORBIS_VER} && \
|
||
./configure --prefix="$HOME/ffmpeg_build" --disable-shared --disable-oggtest && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libtheora
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/libtheora-${LIBTHEORA_VER} && \
|
||
./configure --prefix="$HOME/ffmpeg_build" --disable-shared --disable-oggtest --disable-examples --with-ogg="$HOME/ffmpeg_build" && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile x264
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/x264-snapshot* && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --disable-opencl && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile x265
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/x265_${X265_VER}/build/linux && \
|
||
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libfdk-aac
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/mstorsjo-fdk-aac* && \
|
||
autoreconf -fiv && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile harfbuzz
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/harfbuzz-${HARFBUZZ_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared --enable-static && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile freetype
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/freetype-${FREETYPE_VER} && \
|
||
./configure --prefix="$HOME/ffmpeg_build" --disable-shared --enable-static --without-png && \
|
||
make install && ln -s "$HOME/ffmpeg_build"/include/freetype2 "$HOME/ffmpeg_build"/include/freetype2/freetype
|
||
|
||
# compile fribidi
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/fribidi-${FRIBIDI_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared --enable-static && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libass
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/libass-${LIBASS_VER} && \
|
||
./autogen.sh && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile lame
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/lame-${LAME_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile opus
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/opus-${OPUS_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile opencore-amr
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/opencore-amr-${O_AMR_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile libvpx
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/libvpx-${VPX_VER} && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-pic && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile rtmp
|
||
RUN set -ex && \
|
||
RTMP_VER=$(printf "%.7s" $RTMP_COMMIT) && \
|
||
cd ${BUILD_ROOT}/rtmpdump-${RTMP_VER} && \
|
||
PATH="$HOME/bin:$PATH" make SYS=posix SHARED= XCFLAGS="-fpic -I$HOME/ffmpeg_build/include" XLDFLAGS=-L"$HOME/ffmpeg_build/lib" XLIBS=-ldl && \
|
||
make install prefix=$HOME/ffmpeg_build SHARED=
|
||
|
||
# compile soxr
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/soxr-${SOXR_VER}-Source && \
|
||
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DBUILD_SHARED_LIBS:bool=off -DWITH_OPENMP:bool=off -DBUILD_TESTS:bool=off && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile vidstab
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/vid.stab-${VIDSTAB_VER} && \
|
||
sed -i "s/BUILD_SHARED_LIBS/BUILD_STATIC_LIBS/" ./CMakeLists.txt && \
|
||
PATH="$HOME/bin:$PATH" cmake -DCMAKE_INSTALL_PREFIX:PATH="$HOME/ffmpeg_build" && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile openjpeg
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/openjpeg-${OPENJPEG_VER} && \
|
||
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DBUILD_SHARED_LIBS:bool=off -DBUILD_THIRDPARTY=on && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile zimg
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/zimg-release-${ZIMG_VER} && \
|
||
./autogen.sh && \
|
||
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared --enable-static && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install
|
||
|
||
# compile ffmpeg
|
||
RUN set -ex && \
|
||
cd ${BUILD_ROOT}/ffmpeg* && \
|
||
for i in /tmp/patches/ffmpeg/*.patch; do patch -p1 -i $i; done && \
|
||
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \
|
||
--bindir="$HOME/bin" \
|
||
--disable-doc \
|
||
--enable-ffplay \
|
||
--enable-ffserver \
|
||
--enable-fontconfig \
|
||
--enable-frei0r \
|
||
--enable-gpl \
|
||
--enable-libass \
|
||
--enable-libfdk-aac \
|
||
--enable-libfreetype \
|
||
--enable-libfribidi \
|
||
--enable-libmp3lame \
|
||
--enable-libopencore-amrnb \
|
||
--enable-libopencore-amrwb \
|
||
--enable-libopenjpeg \
|
||
--enable-libopus \
|
||
--enable-librtmp \
|
||
--enable-libsoxr \
|
||
--enable-libspeex \
|
||
--enable-libtheora \
|
||
--enable-libvidstab \
|
||
--enable-libvo-amrwbenc \
|
||
--enable-libvorbis \
|
||
--enable-libvpx \
|
||
--enable-libwebp \
|
||
--enable-libx264 \
|
||
--enable-libx265 \
|
||
--enable-libxvid \
|
||
--enable-libzimg \
|
||
--enable-nonfree \
|
||
--enable-pic \
|
||
--enable-vaapi \
|
||
--enable-version3 \
|
||
--extra-cflags="-I$HOME/ffmpeg_build/include" \
|
||
--extra-ldexeflags="-static" \
|
||
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
|
||
--pkg-config-flags="--static" \
|
||
--prefix="$HOME/ffmpeg_build" && \
|
||
PATH="$HOME/bin:$PATH" make && \
|
||
make install && \
|
||
hash -r
|
||
|
||
# archive artefacts
|
||
RUN \
|
||
mkdir -p \
|
||
/package && \
|
||
tar -cvf /package/ffmpeg.tar -C /root/bin/ ffmpeg ffprobe ffserver && \
|
||
chmod -R 777 /package
|
||
|
||
CMD ["cp", "-avr", "/package", "/mnt/"]
|