mirror of
https://github.com/linuxserver/ffmpeg-builder.git
synced 2026-02-20 00:24:39 +08:00
627 lines
21 KiB
Docker
627 lines
21 KiB
Docker
FROM lsiodev/toolchain
|
||
|
||
# output packages
|
||
ARG OUTPUT_PACKAGES="\
|
||
ffmpeg \
|
||
ffprobe \
|
||
ffserver \
|
||
qt-faststart"
|
||
|
||
|
||
# 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
|
||
|
||
ENV \
|
||
FDK_AAC_VER="0.1.5" \
|
||
FFMPEG_VER="3.4" \
|
||
FONTCONFIG_VER="2.12.4" \
|
||
FREETYPE_VER="2.8.1" \
|
||
FREI0R_VER="1.6.1" \
|
||
FRIBIDI_VER="0.19.7" \
|
||
GIFLIB_VER="5.1.4" \
|
||
HARFBUZZ_VER="1.6.0" \
|
||
LAME_VER="3.99.5" \
|
||
LAME_VER_BRANCH="3.99" \
|
||
LCMS2_VER="2.8" \
|
||
LIBASS_VER="0.13.7" \
|
||
LIBJPEG_TURBO_VER="1.5.2" \
|
||
LIBOGG_VER="1.3.2" \
|
||
LIBPNG_VER="1.6.32" \
|
||
LIBTHEORA_VER="1.1.1" \
|
||
LIBTIFF_VER="4.0.8" \
|
||
LIBVMAF_VER="1.3.1" \
|
||
LIBVORBIS_VER="1.3.5" \
|
||
LIBVPX_VER="1.6.1" \
|
||
LIBWEBP_VER="0.6.0" \
|
||
OPENCORE_AMR_VER="0.1.5" \
|
||
OPENJPEG_VER="2.2.0" \
|
||
OPENSSL_VER="1.0.2m" \
|
||
OPUS_VER="1.2.1" \
|
||
RTMP_COMMIT="fa8646daeb19dfd12c181f7d19de708d623704c0" \
|
||
SOXR_VER="0.1.2" \
|
||
SPEEX_VER="1.2.0" \
|
||
SPEEX_DSP_VER="1.2rc3" \
|
||
VIDSTAB_VER="1.1.0" \
|
||
VO_AMRWBENC_VER="0.1.3" \
|
||
X264_VER="x264-snapshot-20170822-2245-stable" \
|
||
X265_VER="2.5" \
|
||
XVID_VER="1.3.4" \
|
||
ZIMG_VER="2.5.1" \
|
||
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://github.com/Netflix/vmaf/archive/v${LIBVMAF_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
|
||
ENV \
|
||
BUILD_ROOT="/tmp/build-root" \
|
||
SOURCE_FOLDER="/tmp/source-folder"
|
||
|
||
# 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
|
||
# then fetch and unpack source codes and fetch latest config patches.
|
||
|
||
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 - 3 )); \
|
||
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 && \
|
||
mkdir -p \
|
||
/tmp/patches/config_guess \
|
||
${BUILD_ROOT} \
|
||
${SOURCE_FOLDER} && \
|
||
rm -rf ${BUILD_ROOT}/* \
|
||
${SOURCE_FOLDER}/* && \
|
||
set -ex && \
|
||
curl -o /tmp/patches/config_guess/config.guess -L -C - \
|
||
'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD' \
|
||
--max-time 40 \
|
||
--retry 5 \
|
||
--retry-delay 3 \
|
||
--retry-max-time 240 && \
|
||
curl -o /tmp/patches/config_guess/config.sub -L -C - \
|
||
'http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD' \
|
||
--max-time 40 \
|
||
--retry 5 \
|
||
--retry-delay 3 \
|
||
--retry-max-time 240 && \
|
||
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 && \
|
||
for file in ${SOURCE_FOLDER}/* ; do tar xvf $file -C ${BUILD_ROOT} ; done && \
|
||
find ${BUILD_ROOT}/ -name 'config.sub' -exec cp -v /tmp/patches/config_guess/config.sub {} \; && \
|
||
find ${BUILD_ROOT}/ -name 'config.guess' -exec cp -v /tmp/patches/config_guess/config.guess {} \;
|
||
|
||
# compile libvpx
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libvpx-${LIBVPX_VER} && \
|
||
./configure \
|
||
--disable-install-srcs \
|
||
--disable-shared \
|
||
--enable-libs \
|
||
--enable-pic \
|
||
--enable-postproc \
|
||
--enable-runtime-cpu-detect \
|
||
--enable-static \
|
||
--enable-vp8 \
|
||
--enable-vp9 && \
|
||
make -j $CPU_CORES && \
|
||
make DIST_DIR="$HOME/ffmpeg_build/usr" install && \
|
||
chmod 644 \
|
||
"$HOME/ffmpeg_build/usr/include/vpx"/*.h \
|
||
"$HOME/ffmpeg_build/usr/lib/pkgconfig"/* && \
|
||
chown root:root -R "$HOME/ffmpeg_build" && \
|
||
chmod 755 "$HOME/ffmpeg_build/usr/lib"/*
|
||
|
||
# compile xvid
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/xvidcore*/build/generic && \
|
||
./configure \
|
||
--prefix=/usr && \
|
||
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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/opencore-amr-${OPENCORE_AMR_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/vo-amrwbenc-${VO_AMRWBENC_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile soxr
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/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/usr" \
|
||
-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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/opus-${OPUS_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/fdk-aac-${FDK_AAC_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile libpng
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libpng-${LIBPNG_VER} && \
|
||
LIBS=-lpthread ./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile freetype and harfbuzz twice each to resolve circular dependency issue
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/freetype-${FREETYPE_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--without-harfbuzz && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
ln -s "$HOME/ffmpeg_build/usr"/include/freetype2 "$HOME/ffmpeg_build/usr"/include/freetype2/freetype && \
|
||
cd ${BUILD_ROOT}/harfbuzz-${HARFBUZZ_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
cd ${BUILD_ROOT}/freetype-${FREETYPE_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
ln -s "$HOME/ffmpeg_build/usr"/include/freetype2 "$HOME/ffmpeg_build/usr"/include/freetype2/freetype && \
|
||
cd ${BUILD_ROOT}/harfbuzz-${HARFBUZZ_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile fontconfig
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/fontconfig-${FONTCONFIG_VER} && \
|
||
./configure \
|
||
--disable-docs \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile fribidi
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/fribidi-${FRIBIDI_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile libass
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libass-${LIBASS_VER} && \
|
||
./autogen.sh && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
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/usr/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/usr" \
|
||
-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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libjpeg-turbo-${LIBJPEG_TURBO_VER} && \
|
||
./configure \
|
||
--enable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/tiff-${LIBTIFF_VER} && \
|
||
./configure \
|
||
--disable-cxx \
|
||
--enable-shared \
|
||
--enable-jpeg \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--with-jpeg-include-dir="$HOME/ffmpeg_build/usr/include" \
|
||
--with-jpeg-lib-dir="$HOME/ffmpeg_build/usr/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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/lcms2-${LCMS2_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--with-jpeg="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile openjpeg twice, once for system libs and once for static built downstream dependencies.
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/openjpeg-${OPENJPEG_VER} && \
|
||
cmake -G "Unix Makefiles" \
|
||
-DBUILD_SHARED_LIBS=ON \
|
||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build/usr" \
|
||
-DOPENJPEG_INSTALL_LIB_DIR=lib \
|
||
-DOPENJPEG_INSTALL_PACKAGE_DIR="$HOME/ffmpeg_build/usr/lib/cmake/openjpeg-${OPENJPEG_VER%.*}" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
cd ${BUILD_ROOT}/openjpeg-${OPENJPEG_VER} && \
|
||
make clean && \
|
||
cmake -G "Unix Makefiles" \
|
||
-DBUILD_SHARED_LIBS=OFF \
|
||
-DCMAKE_BUILD_TYPE=RelWithDebInfo \
|
||
-DCMAKE_INSTALL_PREFIX=/usr \
|
||
-DOPENJPEG_INSTALL_LIB_DIR=lib \
|
||
-DOPENJPEG_INSTALL_PACKAGE_DIR="/usr/lib/cmake/openjpeg-${OPENJPEG_VER%.*}" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile zlib
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/zlib-${ZLIB_VER} && \
|
||
./configure \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/giflib-${GIFLIB_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile libwebp
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libwebp-${LIBWEBP_VER} && \
|
||
ac_cv_search_png_get_libpng_ver="none required" \
|
||
LIBPNG_CONFIG="$HOME/ffmpeg_build/usr/bin/libpng-config" \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-libwebpdecoder \
|
||
--enable-libwebpdemux \
|
||
--enable-libwebpextras \
|
||
--enable-libwebpmux \
|
||
--enable-static \
|
||
--enable-swap-16bit-csp \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
--with-gifincludedir="$HOME/ffmpeg_build/usr/include" \
|
||
--with-giflibdir="$HOME/ffmpeg_build/usr/lib" \
|
||
--with-jpegincludedir="$HOME/ffmpeg_build/usr/include" \
|
||
--with-jpeglibdir="$HOME/ffmpeg_build/usr/lib" \
|
||
--with-pkgconfigdir="$HOME/ffmpeg_build/usr/lib/pkgconfig" \
|
||
--with-pngincludedir="$HOME/ffmpeg_build/usr/include" \
|
||
--with-tiffincludedir="$HOME/ffmpeg_build/usr/include" \
|
||
--with-tifflibdir="$HOME/ffmpeg_build/usr/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/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/openssl-${OPENSSL_VER} && \
|
||
./config \
|
||
no-idea \
|
||
no-mdc2 \
|
||
no-rc5 \
|
||
no-shared \
|
||
--openssldir="$HOME/ffmpeg_build/usr/etc/ssl" \
|
||
--prefix="$HOME/ffmpeg_build/usr" \
|
||
zlib -I"$HOME/ffmpeg_build/usr/include" -L"$HOME/ffmpeg_build/usr/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/usr/lib/pkgconfig" && \
|
||
RTMP_VER=$(printf "%.7s" $RTMP_COMMIT) && \
|
||
cd ${BUILD_ROOT}/rtmpdump-${RTMP_VER} && \
|
||
make \
|
||
SHARED= \
|
||
SYS=posix \
|
||
XCFLAGS="-fpic -I$HOME/ffmpeg_build/usr/include" \
|
||
XLDFLAGS=-L"$HOME/ffmpeg_build/usr/lib" \
|
||
XLIBS=-ldl && \
|
||
make install \
|
||
prefix=$HOME/ffmpeg_build/usr \
|
||
SHARED=
|
||
|
||
# compile libogg
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libogg-${LIBOGG_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile speexdsp and speex
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/speexdsp-${SPEEX_DSP_VER} && \
|
||
if [ "$( uname -p )" = "aarch64" ]; then _neon="--disable-neon"; fi && \
|
||
./configure \
|
||
$_neon \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
cd ${BUILD_ROOT}/speex-${SPEEX_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile libvorbis and libtheora
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/libvorbis-${LIBVORBIS_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
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/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile lame
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/lame-${LAME_VER} && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-mp3rtp \
|
||
--enable-nasm \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile zimg
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/zimg-release-${ZIMG_VER} && \
|
||
./autogen.sh && \
|
||
./configure \
|
||
--disable-shared \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile vidstab
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/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/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install
|
||
|
||
# compile vmaf
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/vmaf-${LIBVMAF_VER} && \
|
||
make PREFIX="$HOME/ffmpeg_build/usr" -j $CPU_CORES && \
|
||
make PREFIX="$HOME/ffmpeg_build/usr" install
|
||
|
||
# compile x264 and x265
|
||
RUN set -ex && CPU_CORES=$( cat /tmp/cpu-cores ) && export PKG_CONFIG_PATH="$HOME/ffmpeg_build/usr/lib/pkgconfig" && \
|
||
cd ${BUILD_ROOT}/x264-snapshot* && \
|
||
./configure \
|
||
--bindir="$HOME/bin" \
|
||
--disable-opencl \
|
||
--enable-static \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
cd ${BUILD_ROOT}/x265_${X265_VER}/build/linux && \
|
||
cmake -G "Unix Makefiles" \
|
||
-DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build/usr" \
|
||
-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/usr/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/usr/include" \
|
||
# --extra-ldexeflags="-static" \
|
||
--extra-ldflags="-L$HOME/ffmpeg_build/usr/lib" \
|
||
--pkg-config-flags="--static" \
|
||
--prefix="$HOME/ffmpeg_build/usr" && \
|
||
make -j $CPU_CORES && \
|
||
make install && \
|
||
gcc -o tools/qt-faststart $CFLAGS tools/qt-faststart.c && \
|
||
install -D -m755 tools/qt-faststart "$HOME/bin/qt-faststart"
|
||
|
||
# check for missing lib links and archive artefacts if ok
|
||
RUN \
|
||
mkdir -p \
|
||
/package/libs && \
|
||
cd "$HOME"/bin && \
|
||
echo "$OUTPUT_PACKAGES" | tr " " "\\n" >> /tmp/packages_list && \
|
||
while read -r outpackages; \
|
||
do \
|
||
LDD_ERROR_outpackages="$( ldd "$HOME"/bin/"$outpackages" | grep -c 'not found' )" || true; \
|
||
if [ "$LDD_ERROR_outpackages" -ne 0 ]; then \
|
||
echo "number of $outpackages lib errors = $LDD_ERROR_outpackages" && \
|
||
exit 1; \
|
||
fi; \
|
||
for lib in $(ldd "$outpackages" \
|
||
| awk '{if(substr($3,0,1)=="/") print $1,$3}' \
|
||
| cut -d' ' -f2); do \
|
||
cp -avn "$lib" /package/libs/"$(basename "$lib")"; \
|
||
done; \
|
||
done < /tmp/packages_list && \
|
||
tar -cvf /package/ffmpeg.tar -C "$HOME"/bin/ ${OUTPUT_PACKAGES} -C /package/ libs && \
|
||
chmod -R 777 /package
|
||
|
||
CMD ["cp", "-avr", "/package", "/mnt/"]
|