廉价的机器人视觉,详细步骤在Raspberry Pi上编译FFmpeg

本教程详细记录了如何在Raspberry Pi上编译FFmpeg。

Raspberry-Pi-FFmpeg-Thumbnail.jpg

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。如果在编译软件时遇到任何问题,欢迎在下面留言。

平均: 0 / 5. votes: 0

到目前为止还没有投票!成为第一位评论此文章。

欢迎转载,请留下出处链接:Labno3 » 廉价的机器人视觉,详细步骤在Raspberry Pi上编译FFmpeg

赞 (2)

1 评论

4+7=

  1. 歪歪

    大佬请问,第二步编译 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

    回复