十月, 2022
FFmpeg是一个免费开源的完整跨平台解决方案,用于记录、转换和流传输音频和视频。FFmpeg由一套库和程序组成,用于处理视频、音频和其他多媒体文件和数据流,现在被广泛用于视频转码和视频缩放。作为YouTube和BiliBili等许多软件项目工作流程的关键部分,它的库被VLC等诸多软件媒体播放器使用。
本指南是为应用程序架构师和构建工程师提供参考,帮助他们了解在构建最新版的FFmpeg、x264、x265、libvpx和libaom时,如何最优化的利用Ampere® Altra®处理器的特性。
本文档描述如何为 Ampere 处理器构建最新版本的FFmpeg和相关视频编解码器,在 Ampere Altra 和 Ampere ® Altra® Max 处理器上运行视频编码负载,从而可以充分利用到行业领先的性能和电源效率。本文档参考了FFmpeg编译指南此处。
安装的前提条件
按照Linux操作系统FFmpeg编译指南中“获取依赖项(Get the Dependencies)”一节中的说明进行操作。存在Ubuntu/Debian/Mint和CentOS/RHEL/Fedora的版本。验证前提条件是否正确安装后,继续执行安装。
设置
构建指令中使用以下目录作为FFmpeg源文件、构建目录和二进制输出目录:
~/ffmpeg_sources – location for downloaded source files
~/ffmpeg_build – location of the build and output libraries
~/bin – location of binaries
创建以下路径
mkdir -p ~/ffmpeg_sources ~/ffmpeg_build ~/bin
FFmpeg编译指南描述了如何使用系统包安装程序进行安装或如何下载并构建最新版本。与FFmpeg编译指南相比,本文档描述了:
1. 下载并构建最新版本。这在FFmpeg编译指南中也作为一种选项。 2. 如何添加推荐的gcc编译器选项。在Arm架构上运行gcc时,建议使用-mcpu=native选项。请参阅Arm网站上的博客“跨架构的编译器标记:-march, -mtune,和-mcpu”了解详细信息。 4. 本指南展示了如何使用FFmpeg编译指南中所描述的包的子集进行构建。如果您需要使用完整的FFmpeg功能,请参考下面列出的步骤的文档,其中我们在描述如何构建包的每个部分的开头突出列出了我们的具体建议。
libx264 – 下载和构建
注:我们修改默认的构建指令,在运行configure时添加——extra-cflags="-mcpu=native"。
cd ~/ffmpeg_sources && \ git -C x264 pull 2> /dev/null || git clone --depth 1 https://code.videolan.org/videolan/x264.git && \ cd x264 && \ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static --enable-pic --extra-cflags="-mcpu=native" && \ PATH="$HOME/bin:$PATH" make -j $(nproc) && \ make install
libx265 – 下载和构建
注:从bitbucket.org下载x265来获得最新的优化,这很重要。此外,我们通过设置CMake环境标志CFLAGS和CXXFLAGS来修改默认的FFmpeg构建指令,以便能启用-mcpu=native 选项。你也可以选择使用make命令PATH="$HOME/bin:$PATH" make -j $(nproc) VERBOSE=1>& make.log 并行构建,并使用VERBOSE=1验证gcc是否正在使用-mcpu=native。
export CFLAGS="-mcpu=native" && export CXXFLAGS="-mcpu=native" sudo apt-get install libnuma-dev && \ cd ~/ffmpeg_sources && \ wget -O x265.tar.bz2 https://bitbucket.org/multicoreware/x265_git/get/master.tar.bz2 && \ tar xjvf x265.tar.bz2 && \ cd multicoreware*/build/linux && \ PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off ../../source && \ PATH="$HOME/bin:$PATH" make -j $(nproc) && \ make install
libvpx – 下载和构建
注:我们修改默认的FFmpeg构建指令来设置configure 要用到的extra_cflags和extra_cxxflags。
export extra_cflags="-mcpu=native" export extra_cxxflags="-mcpu=native" cd ~/ffmpeg_sources && \ git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \ cd libvpx && \ PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \ PATH="$HOME/bin:$PATH" make -j $(nproc) && \ make install
libaom – 下载和构建
注:我们修改默认的FFmpeg构建指令,以设置CMake用到的CFLAGS和CXXFLAGS。
export CFLAGS="-mcpu=native" && export CXXFLAGS="-mcpu=native" cd ~/ffmpeg_sources && \ git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \ mkdir -p aom_build && \ cd aom_build && \ PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_TESTS=OFF -DENABLE_NASM=on ../aom && \ PATH="$HOME/bin:$PATH" make -j $(nproc) && \ make install
FFmpeg – 下载和构建
cd ~/ffmpeg_sources && \ wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \ tar xjvf ffmpeg-snapshot.tar.bz2 && \ cd ffmpeg && \ PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ --extra-cflags="-I$HOME/ffmpeg_build/include -mcpu=native" \ --extra-cxxflags="-mcpu=native" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ --extra-libs="-lpthread -lm" \ --ld="g++" \ --bindir="$HOME/bin" \ --enable-gpl \ --enable-libaom \ --enable-libvpx \ --enable-libx264 \ --enable-libx265 \ --enable-nonfree && \ PATH="$HOME/bin:$PATH" make -j $(nproc) && \ make install
If the build was successful, you can run FFmpeg as shown below. Congratulations. Happy Benchmarking.
如果构建成功,您就可以运行FFmpeg了。如下所示,祝贺你,现在可以做基准测试了。
$ ls -1tr ~/bin x264 ffmpeg ffplay ffprobe
FFmpeg 运行命令 ~/bin/ffmpeg
$ ~/bin/ffmpeg
ffmpeg version XXX Copyright (c) 2000-2022 the FFmpeg developers
...