Created
July 31, 2019 02:00
-
-
Save furushchev/09cefa60daa950124ab356114846259f to your computer and use it in GitHub Desktop.
Install FFmpeg with hardware acceleration
This file contains hidden or 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 | |
set -ex | |
# COMMON BUILD TOOLS | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get install -y -q --no-install-recommends build-essential autoconf make git wget pciutils cpio libtool lsb-release ca-certificates pkg-config bison flex libcurl4-gnutls-dev zlib1g-dev | |
# Build NASM | |
cd /tmp | |
export NASM_VER=2.13.03 | |
export NASM_REPO=https://www.nasm.us/pub/nasm/releasebuilds/${NASM_VER}/nasm-${NASM_VER}.tar.bz2 | |
wget ${NASM_REPO} && \ | |
tar -xaf nasm* && \ | |
cd nasm-${NASM_VER} && \ | |
./autogen.sh && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib && \ | |
make -j8 && \ | |
sudo make install | |
# Build YASM | |
cd /tmp | |
export YASM_VER=1.3.0 | |
export YASM_REPO=https://www.tortall.net/projects/yasm/releases/yasm-${YASM_VER}.tar.gz | |
wget -O - ${YASM_REPO} | tar xz && \ | |
cd yasm-${YASM_VER} && \ | |
sed -i "s/) ytasm.*/)/" Makefile.in && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib && \ | |
make -j8 && \ | |
sudo make install | |
# Build ogg | |
cd /tmp | |
export OGG_VER=1.3.3 | |
export OGG_REPO=https://downloads.xiph.org/releases/ogg/libogg-${OGG_VER}.tar.xz | |
wget -O - ${OGG_REPO} | tar xJ && \ | |
cd libogg-${OGG_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared && \ | |
make -j8 && \ | |
sudo make install | |
# Build vorbis | |
cd /tmp | |
export VORBIS_VER=1.3.6 | |
export VORBIS_REPO=https://downloads.xiph.org/releases/vorbis/libvorbis-${VORBIS_VER}.tar.xz | |
wget -O - ${VORBIS_REPO} | tar xJ && \ | |
cd libvorbis-${VORBIS_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared && \ | |
make -j8 && \ | |
sudo make install | |
# Build mp3lame | |
cd /tmp | |
export MP3LAME_VER=3.100 | |
export MP3LAME_REPO=https://sourceforge.net/projects/lame/files/lame/${MP3LAME_VER}/lame-${MP3LAME_VER}.tar.gz | |
wget -O - ${MP3LAME_REPO} | tar xz && \ | |
cd lame-${MP3LAME_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared --enable-nasm && \ | |
make -j8 && \ | |
sudo make install | |
# Build fdk-aac | |
cd /tmp | |
export FDK_AAC_VER=v0.1.6 | |
export FDK_AAC_REPO=https://github.com/mstorsjo/fdk-aac/archive/${FDK_AAC_VER}.tar.gz | |
wget -O - ${FDK_AAC_REPO} | tar xz && mv fdk-aac-${FDK_AAC_VER#v} fdk-aac && \ | |
cd fdk-aac && \ | |
autoreconf -fiv && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared && \ | |
make -j8 && \ | |
sudo make install | |
# Build opus | |
cd /tmp | |
export OPUS_VER=1.2.1 | |
export OPUS_REPO=https://archive.mozilla.org/pub/opus/opus-${OPUS_VER}.tar.gz | |
wget -O - ${OPUS_REPO} | tar xz && \ | |
cd opus-${OPUS_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared && \ | |
make -j8 && \ | |
sudo make install | |
# Build vpx | |
cd /tmp | |
export VPX_VER=tags/v1.7.0 | |
export VPX_REPO=https://chromium.googlesource.com/webm/libvpx.git | |
git clone ${VPX_REPO} && \ | |
cd libvpx && \ | |
git checkout ${VPX_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=nasm && \ | |
make -j8 && \ | |
sudo make install | |
# Build AOM | |
cd /tmp | |
export AOM_VER=b6f1767eedbaddeb1ff5aa409a710ef61078640e | |
export AOM_REPO=https://aomedia.googlesource.com/aom | |
git clone ${AOM_REPO} && \ | |
mkdir aom/aom_build && \ | |
cd aom/aom_build && \ | |
git checkout ${AOM_VER} && \ | |
cmake -DBUILD_SHARED_LIBS=ON -DENABLE_NASM=ON -DENABLE_TESTS=OFF -DENABLE_DOCS=OFF -DCMAKE_INSTALL_PREFIX="/usr/local" -DLIB_INSTALL_DIR=lib .. && \ | |
make -j8 && \ | |
sudo make install | |
# Build x264 | |
cd /tmp | |
export X264_VER=stable | |
export X264_REPO=https://github.com/mirror/x264 | |
git clone ${X264_REPO} && \ | |
cd x264 && \ | |
git checkout ${X264_VER} && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --enable-shared && \ | |
make -j8 && \ | |
sudo make install | |
# Build x265 | |
cd /tmp | |
export X265_VER=2.9 | |
export X265_REPO=https://github.com/videolan/x265/archive/${X265_VER}.tar.gz | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update && sudo apt-get install -y -q --no-install-recommends libnuma-dev | |
wget -O - ${X265_REPO} | tar xz && mv x265-${X265_VER} x265 && \ | |
cd x265/build/linux && \ | |
cmake -DBUILD_SHARED_LIBS=ON -DENABLE_TESTS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local -DLIB_INSTALL_DIR=lib ../../source && \ | |
make -j8 && \ | |
sudo make install | |
# Fetch SVT-HEVC | |
cd /tmp | |
export SVT_HEVC_VER=20a47b0d904e9d99e089d93d7c33af92788cbfdb | |
export SVT_HEVC_REPO=https://github.com/intel/SVT-HEVC | |
git clone ${SVT_HEVC_REPO} && \ | |
cd SVT-HEVC/Build/linux && \ | |
git checkout ${SVT_HEVC_VER} && \ | |
mkdir -p ../../Bin/Release && \ | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ | |
make -j8 && \ | |
sudo make install | |
# Fetch SVT-AV1 | |
cd /tmp | |
export SVT_AV1_VER=v0.6.0 | |
export SVT_AV1_REPO=https://github.com/OpenVisualCloud/SVT-AV1 | |
git clone ${SVT_AV1_REPO} && \ | |
cd SVT-AV1/Build/linux && \ | |
git checkout ${SVT_AV1_VER} && \ | |
mkdir -p ../../Bin/Release && \ | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ | |
make -j8 && \ | |
sudo make install | |
#Remove build residue from SVT-AV1 build -- temp fix for bug | |
if [ -d "build/home/" ]; then rm -rf build/home/; fi | |
# Fetch SVT-VP9 | |
cd /tmp | |
export SVT_VP9_VER=d18b4acf9139be2e83150e318ffd3dba1c432e74 | |
export SVT_VP9_REPO=https://github.com/OpenVisualCloud/SVT-VP9 | |
git clone ${SVT_VP9_REPO} && \ | |
cd SVT-VP9/Build/linux && \ | |
git checkout ${SVT_VP9_VER} && \ | |
mkdir -p ../../Bin/Release && \ | |
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_ASM_NASM_COMPILER=yasm ../.. && \ | |
make -j8 && \ | |
sudo make install | |
#include(transform360.m4) | |
# Fetch gmmlib | |
cd /tmp | |
export GMMLIB_VER=intel-gmmlib-18.3.0 | |
export GMMLIB_REPO=https://github.com/intel/gmmlib/archive/${GMMLIB_VER}.tar.gz | |
wget -O - ${GMMLIB_REPO} | tar xz && mv gmmlib-${GMMLIB_VER} gmmlib; | |
# Build libva | |
cd /tmp | |
export LIBVA_VER=2.4.0 | |
export LIBVA_REPO=https://github.com/intel/libva/archive/${LIBVA_VER}.tar.gz | |
sudo apt-get remove libva* | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq && sudo apt-get install -y -qq --no-install-recommends libdrm-dev libx11-dev xorg-dev libgl1-mesa-dev openbox | |
cd /tmp | |
wget -O - ${LIBVA_REPO} | tar xz && \ | |
cd libva-${LIBVA_VER} && \ | |
./autogen.sh --prefix=/usr/local --libdir=/usr/local/lib && \ | |
make -j8 && \ | |
sudo make install | |
# Build media driver | |
export MEDIA_DRIVER_VER=intel-media-kbl-19.1.0 | |
export MEDIA_DRIVER_REPO=https://github.com/VCDP/media-driver/archive/${MEDIA_DRIVER_VER}.tar.gz | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq && sudo apt-get install -y -q --no-install-recommends libdrm-dev libpciaccess-dev libx11-dev xorg-dev libgl1-mesa-dev | |
cd /tmp | |
wget -O - ${MEDIA_DRIVER_REPO} | tar xz && mv media-driver-${MEDIA_DRIVER_VER} /tmp/media-driver && \ | |
mkdir -p /tmp/media-driver/build && \ | |
cd /tmp/media-driver/build && \ | |
cmake -DBUILD_TYPE=release -DBUILD_ALONG_WITH_CMRTLIB=1 -DMEDIA_VERSION="2.0.0" \ | |
-DBS_DIR_GMMLIB=/tmp/gmmlib/Source/GmmLib -DBS_DIR_COMMON=/tmp/gmmlib/Source/Common \ | |
-DBS_DIR_INC=/tmp/gmmlib/Source/inc -DBS_DIR_MEDIA=/tmp/media-driver -Wno-dev -DCMAKE_INSTALL_PREFIX=/usr/local .. && \ | |
make -j8 && \ | |
sudo make install | |
# Build Intel(R) Media SDK | |
export MSDK_VER=MSS-KBL-2019-R1 | |
export MSDK_REPO=https://github.com/Intel-Media-SDK/MediaSDK/archive/${MSDK_VER}.tar.gz | |
cd /tmp | |
wget -O - ${MSDK_REPO} | tar xz && mv MediaSDK-${MSDK_VER} /tmp/MediaSDK && \ | |
mkdir -p /tmp/MediaSDK/build && \ | |
cd /tmp/MediaSDK/build && \ | |
cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DCMAKE_INSTALL_INCLUDEDIR=include -DBUILD_SAMPLES=OFF -DENABLE_OPENCL=OFF -Wno-dev .. && \ | |
make -j8 && \ | |
sudo make install | |
# Fetch FFmpeg source | |
export FFMPEG_VER=n4.1 | |
export FFMPEG_REPO=https://github.com/FFmpeg/FFmpeg/archive/${FFMPEG_VER}.tar.gz | |
export FFMPEG_FLV_PATCH_REPO=https://raw.githubusercontent.com/VCDP/CDN/master/The-RTMP-protocol-extensions-for-H.265-HEVC.patch | |
export FFMPEG_1TN_PATCH_REPO=https://patchwork.ffmpeg.org/patch/11625/raw | |
export FFMPEG_THREAD_PATCH_REPO=https://patchwork.ffmpeg.org/patch/11035/raw | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq && \ | |
sudo apt-get install -y -q --no-install-recommends libass-dev libfreetype6-dev libvdpau-dev libsdl2-dev \ | |
libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev zlib1g-dev libssl-dev | |
cd /tmp | |
wget -O - ${FFMPEG_REPO} | tar xz && mv FFmpeg-${FFMPEG_VER} /tmp/FFmpeg && \ | |
cd /tmp/FFmpeg && \ | |
wget -O - ${FFMPEG_FLV_PATCH_REPO} | patch -p1 && \ | |
wget -O - ${FFMPEG_1TN_PATCH_REPO} | patch -p1 && \ | |
wget -O - ${FFMPEG_THREAD_PATCH_REPO} | patch -p1 ; | |
# Patch FFmpeg source for SVT-HEVC | |
cd /tmp/FFmpeg && \ | |
patch -p1 < ../SVT-HEVC/ffmpeg_plugin/0001-lavc-svt_hevc-add-libsvt-hevc-encoder-wrapper.patch; | |
# Patch FFmpeg source for SVT-AV1 | |
cd /tmp/FFmpeg; \ | |
patch -p1 < ../SVT-AV1/ffmpeg_plugin/0001-Add-ability-for-ffmpeg-to-run-svt-av1-with-svt-hevc.patch; | |
# Compile FFmpeg | |
export LIBVA_DRIVERS_PATH=/usr/local/lib/dri | |
export LIBVA_DRIVER_NAME=iHD | |
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH | |
cd /tmp/FFmpeg && \ | |
./configure --prefix="/usr/local" --libdir=/usr/local/lib --extra-libs="-lpthread -lm" --enable-shared --enable-gpl --enable-libass \ | |
--enable-libfreetype --enable-openssl --enable-nonfree --enable-libdrm --enable-libmfx \ | |
--disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages \ | |
--enable-libfdk-aac --enable-libmp3lame --enable-libopus --enable-libvorbis --enable-libvpx \ | |
--enable-libx264 --enable-libx265 --enable-libaom --enable-libsvthevc --enable-libsvtav1 && \ | |
make -j8 && \ | |
sudo make install | |
# Prerequisites | |
DEBIAN_FRONTEND=noninteractive sudo apt-get update -qq && sudo apt-get install -y -q --no-install-recommends libxv1 libxcb-shm0 libxcb-shape0 libxcb-xfixes0 libsdl2-2.0-0 libasound2 libvdpau1 libnuma1 libass5 libssl1.0.0 libdrm2 | |
# Install | |
cat <<EOF >> ~/.bashrc | |
# Intel Hardware Encoding | |
export LIBVA_DRIVERS_PATH=/usr/local/lib/dri | |
export LIBVA_DRIVER_NAME=iHD | |
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH | |
EOF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment