Build ffmpeg

The folling guide is based on the ubuntu guide and the linux mint guide.

Preparation

# get dependencies
sudo apt install autoconf automake build-essential cmake git-core libass-dev libfreetype6-dev libgnutls28-dev libmp3lame-dev libsdl2-dev libtool libva-dev libvdpau-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev meson ninja-build pkg-config texinfo wget yasm zlib1g-dev nasm
# create directories
rm -rf ~/ffmpeg_sources
mkdir -p ~/ffmpeg_sources ~/bin

Compilation & Installation

libx264

cd ~/ffmpeg_sources
git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic
PATH="$HOME/bin:$PATH" make
make install

libx265

sudo apt install libnuma-dev
cd ~/ffmpeg_sources
wget -O x265.tar.bz2 https://bitbucket.org/multicoreware/x265_git/get/master.tar.bz2
tar xjvf x265.tar.bz2
cd multicoreware*/build/linux
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source
PATH="$HOME/bin:$PATH" make
make install

libvpx

cd ~/ffmpeg_sources
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
cd libvpx
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
PATH="$HOME/bin:$PATH" make
make install

libsvtav1

# libdav1d for decoding
cd ~/ffmpeg_sources
git -C dav1d pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/dav1d.git
mkdir -p dav1d/build
cd dav1d/build
meson setup -Denable_tools=false -Denable_tests=false --default-library=static .. --prefix "$HOME/ffmpeg_build" --libdir="$HOME/ffmpeg_build/lib"
ninja
ninja install

# libsvtav1 for encoding
cd ~/ffmpeg_sources
git -C SVT-AV1 pull 2> /dev/null || git clone https://gitlab.com/AOMediaCodec/SVT-AV1.git
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 ..
PATH="$HOME/bin:$PATH" make
make install

vvc

cd ~/ffmpeg_sources
git -C vvenc pull 2> /dev/null || git clone --depth 1 https://github.com/fraunhoferhhi/vvenc
cd vvenc && PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
PATH="$HOME/bin:$PATH" make -j$(nproc)
make -j$(nproc) install

others

sudo apt install libfdk-aac-dev libopus-dev libaom-dev libcaca-dev libtheora-dev libvorbis-dev

Install ffmpeg

dependencies

sudo apt install \
    openssl \
    libssl-dev \
    frei0r-plugins-dev \
    libchromaprint-dev \
    libgme-dev \
    flite1-dev \
    libbs2b-dev \
    libopenjp2-7-dev \
    libopencore-amrnb-dev \
    librubberband-dev \
    libopenmpt-dev \
    libshine-dev \
    libsnappy-dev \
    libsoxr-dev \
    libspeex-dev \
    libtwolame-dev \
    libv4l-dev \
    libvidstab-dev \
    libvo-amrwbenc-dev \
    libxvidcore-dev \
    liblzma-dev \
    libbluray-dev \
    libcdparanoia-dev \
    libcdio-dev \
    libcdio-paranoia-dev \
    ladspa-sdk \
    libgsm1-dev \
    libvpl2 \
    libwebp-dev \
    libzimg-dev \
    libzvbi-dev

compile

# download ffmpeg
cd ~/ffmpeg_sources
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
tar xjvf ffmpeg-snapshot.tar.bz2
cd ffmpeg
echo -e "$(cat VERSION) [$(date +%Y-%m-%d)] [$(cat RELEASE)] " > VERSION

# compile
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-chromaprint \
--enable-frei0r \
--enable-gpl \
--enable-ladspa \
--enable-libaom \
--enable-libass \
--enable-libbluray \
--enable-libbs2b \
--enable-libcaca \
--enable-libcdio \
--enable-libdav1d \
--enable-libfdk-aac \
--enable-libflite \
--enable-libfontconfig \
--enable-libfreetype \
--enable-libfribidi \
--enable-libgme  \
--enable-libmp3lame \
--enable-libopenmpt \
--enable-libopus \
--enable-libpulse \
--enable-librubberband \
--enable-libshine \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libsvtav1 \
--enable-libtheora \
--enable-libtwolame \
--enable-libvidstab \
--enable-libvo-amrwbenc \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libxml2 \
--enable-libxvid \
--enable-nonfree \
--enable-opengl \
--enable-openssl \
--enable-version3 \
--enable-librubberband \
--enable-libharfbuzz \
--enable-libwebp \
--enable-libzimg \
--enable-libzvbi \
--enable-libgsm \
--enable-libvvenc \
--enable-vaapi
PATH="$HOME/bin:$PATH" make -j$(nproc) && make -j$(nproc) install && hash -r

# linkage
cp ~/ffmpeg_build/bin/x265 ~/bin
cp ~/ffmpeg_build/bin/SvtAv1EncApp ~/bin
cd ~/bin
# cp ffmpeg /usr/bin/. && cp ffprobe /usr/bin/.