Last active
February 12, 2024 10:51
-
-
Save bootrino/53c4865f91f2208d2ddd4a1fadd69f58 to your computer and use it in GitHub Desktop.
Compile ffmpeg with nvenc for Ubuntu 22
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
#This script will compile and install a static ffmpeg build with support for nvenc un ubuntu. | |
#See the prefix path and compile options if edits are needed to suit your needs. | |
# ripped from https://gist.github.com/Brainiarc7/3f7695ac2a0905b05c5b | |
# updated to my personal needs | |
# tested on Ubuntu 22 | |
# refer here: | |
# https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=runfile_local | |
#install required things from apt | |
installPackages(){ | |
echo "Installing Ubuntu dependencies..." | |
# everything done on an indivdual line ot prevent problems and show issues | |
export DEBIAN_FRONTEND=noninteractive | |
sudo DEBIAN_FRONTEND=noninteractive apt update | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y autoconf | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y automake | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y build-essential | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y cmake | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y git | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y gnutls-bin | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libaom-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libass-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libdav1d-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libfdk-aac-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libfreetype6-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libgnutls28-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libgpac-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libmp3lame-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libnuma-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libopus-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libsdl2-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libssh-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libtheora-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libtool | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libunistring-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libva-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libvdpau-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libvorbis-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libvpx-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libwebp-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libx264-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libx265-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libxcb-shm0-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libxcb-xfixes0-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libxcb1-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libxvidcore-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y libzimg-dev | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y meson | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y nasm | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y ninja-build | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y pkg-config | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y texi2html | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y texinfo | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y unzip | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y virtualenv | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y wget | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y yasm | |
sudo DEBIAN_FRONTEND=noninteractive apt install -y zlib1g-dev | |
} | |
HOME_DIR=$HOME/ffmpeg_compile | |
BUILD_DIR=$HOME_DIR/ffmpeg_build | |
SOURCE_DIR=$HOME_DIR/ffmpeg_sources | |
compileAV1(){ | |
# SVTAV1 compiles OK but does not work in ffmpeg!! | |
# refer: https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Build-Guide.md | |
# ffmpeg --help encoder=av1 | |
mkdir -p ~/ffmpeg_build | |
mkdir -p ~/ffmpeg_sources | |
cd ~/ffmpeg_sources | |
sudo rm -rf SVT-AV1 | |
git clone --depth=1 https://gitlab.com/AOMediaCodec/SVT-AV1.git | |
cd SVT-AV1 | |
cd Build | |
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release | |
make -j $(nproc) | |
sudo make install | |
# ensure the directory containing the lib is in the path | |
sudo ldconfig /usr/local/lib | |
} | |
compileVP9(){ | |
# THIS PROJECT IS BROKEN/DEAD https://github.com/rdp/ffmpeg-windows-build-helpers/issues/560#issuecomment-1485944615 | |
# notice this is run as part of the ffmpeg function because a git patch must be applied | |
# refer to the function that builds ffmpeg | |
# refer: https://gitlab.com/AOMediaCodec/SVT-AV1/-/blob/master/Docs/Build-Guide.md | |
# ffmpeg --help encoder=av1 | |
#mkdir -p ~/ffmpeg_build | |
mkdir -p $SOURCE_DIR | |
cd $SOURCE_DIR | |
sudo rm -rf SVT-VP9 | |
git clone --depth=1 https://github.com/OpenVisualCloud/SVT-VP9.git | |
cd SVT-VP9/Build | |
cmake .. -G"Unix Makefiles" -DCMAKE_BUILD_TYPE=Release | |
make -j $(nproc) | |
sudo make install | |
# ensure the directory containing the lib is in the path | |
sudo ldconfig /usr/local/lib | |
git apply $SOURCE_DIR/SVT-VP9/ffmpeg_plugin/master-0001-Add-ability-for-ffmpeg-to-run-svt-vp9.patch | |
} | |
InstallCUDASDK(){ | |
echo "Installing CUDA and the latest driver repositories from repositories" | |
cd $SOURCE_DIR | |
if [ ! -f $SOURCE_DIR/cuda_11.7.1_515.65.01_linux.run ] | |
then | |
wget https://developer.download.nvidia.com/compute/cuda/11.7.1/local_installers/cuda_11.7.1_515.65.01_linux.run | |
fi | |
sudo sh cuda_11.7.1_515.65.01_linux.run --silent | |
} | |
#Install nvidia SDK | |
installNvidiaSDK(){ | |
echo "Installing the nVidia NVENC SDK." | |
cd $SOURCE_DIR | |
if [ ! -d $SOURCE_DIR/nv-codec-headers ] | |
then | |
git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git | |
fi | |
cd nv-codec-headers | |
make | |
sudo make install | |
} | |
compileFfmpeg(){ | |
echo "Compiling ffmpeg" | |
cd $SOURCE_DIR | |
if [ ! -d $SOURCE_DIR/FFmpeg ] | |
then | |
git clone https://github.com/FFmpeg/FFmpeg -b master | |
fi | |
cd FFmpeg | |
# this must be done here because the vp9 install process applies a patch to the ffmpeg source | |
#compileVP9 | |
cd $SOURCE_DIR/FFmpeg | |
echo "Successfully built vp9..." | |
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" \ | |
--extra-cflags=-I/usr/local/cuda/include \ | |
--extra-ldflags=-L/usr/local/cuda/lib64 \ | |
--ld="g++" \ | |
--bindir="$HOME/bin" \ | |
--enable-gpl \ | |
--enable-gnutls \ | |
--enable-libaom \ | |
--enable-libass \ | |
--enable-libfdk-aac \ | |
--enable-libfreetype \ | |
--enable-libmp3lame \ | |
--enable-libopus \ | |
--enable-libvorbis \ | |
--enable-libvpx \ | |
--enable-libx264 \ | |
--enable-libx265 \ | |
--enable-nvenc \ | |
--enable-libfontconfig \ | |
--enable-libwebp \ | |
--enable-libx264 \ | |
--enable-libx265 \ | |
--enable-nonfree \ | |
--enable-cuda-nvcc \ | |
--enable-libsvtav1 \ | |
--enable-libnpp | |
# --enable-libsvtvp9 \ | |
# –disable-shared | |
PATH="$HOME/bin:$PATH" make -j$(nproc) | |
sudo make -j$(nproc) install | |
#sudo make -j$(nproc) distclean | |
hash -r | |
} | |
#The process | |
# process fails if xorg is running | |
sudo systemctl stop xorg | |
PATH="/usr/local/cuda/bin:$PATH" | |
mkdir -p $HOME_DIR | |
cd $HOME_DIR | |
mkdir -p $HOME_DIR/ffmpeg_build | |
mkdir -p $SOURCE_DIR | |
installPackages | |
compileAV1 | |
InstallCUDASDK | |
installNvidiaSDK | |
compileFfmpeg | |
echo "Complete!" | |
echo "You might have to reinstall nvidia drivers and restart xorg" | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment