ffmpeg-builder/Dockerfile
2017-08-29 11:59:40 +01:00

384 lines
12 KiB
Docker
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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/"]