如何在树莓派上编译运行 FFmpeg?

本教程将向您展示如何在树莓派上编译 FFmpeg 。

FFmpeg 是一个开源项目,由许多库组成。

这些库旨在处理多种多媒体格式,无论是图像,视频还是音频格式。

FFmpeg 的优点之一就是可以在包括树莓派在内的各种设备上进行编译。

使用 FFmpeg ,您将能够编码和解码各种视频和音频编解码器。

设备清单

这是我们建议用于在树莓派上编译 FFmpeg 的本教程的设备的列表。

推荐的

  • 树莓派 1、 2 、 3 或 4

  • Micro SD 卡

  • 电源

  • Ethernet Cord 或 * WiFi dongle (Pi 3 和 4 具有内置 WiFi)

可选的

  • 树莓派外壳

我们在运行最新版本的 Raspbian Buster 的树莓派 4 上测试了该指南。

如果您使用的是 Raspbian 的较新版本,并且本教程无法正常工作,请在下面留下评论。

安装 FFmpeg 所需的软件包

在这个部分。我们将通过安装编译 FFmpeg 所需的所有库来准备您的树莓派。

1 在开始之前,您应该首先更新软件包列表和已安装的软件包。

要更新所有内容,您需要做的就是运行以下两个命令。

sudo apt update
sudo apt upgrade

2 现在,我们需要安装编译 FFmpeg 及其附加库所需的软件包。

由于数量很多,安装过程可能需要一些时间才能完成。

运行以下命令以将所有必需的软件包安装到树莓派。

sudo apt -y install autoconf automake构建必需的 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介子 nasm pkg -config python3-dev python3-pip texinfo wget yasm zlib1g-dev libdrm-dev

在树莓派上编译其他库

本节将向您展示如何编译 FFmpeg 所需的其他库。

1 在开始之前,我们先创建一个目录,我们将在其中存储每个库的代码。

mkdir〜/ffmpeg-libraries

在继续之前,请注意以下每个步骤将需要一些时间才能完成。

2 我们要编译的第一个库是 Fraunhofer FDK AAC 库

编译该库将使 FFmpeg 支持 ** 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

3 我们要编译的下一个库是”** dav1d **” 库。

该库将增加对将 AV1 视频格式解码为 FFmpeg 的支持。该编解码器被认为是 VP9 编解码器的后继产品,并且是 x265 编解码器的竞争对手。

运行以下命令以编译 “** dav1d **” 库并将其安装到树莓派。

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 我们接下来要编译的该库是一个名为”** kvazaar **” 的 HEVC 编码器。

使用以下命令,您可以在树莓派上克隆并编译 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 **”

该库将使我们能够为树莓派上的 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版本 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 我们终于可以在树莓派上编译 FFmpeg 了。

在编译过程中,我们将启用在前两节中编译并安装的所有其他库。

我们还将启用有助于树莓派的功能,例如 ** 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 可能会花费大量时间,因此请耐心等待。

在本指南的这一点上,您现在应该已经在树莓派上成功编译了 FFmpeg 。

如果您在编译软件时遇到任何问题,请与我联系。

分享到