mirror of
https://github.com/linuxserver/ffmpeg-builder.git
synced 2026-01-15 00:51:29 +08:00
588 lines
19 KiB
Docker
588 lines
19 KiB
Docker
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/"]
|