in perfkitbenchmarker/linux_packages/ffmpeg.py [0:0]
def AptInstall(vm):
"""Installs FFmpeg on systems with the apt package manager."""
if not _BUILD_FFMPEG_FROM_SOURCE.value:
vm.InstallPackages('ffmpeg')
return
stdout, _ = vm.RemoteCommand(
'if lspci | grep -i "NVIDIA Corporation" >/dev/null; then echo "Contains'
' GPU"; else echo "Does not contain GPU"; fi'
)
if 'Contains GPU' in stdout:
vm.Install('cuda_toolkit')
vm.InstallPackages('nvidia-cuda-toolkit')
vm.InstallPackages(
'build-essential yasm cmake libtool libc6 libc6-dev unzip wget libnuma1'
' libnuma-dev libx264-dev libx265-dev libunistring-dev libaom-dev'
' libdav1d-dev pkg-config nasm'
)
vm.RemoteCommand(f'git clone --branch {_NV_CODEC_TAG} {_NV_CODEC_REPO}')
vm.RemoteCommand('cd nv-codec-headers && sudo make install')
vm.RemoteCommand('git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg/')
vm.RemoteCommand(
'cd ffmpeg && ./configure --enable-nonfree --enable-cuda-nvcc'
' --nvccflags="-gencode arch=compute_52,code=sm_52 -O2" --enable-libnpp'
' --extra-cflags=-I/usr/local/cuda/include'
' --extra-ldflags=-L/usr/local/cuda/lib64 --disable-static'
' --enable-shared --enable-gpl --enable-libx264 --enable-libx265'
)
vm.RemoteCommand('cd ffmpeg && make -j 8')
vm.RemoteCommand('cd ffmpeg && sudo make install')
vm.RemoteCommand('echo "usr/local/lib" | sudo tee -a /etc/ld.so.conf')
vm.RemoteCommand('sudo ldconfig')
else:
vm.InstallPackages(' '.join(_APT_DEPS))
vm.Install('build_tools')
vm.RemoteCommand('mkdir -p ~/ffmpeg_sources ~/bin')
# Install NASM
vm.RemoteCommand(
'cd ~/ffmpeg_sources && wget https://www.nasm.us/pub/nasm/releasebuilds/'
'2.15.03/nasm-2.15.03.tar.bz2 && tar xjvf nasm-2.15.03.tar.bz2 && '
'cd nasm-2.15.03 && ./autogen.sh && PATH="$HOME/bin:$PATH" '
'./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && '
'make -j && make install'
)
# Install Yasm
vm.RemoteCommand(
'cd ~/ffmpeg_sources && wget -O yasm-1.3.0.tar.gz'
' https://github.com/yasm/yasm/releases/download/v1.3.0/yasm-1.3.0.tar.gz'
' && tar xzvf yasm-1.3.0.tar.gz && cd yasm-1.3.0 && ./configure'
' --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && make -j && make'
' install'
)
# Install libx264
vm.RemoteCommand(
'cd ~/ffmpeg_sources && git -C x264 pull 2> /dev/null || git clone '
'--depth 1 https://code.videolan.org/videolan/x264 && 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 -j && make install'
)
# Install libx265
vm.RemoteCommand(
'cd ~/ffmpeg_sources && git clone https://github.com/videolan/x265 '
'&& cd x265/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 -j && '
'make install'
)
# Install libvpx
vm.RemoteCommand(
'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 -j'
' && make install'
)
# Install libfdk-aac
vm.RemoteCommand(
'cd ~/ffmpeg_sources && git -C fdk-aac pull 2> /dev/null || git clone '
'--depth 1 https://github.com/mstorsjo/fdk-aac && cd fdk-aac && '
'autoreconf -fiv && ./configure --prefix="$HOME/ffmpeg_build" '
'--disable-shared && make -j && make install'
)
# Install libmp3lame
vm.RemoteCommand(
'cd ~/ffmpeg_sources && wget -O lame-3.100.tar.gz '
'https://downloads.sourceforge.net/project/lame/lame/3.100/'
'lame-3.100.tar.gz && tar xzvf lame-3.100.tar.gz && cd lame-3.100 && '
'PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" '
'--bindir="$HOME/bin" --disable-shared --enable-nasm && '
'PATH="$HOME/bin:$PATH" make -j && make install'
)
# Install libopus
vm.RemoteCommand(
'cd ~/ffmpeg_sources && git -C opus pull 2> /dev/null || git clone '
'--depth 1 https://github.com/xiph/opus.git && cd opus && '
'./autogen.sh && ./configure --prefix="$HOME/ffmpeg_build" '
'--disable-shared && make -j && make install'
)
# Skip installation of AV1 libraries: libaom, libsvtav1, libdav1d
# Install FFmpeg
vm.RemoteCommand(
'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 && '
'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" --bindir="$HOME/bin" --enable-gpl '
'--enable-libass --enable-libfdk-aac '
'--enable-libfreetype --enable-libmp3lame --enable-libopus '
'--enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 '
'--enable-nonfree && PATH="$HOME/bin:$PATH" make -j && make install'
)