Skip to content

Instantly share code, notes, and snippets.

@524c
Forked from wildrun0/compile-ffmpeg.sh
Last active April 19, 2022 10:12
Show Gist options
  • Save 524c/c522ae6fc053c70f115aadb8110ac19c to your computer and use it in GitHub Desktop.
Save 524c/c522ae6fc053c70f115aadb8110ac19c to your computer and use it in GitHub Desktop.
Compiling ffmpeg for Raspberry Pi 4 (script only works fine on RPIOS)
#!/bin/bash
# Note that there's no libdrm because this lib cause errors
sudo apt update -y && sudo apt upgrade -y
sudo apt-get -y install \
autoconf \
automake \
libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev
build-essential \
cmake \
doxygen \
tclsh \
git \
libxvidcore-dev \
libxvidcore4 \
libvidstab1.1 \
libvidstab-dev \
libomxil-bellagio-dev \
libgme0 \
libgme-dev \
libopenjp2-7 \
libopenjp2-7-dev \
speex \
libspeex-dev \
graphviz \
imagemagick \
libtheora0 \
libtheora-dev \
libasound2-dev \
libass-dev \
libavcodec-dev \
libavdevice-dev \
libavfilter-dev \
libavformat-dev \
libavutil-dev \
libfreetype6-dev \
libgmp-dev \
libmp3lame-dev \
libopencore-amrnb-dev \
libopencore-amrwb-dev \
libopus-dev \
librtmp-dev \
libsdl2-dev \
libsdl2-image-dev \
libsdl2-mixer-dev \
libsdl2-net-dev \
libsdl2-ttf-dev \
libsnappy-dev \
libsoxr-dev \
libssh-dev \
libssl-dev \
libtool \
libv4l-dev \
libva-dev \
libvdpau-dev \
libvo-amrwbenc-dev \
libvorbis-dev \
libwebp-dev \
libx264-dev \
libx265-dev \
libxcb-shape0-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
libxcb1-dev \
libxml2-dev \
lzma-dev \
meson \
nasm \
pkg-config \
python3-dev \
python3-pip \
texinfo \
wget \
yasm \
zlib1g-dev
mkdir ~/ffmpeg-libraries
# omx
git clone https://github.com/felipec/gst-openmax ~/ffmpeg-libraries/gst \
&& cd ~/ffmpeg-libraries/gst \
&& ./autogen.sh \
#AAC
git clone --depth 1 https://github.com/mstorsjo/fdk-aac.git ~/ffmpeg-libraries/fdk-aac \
&& cd ~/ffmpeg-libraries/fdk-aac \
&& autoreconf -fiv \
&& ./configure \
&& make -j$(nproc) \
&& sudo make install
#AV1
git clone --depth 1 https://code.videolan.org/videolan/dav1d.git ~/ffmpeg-libraries/dav1d \
&& mkdir ~/ffmpeg-libraries/dav1d/build \
&& cd ~/ffmpeg-libraries/dav1d/build \
&& meson .. \
&& ninja \
&& sudo ninja install
#HEVC
git clone --depth 1 https://github.com/ultravideo/kvazaar.git ~/ffmpeg-libraries/kvazaar \
&& cd ~/ffmpeg-libraries/kvazaar \
&& ./autogen.sh \
&& ./configure \
&& make -j$(nproc) \
&& sudo make install
#VP8 and VP9
git clone --depth 1 https://chromium.googlesource.com/webm/libvpx ~/ffmpeg-libraries/libvpx \
&& cd ~/ffmpeg-libraries/libvpx \
&& ./configure --disable-examples --disable-tools --disable-unit_tests --disable-docs \
&& make -j$(nproc) \
&& sudo make install
#AP1
git clone --depth 1 https://aomedia.googlesource.com/aom ~/ffmpeg-libraries/aom \
&& mkdir ~/ffmpeg-libraries/aom/aom_build \
&& cd ~/ffmpeg-libraries/aom/aom_build \
&& cmake -G "Unix Makefiles" AOM_SRC -DENABLE_NASM=on -DPYTHON_EXECUTABLE="$(which python3)" .. \
&& make -j$(nproc) \
&& sudo make install
#zimg
git clone https://github.com/sekrit-twc/zimg.git ~/ffmpeg-libraries/zimg \
&& cd ~/ffmpeg-libraries/zimg \
&& sh autogen.sh \
&& ./configure \
&& make -j$(nproc) \
&& sudo make install
#srt
git clone --depth 1 https://github.com/Haivision/srt.git ~/ffmpeg-libraries/srt \
&& cd ~/ffmpeg-libraries/srt \
&& PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --disable-shared \
&& make -j$(nproc) \
&& make install
sudo ldconfig
git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git ~/FFmpeg \
&& cd ~/FFmpeg \
&& ./configure \
--prefix=/usr/ \
--extra-cflags="-I/usr/local/include -I/usr/include/IL" \
--extra-ldflags="-L/usr/local/lib" \
--extra-libs="-lpthread -lm -latomic -lrtmp -lx265" \
--arch=aarch64 \
--disable-shared \
--enable-neon \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_vaapi \
--enable-hwaccel=h264_dxva2 \
--enable-hwaccel=mpeg4_vaapi \
--enable-hwaccels \
--enable-static \
--disable-debug \
--enable-libdrm \
--enable-v4l2_m2m \
--enable-gmp \
--enable-gpl \
--enable-gray \
--enable-fontconfig \
--enable-libaom \
--enable-libass \
--enable-libdav1d \
--enable-libdrm \
--enable-libgme \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libkvazaar \
--enable-libmp3lame \
--enable-libopencore-amrnb \
--enable-libopencore-amrwb \
--enable-libopus \
--enable-libopenjpeg \
--enable-librtmp \
--enable-libsnappy \
--enable-libsoxr \
--enable-libspeex \
--enable-libssh \
--enable-libsrt \
--enable-libxvid \
--enable-libtheora \
--enable-libvidstab \
--enable-libvorbis \
--enable-libvpx \
--enable-libzimg \
--enable-libwebp \
--enable-libx264 \
--enable-libx265 \
--enable-libxml2 \
--enable-nonfree \
--enable-omx \
--enable-omx-rpi \
--enable-version3 \
--target-os=linux \
--enable-pthreads \
--enable-openssl \
--enable-hardcoded-tables \
&& make -j$(nproc) \
&& sudo make install
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment