本教程详细记录了如何在Raspberry Pi上编译FFmpeg。
FFmpeg是一个开源项目,由相当多的库组成。这些库的设计是为了处理各种多媒体格式,无论是图像、视频还是音频格式。FFmpeg最好的一点是它可以在各种设备上编译,包括树莓派。使用FFmpeg,可以对各种视频和音频编解码进行编码和解码。
设备清单
以下是我在树莓派上编译FFmpeg的教程的设备清单,点击链接可直达特别优惠购买
建议
可选
我在最新版本Raspbian Buster的Raspberry Pi 4上测试了本指南。
安装FFmpeg所需的软件包
在本节中,安装编译FFmpeg所需的所有库来做准备。
1. 在开始之前,首先更新包列表和安装的包。
要更新所有的东西,需要做的就是运行以下两个命令。
sudo apt update
sudo apt upgrade
2. 现在需要安装编译FFmpeg及其附加库所需的包。
由于数量不少,安装过程可能需要一些时间来完成。运行以下命令将所有需要的软件包安装到Raspberry Pi上。
sudo apt -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 zlib1g-dev libdrm-dev
编译Raspberry Pi上的附加库
本节将告诉你如何编译FFmpeg所需的附加库。
1. 在开始之前,创建一个目录,在那里将存储这些库的代码。
mkdir ~/ffmpeg-libraries
在继续之前,请注意以下每个步骤都需要一些时间来完成。
2. 要编译的第一个库是Fraunhofer FDK AAC库。
编译这个库可以让FFmpeg支持AAC声音格式。运行以下命令下载并编译源代码到Raspberry Pi。
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
3. 接下来要编译的库是 “dav1d “库。
该库将增加对AV1视频格式解码为FFmpeg的支持。这个编解码器被认为是VP9编解码器的继承者,也是x265编解码器的竞争者。运行以下命令编译并安装 “dav1d “库到Raspberry Pi。
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
4. 接下来要编译的这个库是一个HEVC编码器,叫 “kvazaar”。
使用下面的命令,可以在Raspberry Pi上克隆和编译Kvazaar库。
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
5. 现在可以编译FFmpeg所需的库,以便在树莓派上支持VP8和VP9视频编解码器。
正在编译的这个库叫LibVPX,是由Google开发的。下面的命令将克隆、配置并编译库到Pi上。
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
6. 现在需要编译名为 “AOM “的库。
这个库将在Raspberry Pi上添加对AP1视频编解码器的编码支持。使用下面的命令在你的Pi上克隆和编译代码。
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
7. 最后需要编译的库是 “zimg “库。
这个库实现了一系列的图像处理功能,处理了缩放、色彩空间和深度的基础知识。运行下面的命令来克隆和编译代码。
git clone -b release-2.9.3 https://github.com/sekrit-twc/zimg.git ~/ffmpeg-libraries/zimg \
&& cd ~/ffmpeg-libraries/zimg \
&& sh autogen.sh \
&& ./configure \
&& make \
&& sudo make install
8. 现在,运行下面的命令来更新链接缓存。
这个命令可以保证不会因为编译器找不到库而出现链接问题。
sudo ldconfig
在树莓派上编译FFmpeg。
在本节中,展示如何将所有的东西放在一起,并最终编译FFmpeg。
1. 终于可以在Raspberry Pi上编译FFmpeg了。
在编译过程中,启用前两节中编译和安装的所有额外库。还将启用有助于Raspberry Pi的功能,如omx-rpi。运行下面的命令来编译一切。这个命令相当大,因为有相当多的功能需要启用。
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=armel \
--enable-gmp \
--enable-gpl \
--enable-libaom \
--enable-libass \
--enable-libdav1d \
--enable-libdrm \
--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
2. 编译FFmpeg在Raspberry Pi上可能需要大量的时间,所以要有耐心。
希望到这里,你已经在Raspberry Pi上成功编译了FFmpeg。如果在编译软件时遇到任何问题,欢迎在下面留言。
欢迎转载,请留下出处链接:Labno3 » 廉价的机器人视觉,详细步骤在Raspberry Pi上编译FFmpeg
大佬请问,第二步编译 Fraunhofer FDK AAC 有如下报错怎么办?
autoreconf: running: automake –add-missing –copy –force-missing
Makefile.am:36: error: Libtool library used but ‘LIBTOOL’ is undefined
Makefile.am:36: The usual way to define ‘LIBTOOL’ is to add ‘LT_INIT’
Makefile.am:36: to ‘configure.ac’ and run ‘aclocal’ and ‘autoconf’ again.
Makefile.am:36: If ‘LT_INIT’ is in ‘configure.ac’, make sure
Makefile.am:36: its definition is in aclocal’s search path.
autoreconf: automake failed with exit status: 1