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/.