#!/usr/bin/env bash set -o errexit set -o nounset set -o pipefail shopt -s inherit_errexit if test -z "${FFMPEG_VERSION}" then echo "You need to set the FFMPEG_VERSION environment variable (see https://git.ffmpeg.org/gitweb/ffmpeg.git/tags)" exit 1 fi FFMPEG_VERSION="${FFMPEG_VERSION#n}" sudo apt-get update -qq sudo apt-get -qq install \ autoconf \ automake \ build-essential \ cmake \ git-core \ libass-dev \ libfreetype6-dev \ libgnutls28-dev \ libmp3lame-dev \ libsdl2-dev \ libtool \ libva-dev \ libvdpau-dev \ libvorbis-dev \ libxcb1-dev \ libxcb-shm0-dev \ libxcb-xfixes0-dev \ meson \ ninja-build \ pkg-config \ texinfo \ wget \ yasm \ zlib1g-dev sudo apt-get -qq install libunistring-dev libaom-dev libdav1d-dev sudo apt-get -qq install nasm sudo apt-get -qq install libx264-dev sudo apt-get -qq install libx265-dev libnuma-dev sudo apt-get -qq install libvpx-dev sudo apt-get -qq install libfdk-aac-dev sudo apt-get -qq install libopus-dev mkdir -p ~/ffmpeg_sources ~/bin # libaom cd ~/ffmpeg_sources && \ git -C aom pull --prune > /dev/null 2>&1 || git clone https://aomedia.googlesource.com/aom aom && \ git -C aom switch --detach $(git -C aom describe --tag --abbrev=0) && \ mkdir -p aom_build && \ cd aom_build && \ PATH="${HOME}/bin:${PATH}" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${HOME}/ffmpeg_build" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../aom && \ PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \ make -j$(nproc) install # libsvtav1 cd ~/ffmpeg_sources && \ git -C svt-av1 pull --prune > /dev/null 2>&1 || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git svt-av1 && \ git -C svt-av1 switch --detach $(git -C svt-av1 describe --tag --abbrev=0) && \ mkdir -p svt-av1_build && \ cd svt-av1_build && \ PATH="${HOME}/bin:${PATH}" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="${HOME}/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_DEC=OFF -DBUILD_SHARED_LIBS=OFF ../svt-av1 && \ PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \ make -j$(nproc) install # libvmaf cd ~/ffmpeg_sources && \ git -C vmaf pull --prune > /dev/null 2>&1 || git clone https://github.com/Netflix/vmaf.git vmaf && \ git -C vmaf switch --detach $(git -C vmaf describe --tag --abbrev=0) && \ mkdir -p vmaf_build && \ cd vmaf_build && \ meson setup -Denable_tests=false -Denable_docs=false --buildtype=release --default-library=static ../vmaf/libvmaf --prefix "${HOME}/ffmpeg_build" --bindir="bin" --libdir="lib" && \ ninja -j$(nproc) && \ ninja -j$(nproc) install # ffmpeg FFMPEG_VERSION_STRING="ffmpeg-${FFMPEG_VERSION}" cd ~/ffmpeg_sources && \ wget -O ${FFMPEG_VERSION_STRING}.tar.gz https://ffmpeg.org/releases/${FFMPEG_VERSION_STRING}.tar.gz && \ tar xvf ${FFMPEG_VERSION_STRING}.tar.gz && \ cd ${FFMPEG_VERSION_STRING} && \ PATH="${HOME}/bin:${PATH}" PKG_CONFIG_PATH="${HOME}/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I${HOME}/ffmpeg_build/include" \ --extra-ldflags="-L${HOME}/ffmpeg_build/lib" \ --extra-libs="-lpthread -lm" \ --ld="g++" \ --bindir="${HOME}/bin" \ --enable-gpl \ --enable-gnutls \ --enable-libaom \ --enable-libass \ --enable-libdav1d \ --enable-libfdk-aac \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libsvtav1 \ --enable-libvmaf \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree && \ PATH="${HOME}/bin:${PATH}" make -j$(nproc) && \ make -j$(nproc) install && \ hash -r . ~/.profile