Last active
May 23, 2024 09:36
-
-
Save wildrun0/86a890585857a36c90110cee275c45fd to your computer and use it in GitHub Desktop.
Compiling ffmpeg for Raspberry Pi 4 (script only works fine on RPi OS 32bit). x64 does not support mmal (see https://github.com/raspberrypi/userland/issues/688)
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 | |
# 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 \ | |
build-essential \ | |
cmake \ | |
doxygen \ | |
git \ | |
graphviz \ | |
imagemagick \ | |
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 \ | |
libsrt-gnutls-dev \ | |
zlib1g-dev | |
mkdir ~/ffmpeg-libraries | |
#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)" -DCMAKE_C_FLAGS="-mfpu=vfp -mfloat-abi=hard" .. \ | |
&& sed -i 's/ENABLE_NEON:BOOL=ON/ENABLE_NEON:BOOL=OFF/' CMakeCache.txt \ | |
&& make -j$(nproc) \ | |
&& sudo make install | |
#zimg | |
git clone --recursive https://github.com/sekrit-twc/zimg.git ~/ffmpeg-libraries/zimg \ | |
&& cd ~/ffmpeg-libraries/zimg \ | |
&& sh autogen.sh \ | |
&& ./configure \ | |
&& make \ | |
&& sudo make install | |
sudo ldconfig | |
git clone --depth 1 https://github.com/FFmpeg/FFmpeg.git ~/FFmpeg \ | |
&& cd ~/FFmpeg \ | |
&& ./configure \ | |
--extra-cflags="-I/usr/local/include" \ | |
--extra-ldflags="-L/usr/local/lib" \ | |
--extra-libs="-lpthread -lm -latomic" \ | |
--arch=armhf \ | |
--enable-gmp \ | |
--enable-gpl \ | |
--enable-libass \ | |
--enable-libdav1d \ | |
--enable-libfdk-aac \ | |
--enable-libfreetype \ | |
--enable-libkvazaar \ | |
--enable-libmp3lame \ | |
--enable-libopencore-amrnb \ | |
--enable-libopencore-amrwb \ | |
--enable-libopus \ | |
--enable-librtmp \ | |
--enable-libsnappy \ | |
--enable-libsoxr \ | |
--enable-libssh \ | |
--enable-libvorbis \ | |
--enable-libvpx \ | |
--enable-libzimg \ | |
--enable-libwebp \ | |
--enable-libx264 \ | |
--enable-libx265 \ | |
--enable-libxml2 \ | |
--enable-mmal \ | |
--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
I've built ffmpeg before and it took such a long time I was really pleased to stumble on this sadly things were going so well untill the tail end where I got....
I'm using a Pi3 and the O/S build is
PRETTY_NAME="Raspbian GNU/Linux 11 (bullseye)"
NAME="Raspbian GNU/Linux"
VERSION_ID="11"
VERSION="11 (bullseye)"
VERSION_CODENAME=bullseye
ID=raspbian
ID_LIKE=debian
My hardware revision is
Hardware : BCM2835
Revision : a02082
Serial : 0000000032c2bc5b
Model : Raspberry Pi 3 Model B Rev 1.2
Could you find 5 mins to point me in the right direction to help resolve it please?
*** UPDATE:****
In case anyone else has this issue turns out I needed to update the firmware to a more recent one using rpi-updat.
Worked perfectly after that so big thanks for publishing this.