|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Make bashline configurations. |
| 4 | +set -e |
| 5 | +RESET='\033[0m' |
| 6 | +COLOR='\033[1;32m' |
| 7 | +COLOR_ERR='\033[1;31m' |
| 8 | + |
| 9 | +function msg { |
| 10 | + echo -e "${COLOR}$(date): $1${RESET}" |
| 11 | +} |
| 12 | + |
| 13 | +function msg_err { |
| 14 | + echo -e "${COLOR}$(date): $1${RESET}" |
| 15 | +} |
| 16 | + |
| 17 | +function fail { |
| 18 | + msg_err "Error : $?" |
| 19 | + exit 1 |
| 20 | +} |
| 21 | + |
| 22 | +function mcd { |
| 23 | + mkdir -p "$1" || fail |
| 24 | + cd "$1" || fail |
| 25 | +} |
| 26 | + |
| 27 | +msg "Install apt packages." |
| 28 | +sudo apt-get update -qq && sudo apt-get -y install \ |
| 29 | + autoconf automake build-essential cmake \ |
| 30 | + git-core libass-dev libfreetype6-dev \ |
| 31 | + libgnutls28-dev libsdl2-dev libtool \ |
| 32 | + libva-dev libvdpau-dev libvorbis-dev \ |
| 33 | + libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev \ |
| 34 | + meson ninja-build pkg-config texinfo wget yasm \ |
| 35 | + zlib1g-dev libunistring-dev libssl-dev \ |
| 36 | + libc6 libc6-dev unzip libnuma1 libnuma-dev || fail |
| 37 | + |
| 38 | +sudo pip3 install --user meson || fail |
| 39 | + |
| 40 | +sudo apt-get -y upgrade || fail |
| 41 | +sudo apt-get -y dist-upgrade || fail |
| 42 | +sudo apt-get -y autoremove || fail |
| 43 | +sudo apt-get -y autoclean || fail |
| 44 | + |
| 45 | +# Create the compile folder |
| 46 | +SOURCE_PATH="/apps/source/ffmpeg" |
| 47 | +BUILD_PATH="/apps/build/ffmpeg-4.4" |
| 48 | +BIN_PATH="/usr/local/bin" |
| 49 | +mkdir -p $SOURCE_PATH $BUILD_PATH || fail |
| 50 | +sudo mkdir -p $BIN_PATH || fail |
| 51 | + |
| 52 | +# Install dependencies: CMake |
| 53 | +msg "Install cmake 3.21.0." |
| 54 | +cd $SOURCE_PATH || fail |
| 55 | +wget -O- https://cmake.org/files/v3.21/cmake-3.21.0.tar.gz | tar xz -C . || fail |
| 56 | +cd cmake-3.21.0 || fail |
| 57 | +./bootstrap || fail |
| 58 | +make -j$(nproc) || fail |
| 59 | +sudo make install || fail |
| 60 | + |
| 61 | +# Install dependencies: NASM |
| 62 | +msg "Install nasm 2.15.05." |
| 63 | +cd $SOURCE_PATH || fail |
| 64 | +wget -O- https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.bz2 | tar xj -C . || fail |
| 65 | +cd nasm-2.15.05 || fail |
| 66 | +./autogen.sh || fail |
| 67 | +PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" || fail |
| 68 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 69 | +sudo make install || fail |
| 70 | + |
| 71 | +# Install dependencies: libx264 |
| 72 | +msg "Install the newest x264." |
| 73 | +cd $SOURCE_PATH || fail |
| 74 | +git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git |
| 75 | +cd x264 || fail |
| 76 | +PATH="$BIN_PATH:$PATH" PKG_CONFIG_PATH="$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-static --enable-pic || fail |
| 77 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 78 | +sudo make install || fail |
| 79 | + |
| 80 | +# Install dependencies: libx265 |
| 81 | +msg "Install x265 3.5." |
| 82 | +cd $SOURCE_PATH || fail |
| 83 | +git -C x265_git pull 2> /dev/null || git clone --depth 1 -b 3.5 https://bitbucket.org/multicoreware/x265_git |
| 84 | +cd x265_git/build/linux || fail |
| 85 | +PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on ../../source || fail |
| 86 | +PATH="$BIN_PATH:$PATH" CXXFLAGS="$CXXFLAGS -fpermissive" make -j$(nproc) || fail |
| 87 | +sudo make install || fail |
| 88 | +sudo cp $BUILD_PATH/bin/x265 $BIN_PATH || fail |
| 89 | + |
| 90 | +# Install dependencies: libvpx |
| 91 | +msg "Install vpx 1.10.0." |
| 92 | +cd $SOURCE_PATH || fail |
| 93 | +git -C libvpx pull 2> /dev/null || git clone --depth 1 -b v1.10.0 https://chromium.googlesource.com/webm/libvpx.git |
| 94 | +cd libvpx || fail |
| 95 | +PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --enable-pic --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm || fail |
| 96 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 97 | +sudo make install || fail |
| 98 | + |
| 99 | +# Install dependencies: libfdk-aac |
| 100 | +msg "Install fdk-aac 2.0.2." |
| 101 | +cd $SOURCE_PATH || fail |
| 102 | +git -C fdk-aac pull 2> /dev/null || git clone --depth 1 --branch v2.0.2 https://github.com/mstorsjo/fdk-aac |
| 103 | +cd fdk-aac || fail |
| 104 | +autoreconf -fiv || fail |
| 105 | +./configure --prefix="$BUILD_PATH" --enable-shared || fail |
| 106 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 107 | +sudo make install || fail |
| 108 | + |
| 109 | +# Install dependencies: libmp3lame |
| 110 | +msg "Install lame 3.100." |
| 111 | +cd $SOURCE_PATH || fail |
| 112 | +wget -O- https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz | tar xz -C . || fail |
| 113 | +cd lame-3.100 || fail |
| 114 | +PATH="$BIN_PATH:$PATH" ./configure --prefix="$BUILD_PATH" --bindir="$BIN_PATH" --enable-shared --enable-nasm || fail |
| 115 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 116 | +sudo make install || fail |
| 117 | + |
| 118 | +# Install dependencies: libopus |
| 119 | +msg "Install the newest opus." |
| 120 | +cd $SOURCE_PATH || fail |
| 121 | +git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git |
| 122 | +cd opus || fail |
| 123 | +./autogen.sh || fail |
| 124 | +./configure --prefix="$BUILD_PATH" --enable-shared || fail |
| 125 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 126 | +sudo make install || fail |
| 127 | + |
| 128 | +# Install dependencies: libaom |
| 129 | +msg "Install the newest aom." |
| 130 | +cd $SOURCE_PATH || fail |
| 131 | +git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom |
| 132 | +mkdir -p aom_build || fail |
| 133 | +cd aom || fail |
| 134 | +cd ../aom_build || fail |
| 135 | +PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DENABLE_SHARED=on -DCONFIG_PIC=1 -DENABLE_NASM=on ../aom || fail |
| 136 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 137 | +sudo make install || fail |
| 138 | +sudo cp $BUILD_PATH/bin/aom* $BIN_PATH || fail |
| 139 | + |
| 140 | +# Install dependencies: libsvtav1 |
| 141 | +msg "Install the newest svtav1." |
| 142 | +cd $SOURCE_PATH || fail |
| 143 | +git -C SVT-AV1 pull 2> /dev/null || git clone --depth 1 https://gitlab.com/AOMediaCodec/SVT-AV1.git |
| 144 | +mkdir -p SVT-AV1/build || fail |
| 145 | +cd SVT-AV1/build || fail |
| 146 | +PATH="$BIN_PATH:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$BUILD_PATH" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=ON -DBUILD_SHARED_LIBS=ON .. || fail |
| 147 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 148 | +sudo make install || fail |
| 149 | +sudo cp $BUILD_PATH/bin/SvtAv1* $BIN_PATH || fail |
| 150 | + |
| 151 | +# Install dependencies: libdav1d |
| 152 | +msg "Install the newest dav1d." |
| 153 | +cd $SOURCE_PATH || fail |
| 154 | +git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git |
| 155 | +mkdir -p dav1d/build || fail |
| 156 | +cd dav1d/build || fail |
| 157 | +meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$BUILD_PATH" --libdir="$BUILD_PATH/lib" || fail |
| 158 | +ninja -j $(nproc) || fail |
| 159 | +sudo ninja install || fail |
| 160 | + |
| 161 | +# Install dependencies: libvmaf |
| 162 | +msg "Install vmaf 2.1.1." |
| 163 | +cd $SOURCE_PATH || fail |
| 164 | +wget -O- https://github.com/Netflix/vmaf/archive/v2.1.1.tar.gz | tar xz -C . || fail |
| 165 | +mkdir -p vmaf-2.1.1/libvmaf/build || fail |
| 166 | +cd vmaf-2.1.1/libvmaf/build || fail |
| 167 | +meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=static .. --prefix "$BUILD_PATH" --bindir="$BUILD_PATH/bin" --libdir="$BUILD_PATH/lib" || fail |
| 168 | +ninja -j $(nproc) || fail |
| 169 | +sudo ninja install || fail |
| 170 | +sudo cp $BUILD_PATH/bin/SvtAv1* $BIN_PATH || fail |
| 171 | + |
| 172 | +# Install dependencies for GPU: ffnvcodec |
| 173 | +msg "Install the newest ffnvcodec." |
| 174 | +cd $SOURCE_PATH || fail |
| 175 | +git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git || fail |
| 176 | +cd nv-codec-headers || fail |
| 177 | +PATH="$BIN_PATH:$PATH" make -j$(nproc) || fail |
| 178 | +sudo make install |
| 179 | +sudo cp $BUILD_PATH/bin/vmaf $BIN_PATH || fail |
| 180 | + |
| 181 | +# Install ffmpeg |
| 182 | +msg "Install ffmpeg 4.4." |
| 183 | +cd $SOURCE_PATH || fail |
| 184 | +wget -O- http://ffmpeg.org/releases/ffmpeg-4.4.tar.xz | tar xJ -C . || fail |
| 185 | +cd ffmpeg-4.4 || fail |
| 186 | +PATH="$BIN_PATH:$PATH" PKG_CONFIG_PATH="$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH" ./configure \ |
| 187 | + --prefix="$BUILD_PATH" \ |
| 188 | + --pkg-config-flags="--static" \ |
| 189 | + --extra-cflags="-I$BUILD_PATH/include -I/usr/local/cuda/include" \ |
| 190 | + --extra-ldflags="-L$BUILD_PATH/lib -L/usr/local/cuda/lib64" \ |
| 191 | + --extra-libs="-lpthread -lm" \ |
| 192 | + --ld="g++" \ |
| 193 | + --bindir="$BIN_PATH" \ |
| 194 | + --enable-gpl \ |
| 195 | + --enable-gnutls \ |
| 196 | + --enable-cuda-sdk \ |
| 197 | + --enable-libnpp \ |
| 198 | + --enable-libaom \ |
| 199 | + --enable-libass \ |
| 200 | + --enable-libfdk-aac \ |
| 201 | + --enable-libfreetype \ |
| 202 | + --enable-libmp3lame \ |
| 203 | + --enable-libopus \ |
| 204 | + --enable-libsvtav1 \ |
| 205 | + --enable-libdav1d \ |
| 206 | + --enable-libvmaf \ |
| 207 | + --enable-libvorbis \ |
| 208 | + --enable-libvpx \ |
| 209 | + --enable-libx264 \ |
| 210 | + --enable-libx265 \ |
| 211 | + --enable-shared \ |
| 212 | + --enable-nonfree |
| 213 | +PATH="$HOME/bin:$PATH" make -j$(nproc) || fail |
| 214 | +sudo make install || fail |
| 215 | +hash -r || fail |
| 216 | + |
| 217 | +# Make path configurations |
| 218 | +echo "export LD_LIBRARY_PATH=$BUILD_PATH/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc |
| 219 | +echo "export PATH=$BUILD_PATH:\$PATH" >> ~/.bashrc |
| 220 | +echo "export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:\$PKG_CONFIG_PATH" >> ~/.bashrc |
| 221 | +echo "export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:\$PKG_CONFIG_LIBDIR" >> ~/.bashrc |
| 222 | +export LD_LIBRARY_PATH=$BUILD_PATH/lib:$LD_LIBRARY_PATH |
| 223 | +export PATH=$BUILD_PATH:$PATH |
| 224 | +export PKG_CONFIG_PATH=$BUILD_PATH/lib/pkgconfig:$PKG_CONFIG_PATH |
| 225 | +export PKG_CONFIG_LIBDIR=$BUILD_PATH/lib/:$PKG_CONFIG_LIBDIR |
| 226 | + |
| 227 | +msg "According to the instructions from ffmpeg, you need to run \"source ~/.profile\" now." |
0 commit comments