diff --git a/Dockerfile b/Dockerfile index db31f2f..00bb3a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,10 @@ FROM lsiobase/xenial-root-x86 +MAINTAINER sparklyballs -ARG DEBIAN_FRONTEND="noninteractive" -ARG BUILD_PACKAGES="\ +# install build packages +RUN \ + apt-get update && \ + DEBIAN_FRONTEND="noninteractive" apt-get install -y \ autoconf \ automake \ bash \ @@ -11,7 +14,6 @@ ARG BUILD_PACKAGES="\ curl \ frei0r-plugins-dev \ gawk \ - git \ libass-dev \ libfontconfig-dev \ libfreetype6-dev \ @@ -32,7 +34,6 @@ ARG BUILD_PACKAGES="\ libxcb-xfixes0-dev \ libxvidcore-dev \ lsb-release \ - mercurial \ perl \ pkg-config \ sudo \ @@ -41,21 +42,10 @@ ARG BUILD_PACKAGES="\ wget \ xz-utils \ yasm \ - zlib1g-dev" - -# install build packages -RUN \ - apt-get update && \ - apt-get install -y \ - ${BUILD_PACKAGES} && \ + zlib1g-dev && \ rm -rf \ /var/lib/apt/lists/* -# make source folder -RUN \ - mkdir -p \ - /tmp/ffmpeg-source - # package versions ARG FFMPEG_VER="3.3.3" ARG FRIBIDI_VER="0.19.7" @@ -63,20 +53,85 @@ ARG HARFBUZZ_VER="1.4.8" ARG LAME_VER="3.99.5" ARG LIBASS_VER="0.13.7" ARG NASM_VER="2.13.01" -ARG OPENJPEG_VER="2.2.0" +ARG OPENJPEG_VER="2.1.2" ARG OPUS_VER="1.2.1" -ARG RTMP_VER="2.3" +ARG RTMP_COMMIT="fa8646daeb19dfd12c181f7d19de708d623704c0" ARG SOXR_VER="0.1.2" ARG VIDSTAB_VER="1.1.0" +ARG VPX_VER="1.6.1" ARG X265_VER="2.5" ARG ZIMG_VER="2.5.1" +# environment variables +ARG BUILD_ROOT="/tmp/build-root" +ARG SOURCE_FOLDER="/tmp/source-folder" + +# make folders +RUN \ + mkdir -p \ + ${BUILD_ROOT} \ + ${SOURCE_FOLDER} + +# fetch source codes +RUN \ + LAME_BRANCH=${LAME_VER%.*} && \ + 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}/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_BRANCH}/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}/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}/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 + +# unpack source codes +RUN \ + for file in ${SOURCE_FOLDER}/* ; do tar xf $file -C ${BUILD_ROOT} ; done + # compile nasm RUN \ - cd /tmp/ffmpeg-source && \ - wget http://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.bz2 && \ - tar xjvf nasm-${NASM_VER}.tar.bz2 && \ - cd nasm-${NASM_VER} && \ + 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 && \ @@ -84,30 +139,21 @@ RUN \ # compile x264 RUN \ - cd /tmp/ffmpeg-source && \ - wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 && \ - tar xjvf last_x264.tar.bz2 && \ - cd x264-snapshot* && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://bitbucket.org/multicoreware/x265/downloads/x265_${X265_VER}.tar.gz && \ - tar xvf x265_${X265_VER}.tar.gz && \ - cd x265_${X265_VER}/build/linux && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget -O fdk-aac.tar.gz https://github.com/mstorsjo/fdk-aac/tarball/master && \ - tar xzvf fdk-aac.tar.gz && \ - cd mstorsjo-fdk-aac* && \ + cd ${BUILD_ROOT}/mstorsjo-fdk-aac* && \ autoreconf -fiv && \ PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \ PATH="$HOME/bin:$PATH" make && \ @@ -115,30 +161,21 @@ RUN \ # compile harfbuzz RUN \ - cd /tmp/ffmpeg-source && \ - wget https://www.freedesktop.org/software/harfbuzz/release/harfbuzz-${HARFBUZZ_VER}.tar.bz2 && \ - tar xjvf harfbuzz-${HARFBUZZ_VER}.tar.bz2 && \ - cd harfbuzz-${HARFBUZZ_VER} && \ + 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 fribidi RUN \ - cd /tmp/ffmpeg-source && \ - wget http://fribidi.org/download/fribidi-${FRIBIDI_VER}.tar.bz2 && \ - tar xjvf fribidi-${FRIBIDI_VER}.tar.bz2 && \ - cd fribidi-${FRIBIDI_VER} && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://github.com/libass/libass/archive/${LIBASS_VER}.tar.gz && \ - tar xvf ${LIBASS_VER}.tar.gz && \ - cd libass-${LIBASS_VER} && \ + cd ${BUILD_ROOT}/libass-${LIBASS_VER} && \ ./autogen.sh && \ PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \ PATH="$HOME/bin:$PATH" make && \ @@ -146,60 +183,43 @@ RUN \ # compile lame RUN \ - cd /tmp/ffmpeg-source && \ - LAME_BRANCH=${LAME_VER%.*} && \ - wget http://downloads.sourceforge.net/project/lame/lame/${LAME_BRANCH}/lame-${LAME_VER}.tar.gz && \ - tar xzvf lame-${LAME_VER}.tar.gz && \ - cd lame-${LAME_VER} && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz && \ - tar xzvf opus-${OPUS_VER}.tar.gz && \ - cd opus-${OPUS_VER} && \ + 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 libvpx RUN \ - cd /tmp/ffmpeg-source && \ - git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \ - cd libvpx && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://rtmpdump.mplayerhq.hu/download/rtmpdump-${RTMP_VER}.tgz && \ - tar xvf rtmpdump-${RTMP_VER}.tgz && \ - cd rtmpdump-${RTMP_VER} && \ + RTMP_VER=$(printf "%.7s" $RTMP_COMMIT) && \ + cd ${BUILD_ROOT}/rtmpdump-${RTMP_VER} && \ sed -i "s#prefix=.*#prefix=$HOME/ffmpeg_build#" ./Makefile && \ PATH="$HOME/bin:$PATH" make && \ make install # compile soxr RUN \ - cd /tmp/ffmpeg-source && \ - wget https://sourceforge.net/projects/soxr/files/soxr-${SOXR_VER}-Source.tar.xz && \ - tar xvf soxr-${SOXR_VER}-Source.tar.xz && \ - cd soxr-${SOXR_VER}-Source && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://github.com/georgmartius/vid.stab/archive/v${VIDSTAB_VER}.tar.gz && \ - tar xvf v${VIDSTAB_VER}.tar.gz && \ - cd vid.stab-${VIDSTAB_VER} && \ + 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 && \ @@ -207,31 +227,22 @@ RUN \ # compile openjpeg RUN \ - cd /tmp/ffmpeg-source && \ - wget https://github.com/uclouvain/openjpeg/archive/v${OPENJPEG_VER}.tar.gz && \ - tar xvf v${OPENJPEG_VER}.tar.gz && \ - cd openjpeg-${OPENJPEG_VER} && \ - PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DBUILD_SHARED_LIBS:bool=off && \ + 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 \ - cd /tmp/ffmpeg-source && \ - wget https://github.com/sekrit-twc/zimg/archive/release-${ZIMG_VER}.tar.gz && \ - tar xvf release-${ZIMG_VER}.tar.gz && \ - cd zimg-release-${ZIMG_VER} && \ + 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 +# compile ffmpeg RUN \ - cd /tmp/ffmpeg-source && \ - wget http://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \ - tar xjvf ffmpeg-snapshot.tar.bz2 && \ - cd ffmpeg && \ + cd ${BUILD_ROOT}/ffmpeg* && \ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --bindir="$HOME/bin" \ --enable-ffplay \ @@ -274,7 +285,7 @@ RUN \ make install && \ hash -r -# archive artefacts +# archive artefacts RUN \ mkdir -p \ /package && \ diff --git a/list b/list new file mode 100644 index 0000000..d36f635 --- /dev/null +++ b/list @@ -0,0 +1,16 @@ + tar xf ffmpeg-snapshot.tar.bz2 && \ + tar xf fribidi-${FRIBIDI_VER}.tar.bz2 && \ + tar xf harfbuzz-${HARFBUZZ_VER}.tar.bz2 && \ + tar xf last_x264.tar.bz2 && \ + tar xf nasm-${NASM_VER}.tar.bz2 && \ + tar xf ${LIBASS_VER}.tar.gz && \ + tar xf release-${ZIMG_VER}.tar.gz && \ + tar xf rtmpdump-${RTMP_VER}.tgz && \ + tar xf soxr-${SOXR_VER}-Source.tar.xz && \ + tar xf v${OPENJPEG_VER}.tar.gz && \ + tar xf v${VIDSTAB_VER}.tar.gz && \ + tar xf v${VPX_VER}.tar.gz && \ + tar xf x265_${X265_VER}.tar.gz + tar xf fdk-aac.tar.gz && \ + tar xf lame-${LAME_VER}.tar.gz && \ + tar xf opus-${OPUS_VER}.tar.gz && \