This is an old revision of the document!
ffmpeg with NVENC/CUDA install on Linux
Need to compile, point libraries and build dirs to local user folder for build so that it is easier to remove and clean up if you mess up instead of putting directly into /usr/local, which is default.
Nvidia's guide, is well.. semi accurate, but not verbatim.
Software requirements
Nvidia Drivers
Install repo, install driver, reboot
Cuda Toolkit
apt install nvidia-cuda-toolkit
This worked better than doing the manual install given from Nvidia's website, but you can also manually compile to ~/ffmpeg_sources for the same effect.
Packages from repo
mkdir -p ~/ffmpeg_sources ~/bin sudo apt-get install build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1 libnuma-dev
additional packages
apt install nasm libx264-dev libx265-dev libnuma-dev libvpx-dev libfdk-aac-dev libopus-dev libdav1d-dev #libaom, manual compile cd ~/ffmpeg_sources && \ git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \ 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 && \ make install
Driver connection chart
ldd /usr/local/bin/ffmpeg linux-vdso.so.1 (0x00007ffd5ed27000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f45a5902000) libnppig.so.11 => /lib/x86_64-linux-gnu/libnppig.so.11 (0x00007f45a3a35000) libnppicc.so.11 => /lib/x86_64-linux-gnu/libnppicc.so.11 (0x00007f45a3310000) libnppidei.so.11 => /lib/x86_64-linux-gnu/libnppidei.so.11 (0x00007f45a28b7000) libnppif.so.11 => /lib/x86_64-linux-gnu/libnppif.so.11 (0x00007f459ee2e000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f459ee28000) libvpx.so.6 => /lib/x86_64-linux-gnu/libvpx.so.6 (0x00007f459ec0b000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f459ebe9000) libdav1d.so.4 => /lib/x86_64-linux-gnu/libdav1d.so.4 (0x00007f459eab5000) libfdk-aac.so.2 => /lib/x86_64-linux-gnu/libfdk-aac.so.2 (0x00007f459e972000) libopus.so.0 => /lib/x86_64-linux-gnu/libopus.so.0 (0x00007f459e917000) libx264.so.160 => /lib/x86_64-linux-gnu/libx264.so.160 (0x00007f459e655000) libx265.so.192 => /lib/x86_64-linux-gnu/libx265.so.192 (0x00007f459d6d6000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f459d511000) /lib64/ld-linux-x86-64.so.2 (0x00007f45a7823000) libnppc.so.11 => /lib/x86_64-linux-gnu/libnppc.so.11 (0x00007f459d280000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f459d275000) libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f459d0a8000) libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f459d08e000) libnuma.so.1 => /lib/x86_64-linux-gnu/libnuma.so.1 (0x00007f459d07e000)
Install steps
Download ffmpeg
cd ~/ffmpeg_sources && git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/
Set Paths
cd ffmpeg/ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
Configure
./configure --prefix="$HOME/ffmpeg_build" --pkg-config-flags="--static" --enable-nonfree --enable-cuda-nvcc --enable-libnpp --extra-cflags="-I$HOME/ffmpeg_build/include" --extra-cflags=-I/usr/local/cuda/include --extra-ldflags="-L$HOME/ffmpeg_build/lib" --extra-ldflags=-L/usr/local/cuda/lib64 --extra-libs="-lpthread -lm" --ld="g++" --bindir="$HOME/bin" --enable-gpl --enable-libfdk-aac --enable-libopus --enable-libdav1d --enable-libvpx --enable-libx264 --enable-libx265
Compile
Sets the compiled app output to ~/bin
PATH="$HOME/bin:$PATH" make
Install
make install
Optional - Move files into /usr/ for global use
cp ~/bin/ffmpeg /usr/local/bin/
Resources
-
- This addresses where to put the codec-headers if you want to compile it yourself per the guide, and want it to get picked up by the config script.