Last active
November 13, 2021 17:44
-
-
Save corupta/0b5343846e9405391ea4f236c4b5cc5d to your computer and use it in GitHub Desktop.
Jetson - FFMPEG for PyAV
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 builds an ffmpeg4 allowing us to install PyAV with pip3 install av | |
# I tried to make it use cuda, but failed, so far only libx264 works well (a fast cpu encoder). | |
# I'm using jetson agx 32 with jetpack 4.6 on ubuntu 18 | |
# makesure jetpack packages are install (cuda part is removed from original script) | |
# it doesn't use nvmpi hardware encoder but rather tries to use gpu/cuda accelaration | |
# I couldn't make nvmpi version (ffmpeg-jetson repo) work successfully. | |
# More specifically, I was able to build it myself but nvmpi encoder always outputted corrupted data in my case. | |
# So, I decided to use a gpu accelarated version instead. | |
# I needed this to install pyav | |
# cuda/nvenc doesn't work so far, but av works with libx264 | |
#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 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 | |
sudo apt-get install -y libopus-dev libx264-dev | |
} | |
#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="-fPIC" \ | |
--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 \ | |
--enable-shared \ | |
--pkg-config-flags="--static" | |
PATH="$HOME/bin:$PATH" make -j$(nproc) | |
sudo make -j$(nproc) install | |
# make -j$(nproc) distclean | |
hash -r | |
sudo ldconfig | |
} | |
compileFfmpeg2(){ | |
echo "Compiling ffmpeg" | |
#rm -rf ~/ffmpeg_sources | |
cd ~/ffmpeg_sources | |
git clone https://github.com/FFmpeg/FFmpeg -b release/4.4 | |
cd FFmpeg | |
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ | |
--enable-shared \ | |
--enable-nonfree \ | |
--enable-cuda-nvcc \ | |
--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-libtheora \ | |
--enable-libvorbis \ | |
--enable-libvpx \ | |
--enable-libx264 \ | |
--enable-nonfree \ | |
--enable-nvenc | |
# --enable-libopus \ | |
PATH="$HOME/bin:$PATH" make -j$(nproc) | |
sudo make -j$(nproc) install | |
# make -j$(nproc) distclean | |
hash -r | |
sudo ldconfig | |
} | |
#The process | |
cd ~ | |
# sudo echo "hi" | |
mkdir ffmpeg_sources | |
installLibs | |
installSDK | |
compileNasm | |
compileLibX264 | |
compileLibfdkcc | |
compileLibMP3Lame | |
compileLibOpus | |
compileLibPvx | |
compileFfmpeg2 | |
echo "Complete!" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment