#!/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. #install required things from apt installLibs(){ echo "Installing prerequisites" sudo apt-get update sudo apt-get -y --force-yes install autoconf automake build-essential libass-dev libfreetype6-dev libgpac-dev \ libsdl1.2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev \ libxcb-xfixes0-dev pkg-config texi2html zlib1g-dev } #install CUDA SDK InstallCUDASDK(){ echo "Installing CUDA and the latest driver repositories from repositories" cd ~/ffmpeg_sources wget -c -v -nc https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_9.2.88-1_amd64.deb sudo dpkg -i cuda-repo-ubuntu1604_9.2.88-1_amd64.deb sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub sudo apt-get -y update sudo apt-get -y install cuda sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update && sudo apt-get -y upgrade } #Install nvidia SDK installSDK(){ echo "Installing the nVidia NVENC SDK." cd ~/ffmpeg_sources cd ~/ffmpeg_sources git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git cd nv-codec-headers make sudo make install } #Compile nasm compileNasm(){ echo "Compiling nasm" cd ~/ffmpeg_sources wget http://www.nasm.us/pub/nasm/releasebuilds/2.14rc0/nasm-2.14rc0.tar.gz tar xzvf nasm-2.14rc0.tar.gz cd nasm-2.14rc0 ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean } #Compile libx264 compileLibX264(){ echo "Compiling libx264" cd ~/ffmpeg_sources wget http://download.videolan.org/pub/x264/snapshots/last_x264.tar.bz2 tar xjvf last_x264.tar.bz2 cd x264-snapshot* PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static PATH="$HOME/bin:$PATH" make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean } #Compile libfdk-acc compileLibfdkcc(){ echo "Compiling libfdk-cc" sudo apt-get install unzip cd ~/ffmpeg_sources wget -O fdk-aac.zip https://github.com/mstorsjo/fdk-aac/zipball/master unzip fdk-aac.zip cd mstorsjo-fdk-aac* autoreconf -fiv ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean } #Compile libmp3lame compileLibMP3Lame(){ echo "Compiling libmp3lame" sudo apt-get install nasm cd ~/ffmpeg_sources wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz tar xzvf lame-3.99.5.tar.gz cd lame-3.99.5 ./configure --prefix="$HOME/ffmpeg_build" --enable-nasm --disable-shared make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean } #Compile libopus compileLibOpus(){ echo "Compiling libopus" cd ~/ffmpeg_sources wget http://downloads.xiph.org/releases/opus/opus-1.2.1.tar.gz tar xzvf opus-1.2.1.tar.gz cd opus-1.2.1 ./configure --prefix="$HOME/ffmpeg_build" --disable-shared make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean } #Compile libvpx compileLibPvx(){ echo "Compiling libvpx" cd ~/ffmpeg_sources git clone https://chromium.googlesource.com/webm/libvpx cd libvpx PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --enable-runtime-cpu-detect --enable-vp9 --enable-vp8 \ --enable-postproc --enable-vp9-postproc --enable-multi-res-encoding --enable-webm-io --enable-better-hw-compatibility --enable-vp9-highbitdepth --enable-onthefly-bitpacking --enable-realtime-only \ --cpu=native --as=nasm PATH="$HOME/bin:$PATH" make -j$(nproc) make -j$(nproc) install make -j$(nproc) clean } #Compile ffmpeg compileFfmpeg(){ echo "Compiling ffmpeg" cd ~/ffmpeg_sources git clone https://github.com/FFmpeg/FFmpeg -b master cd FFmpeg PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --extra-cflags="-I$HOME/ffmpeg_build/include" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --bindir="$HOME/bin" \ --enable-cuda-sdk \ --enable-cuvid \ --enable-libnpp \ --extra-cflags="-I/usr/local/cuda/include/" \ --extra-ldflags=-L/usr/local/cuda/lib64/ \ --enable-gpl \ --enable-libass \ --enable-libfdk-aac \ --enable-vaapi \ --enable-libfreetype \ --enable-libmp3lame \ --enable-libopus \ --enable-libtheora \ --enable-libvorbis \ --enable-libvpx \ --enable-libx264 \ --enable-nonfree \ --enable-nvenc PATH="$HOME/bin:$PATH" make -j$(nproc) make -j$(nproc) install make -j$(nproc) distclean hash -r } #The process cd ~ mkdir ffmpeg_sources installLibs InstallCUDASDK installSDK compileNasm compileLibX264 compileLibfdkcc compileLibMP3Lame compileLibOpus compileLibPvx compileFfmpeg echo "Complete!"