ffmpeg-builder/Dockerfile

588 lines
19 KiB
Docker
Raw 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 lsiodev/toolchain
# package versions
# pay special attention to the x264 variable
# x264 version needs to be everything after /snapshots/ in the url from videolan.org excluding .tar.bz2
# used in conjunction with SOURCE_URL_LIST variable, add URL (including variable(s) from this list there
# and set the version to download here
ARG FDK_AAC_VER="0.1.5"
ARG FFMPEG_VER="3.3.3"
ARG FONTCONFIG_VER="2.12.4"
ARG FREETYPE_VER="2.8"
ARG FREI0R_VER="1.6.1"
ARG FRIBIDI_VER="0.19.7"
ARG GIFLIB_VER="5.1.4"
ARG HARFBUZZ_VER="1.5.0"
ARG LAME_VER="3.99.5"
ARG LAME_VER_BRANCH="3.99"
ARG LCMS2_VER="2.8"
ARG LIBASS_VER="0.13.7"
ARG LIBJPEG_TURBO_VER="1.5.2"
ARG LIBOGG_VER="1.3.2"
ARG LIBPNG_VER="1.6.31"
ARG LIBTHEORA_VER="1.1.1"
ARG LIBTIFF_VER="4.0.8"
ARG LIBVORBIS_VER="1.3.5"
ARG LIBVPX_VER="1.6.1"
ARG LIBWEBP_VER="0.6.0"
ARG OPENCORE_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 SPEEX_DSP_VER="1.2rc3"
ARG VIDSTAB_VER="1.1.0"
ARG VO_AMRWBENC_VER="0.1.3"
ARG X264_VER="x264-snapshot-20170822-2245-stable"
ARG X265_VER="2.5"
ARG XVID_VER="1.3.4"
ARG ZIMG_VER="2.5.1"
ARG ZLIB_VER="1.2.11"
# source url list
# use variables from package versions list
# each line must end with a space and a slash apart from the last line which must end with a "
# avoid leading or trailing spaces as they will interpreted as newlines in the fetch stage and may cause errors
ARG SOURCE_URL_LIST="\
https://downloads.sourceforge.net/opencore-amr/fdk-aac-${FDK_AAC_VER}.tar.gz \
http://ffmpeg.org/releases/ffmpeg-${FFMPEG_VER}.tar.bz2 \
https://www.freedesktop.org/software/fontconfig/release/fontconfig-${FONTCONFIG_VER}.tar.bz2 \
https://downloads.sourceforge.net/freetype/freetype-${FREETYPE_VER}.tar.bz2 \
https://files.dyne.org/frei0r/releases/frei0r-plugins-${FREI0R_VER}.tar.gz \
http://fribidi.org/download/fribidi-${FRIBIDI_VER}.tar.bz2 \
https://downloads.sourceforge.net/giflib/giflib-${GIFLIB_VER}.tar.bz2 \
https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-${HARFBUZZ_VER}.tar.bz2 \
http://downloads.sourceforge.net/project/lame/lame/${LAME_VER_BRANCH}/lame-${LAME_VER}.tar.gz \
https://downloads.sourceforge.net/lcms/lcms2-${LCMS2_VER}.tar.gz \
https://github.com/libass/libass/archive/${LIBASS_VER}.tar.gz \
https://downloads.sourceforge.net/libjpeg-turbo/libjpeg-turbo-${LIBJPEG_TURBO_VER}.tar.gz \
http://downloads.xiph.org/releases/ogg/libogg-${LIBOGG_VER}.tar.gz \
https://downloads.sourceforge.net/libpng/libpng-${LIBPNG_VER}.tar.xz \
https://downloads.xiph.org/releases/theora/libtheora-${LIBTHEORA_VER}.tar.xz \
http://download.osgeo.org/libtiff/tiff-${LIBTIFF_VER}.tar.gz \
https://downloads.xiph.org/releases/vorbis/libvorbis-${LIBVORBIS_VER}.tar.xz \
https://github.com/webmproject/libvpx/archive/v${LIBVPX_VER}.tar.gz \
http://downloads.webmproject.org/releases/webp/libwebp-${LIBWEBP_VER}.tar.gz \
https://sourceforge.net/projects/opencore-amr/files/opencore-amr/opencore-amr-${OPENCORE_AMR_VER}.tar.gz/download \
https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VER}.tar.gz \
https://www.openssl.org/source/openssl-${OPENSSL_VER}.tar.gz \
https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz \
https://git.ffmpeg.org/gitweb/rtmpdump.git/snapshot/${RTMP_COMMIT}.tar.gz \
https://sourceforge.net/projects/soxr/files/soxr-${SOXR_VER}-Source.tar.xz \
https://downloads.xiph.org/releases/speex/speex-${SPEEX_VER}.tar.gz \
https://downloads.xiph.org/releases/speex/speexdsp-${SPEEX_DSP_VER}.tar.gz \
https://github.com/georgmartius/vid.stab/archive/v${VIDSTAB_VER}.tar.gz \
https://sourceforge.net/projects/opencore-amr/files/vo-amrwbenc/vo-amrwbenc-${VO_AMRWBENC_VER}.tar.gz \
https://download.videolan.org/x264/snapshots/${X264_VER}.tar.bz2 \
https://bitbucket.org/multicoreware/x265/downloads/x265_${X265_VER}.tar.gz \
http://downloads.xvid.org/downloads/xvidcore-${XVID_VER}.tar.gz \
https://github.com/sekrit-twc/zimg/archive/release-${ZIMG_VER}.tar.gz \
https://github.com/madler/zlib/archive/v${ZLIB_VER}.tar.gz"
# 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 code
RUN set -ex && \
echo "$SOURCE_URL_LIST" | tr " " "\\n" >> /tmp/url-list && \
while read -r urls; do \
FILE_EXTENSION=$(echo "$urls" | sed 's/.*\///'); \
curl -o \
"${SOURCE_FOLDER}/${FILE_EXTENSION}" -L -C - "$urls" \
--max-time 40 \
--retry 5 \
--retry-delay 3 \
--retry-max-time 240; \
done < /tmp/url-list
# unpack source codes
RUN set -ex && \
for file in ${SOURCE_FOLDER}/* ; do tar xvf $file -C ${BUILD_ROOT} ; done
# attempt to set number of cores available and if 4 or more available set number for make to use
# as one less than actual available, if 6 or more set to two less than available, otherwise use all cores
RUN \
CPU_CORES=$( < /proc/cpuinfo grep -c processor ) || echo "failed cpu look up" && \
if echo $CPU_CORES | grep -E -q '^[0-9]+$'; then \
: ; \
if [ "$CPU_CORES" -gt 7 ]; then \
CPU_CORES=$(( CPU_CORES / 2 )); \
elif [ "$CPU_CORES" -gt 5 ]; then \
CPU_CORES=$(( CPU_CORES - 2 )); \
elif [ "$CPU_CORES" -gt 3 ]; then \
CPU_CORES=$(( CPU_CORES - 1 )); \
fi; \
else CPU_CORES="1"; \
fi && \
echo "$CPU_CORES" > /tmp/cpu-cores
# compile xvid
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/xvidcore*/build/generic && \
./configure \
--prefix=/usr && \
make -j $CPU_CORES && \
make install
# compile libvpx
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libvpx-${LIBVPX_VER} && \
sed -i 's/cp -p/cp/' build/make/Makefile && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile opencore_amr
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/opencore-amr-${OPENCORE_AMR_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile vo-amrwbenc
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/vo-amrwbenc-${VO_AMRWBENC_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile soxr
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/soxr-${SOXR_VER}-Source && \
cmake -G "Unix Makefiles" \
-DBUILD_SHARED_LIBS:bool=off -DWITH_OPENMP:bool=off \
-DBUILD_TESTS:bool=off \
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" \
-Wno-dev && \
make -j $CPU_CORES && \
make install
# compile opus
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/opus-${OPUS_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile fdk-aac
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/fdk-aac-${FDK_AAC_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile libpng
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libpng-${LIBPNG_VER} && \
LIBS=-lpthread ./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile freetype 1st pass
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/freetype-${FREETYPE_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" \
--without-harfbuzz && \
make -j $CPU_CORES && \
make install && \
ln -s "$HOME/ffmpeg_build"/include/freetype2 "$HOME/ffmpeg_build"/include/freetype2/freetype
# compile harfbuzz 1st pass
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/harfbuzz-${HARFBUZZ_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile freetype 2nd pass
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/freetype-${FREETYPE_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install && \
ln -s "$HOME/ffmpeg_build"/include/freetype2 "$HOME/ffmpeg_build"/include/freetype2/freetype
# compile harfbuzz 2nd pass
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/harfbuzz-${HARFBUZZ_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile fontconfig
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/fontconfig-${FONTCONFIG_VER} && \
./configure \
--disable-docs \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile fribidi
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/fribidi-${FRIBIDI_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile libass
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libass-${LIBASS_VER} && \
./autogen.sh && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile frei0r-plugins
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
mkdir -p \
${BUILD_ROOT}/frei0r-plugins-${FREI0R_VER}/build && \
cd ${BUILD_ROOT}/frei0r-plugins-${FREI0R_VER}/build && \
cmake -G "Unix Makefiles" \
-DBUILD_SHARED_LIBS=OFF \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" \
-Wno-dev .. && \
make -j $CPU_CORES && \
make install
# compile libjpeg-turbo
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libjpeg-turbo-${LIBJPEG_TURBO_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" \
--with-jpeg8 && \
make -j $CPU_CORES && \
make install
# compile libtiff
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cp /tmp/patches/config_guess/config.* ${BUILD_ROOT}/tiff-${LIBTIFF_VER}/config/ && \
cd ${BUILD_ROOT}/tiff-${LIBTIFF_VER} && \
./configure \
--disable-shared \
--enable-jpeg \
--enable-static \
--prefix="$HOME/ffmpeg_build" \
--with-jpeg-include-dir="$HOME/ffmpeg_build/include" \
--with-jpeg-lib-dir="$HOME/ffmpeg_build/lib" && \
make -j $CPU_CORES && \
make install
# compile little cms2
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/lcms2-${LCMS2_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" \
--with-jpeg="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile openjpeg
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/openjpeg-${OPENJPEG_VER} && \
cmake -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_THIRDPARTY=on && \
make -j $CPU_CORES && \
make install
# compile zlib
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/zlib-${ZLIB_VER} && \
./configure \
--prefix="$HOME/ffmpeg_build" \
--static && \
make -j $CPU_CORES && \
make install
# compile giflib
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/giflib-${GIFLIB_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile libwebp
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libwebp-${LIBWEBP_VER} && \
ac_cv_search_png_get_libpng_ver="none required" \
LIBPNG_CONFIG="$HOME/ffmpeg_build/bin/libpng-config" \
./configure \
--disable-shared \
--enable-libwebpdecoder \
--enable-libwebpdemux \
--enable-libwebpextras \
--enable-libwebpmux \
--enable-static \
--enable-swap-16bit-csp \
--prefix="$HOME/ffmpeg_build" \
--with-gifincludedir="$HOME/ffmpeg_build/include" \
--with-giflibdir="$HOME/ffmpeg_build/lib" \
--with-jpegincludedir="$HOME/ffmpeg_build/include" \
--with-jpeglibdir="$HOME/ffmpeg_build/lib" \
--with-pkgconfigdir="$HOME/ffmpeg_build/lib/pkgconfig" \
--with-pngincludedir="$HOME/ffmpeg_build/include" \
--with-tiffincludedir="$HOME/ffmpeg_build/include" \
--with-tifflibdir="$HOME/ffmpeg_build/lib" && \
make -j $CPU_CORES && \
make install
# compile openssl
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/openssl-${OPENSSL_VER} && \
./config \
no-idea \
no-mdc2 \
no-rc5 \
no-shared \
--openssldir="$HOME/ffmpeg_build/etc/ssl" \
--prefix="$HOME/ffmpeg_build" \
zlib -I"$HOME/ffmpeg_build/include" -L"$HOME/ffmpeg_build/lib" && \
make depend && \
make -j $CPU_CORES && \
make install
# compile rtmp
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
RTMP_VER=$(printf "%.7s" $RTMP_COMMIT) && \
cd ${BUILD_ROOT}/rtmpdump-${RTMP_VER} && \
make \
SHARED= \
SYS=posix \
XCFLAGS="-fpic -I$HOME/ffmpeg_build/include" \
XLDFLAGS=-L"$HOME/ffmpeg_build/lib" \
XLIBS=-ldl && \
make install \
prefix=$HOME/ffmpeg_build \
SHARED=
# compile libogg
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libogg-${LIBOGG_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile speex
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/speex-${SPEEX_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile speexdsp
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/speexdsp-${SPEEX_DSP_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile libvorbis
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libvorbis-${LIBVORBIS_VER} && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile libtheora
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/libtheora-${LIBTHEORA_VER} && \
sed -i 's/png_\(sizeof\)/\1/g' examples/png2theora.c && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile lame
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/lame-${LAME_VER} && \
./configure \
--disable-shared \
--enable-mp3rtp \
--enable-nasm \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile zimg
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/zimg-release-${ZIMG_VER} && \
./autogen.sh && \
./configure \
--disable-shared \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile vidstab
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/vid.stab-${VIDSTAB_VER} && \
sed -i "s/BUILD_SHARED_LIBS/BUILD_STATIC_LIBS/" ./CMakeLists.txt && \
cmake -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX:PATH="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile x264
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/x264-snapshot* && \
./configure \
--bindir="$HOME/bin" \
--disable-opencl \
--enable-static \
--prefix="$HOME/ffmpeg_build" && \
make -j $CPU_CORES && \
make install
# compile x265
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/x265_${X265_VER}/build/linux && \
cmake -G "Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" \
-DENABLE_SHARED:bool=off \
../../source && \
make -j $CPU_CORES && \
make install
# compile ffmpeg
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" && \
cd ${BUILD_ROOT}/ffmpeg* && \
for i in /tmp/patches/ffmpeg/*.patch; do patch -p1 -i $i; done && \
./configure \
--bindir="$HOME/bin" \
--disable-debug \
--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-openssl \
--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" && \
make -j $CPU_CORES && \
make install
# copy static libs not found by ldd to host lib folder
RUN cp -vH \
"${HOME}"/ffmpeg_build/lib/libopenjp2*.so* \
/lib/x86_64-linux-gnu/
# 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/"]