0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

优化指南-FFmpeg构建和优化

安晟培半导体 来源:安晟培半导体 2023-06-15 09:04 次阅读

概述

FFmpeg 是一个免费开源的完整跨平台解决方案,用于记录、转换和流传输音频视频FFmpeg 由一套库和程序组成,用于处理视频、音频和其他多媒体文件和数据流,现在被广泛用于视频转码和视频缩放。作为 YouTube 和 BiliBili 等许多软件项目工作流程的关键部分,它的库被 VLC 等诸多软件媒体播放器使用。

本指南是为应用程序架构师和构建工程师提供参考,帮助他们了解在构建最新版的 FFmpeg、x264、x265、libvpx 和 libaom 时,如何最优化的利用 AmpereAltra 处理器的特性。

基于 Ampere 处理器的构建指南

本文档描述如何为 Ampere 处理器构建最新版本的 FFmpeg 和相关视频编解码器,在 Ampere Altra 和 AmpereAltraMax 处理器上运行视频编码负载,从而可以充分利用到行业领先的性能和电源效率。本文档参考了 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

用GCC构建FFMPEG, X264, X265, LIBVPX 和 LIBAOM

FFmpeg 编译指南描述了如何使用系统包安装程序进行安装或如何下载并构建最新版本。与 FFmpeg 编译指南相比,本文档描述了:

下载并构建最新版本

这在 FFmpeg 编译指南中也作为一种选项。

如何添加推荐的 gcc 编译器选项

Arm 架构上运行 gcc 时,建议使用 -mcpu=native 选项。

如何使用 FFmpeg 编译指南中所描述的包的子集进行构建

如果您需要使用完整的 FFmpeg 功能,请参考下面列出的步骤的文档,其中我们在描述如何构建包的每个部分的开头突出列出了我们的具体建议。

1

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

2

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

3

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

4

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

5

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

验证和运行 FFMPEG

如果构建成功,您就可以运行 FFmpeg 了。如下所示,祝贺你,现在可以做基准测试了。

$ ls -1tr ~/bin 
x264 
ffmpeg 
ffplay 
ffprobe

FFmpeg 运行命令 ~/bin/ffmpeg

$ ~/bin/ffmpeg 
ffmpeg version XXX Copyright (c) 2000-2022 the FFmpeg developers 
...



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    68

    文章

    19242

    浏览量

    229593
  • Linux系统
    +关注

    关注

    4

    文章

    593

    浏览量

    27387
  • VLC
    VLC
    +关注

    关注

    0

    文章

    42

    浏览量

    15559
  • ffmpeg
    +关注

    关注

    0

    文章

    46

    浏览量

    7393

原文标题:安博士讲堂 | 优化指南-FFmpeg 构建和优化

文章出处:【微信号:AmpereComputing,微信公众号:安晟培半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [7.2.1]--b)综合及优化_clip002

    IC设计优化
    jf_60701476
    发布于 :2022年11月26日 23:30:42

    请问TMS320C6657有没有编程优化指南

    求教!请问TMS320C6657有没有编程优化指南,比如我要对一个向量中的元素做相同的操作,如果循环的话比较慢,但是DSP好像有SIMD技术,还有一些矩阵、复数的运算,TI有没有一些编程优化
    发表于 07-24 09:13

    优化Unity程序的方法

    的帧速率,使其成为更好、更流畅的体验。 本指南介绍了优化Unity程序的方法,尤其是它们的GPU使用。 本指南优化分为三章: •应用程序处理器优化
    发表于 08-02 18:52

    软件优化指南

    优化对不同的人意味着不同的事情。 在某些情况下,您可能只是希望代码尽可能快地运行。 但是,如果您正在为嵌入式系统编写代码,您可能更喜欢优化代码密度以减少应用程序的内存占用。 通常,这些优化约束相互
    发表于 08-28 06:41

    电力变压器优化设计系统构建

    电力变压器优化设计系统构建 摘要基于综合设计、类比设计、优化设计三种设计方式构建了电力变压器优化设计系统。分析了三种设计方式的特点和相互间
    发表于 11-24 16:21 32次下载

    iSensor IMU快速入门指南和偏置优化技巧

    iSensor IMU快速入门指南和偏置优化技巧
    发表于 12-13 16:57 57次下载
    iSensor IMU快速入门<b class='flag-5'>指南</b>和偏置<b class='flag-5'>优化</b>技巧

    构建和优化嵌入式和物联网应用程序

    构建和优化嵌入式,移动和物联网应用程序
    的头像 发表于 05-31 09:23 1697次阅读

    AN-1041: iSensor® IMU 快速入门指南和偏置优化技巧

    AN-1041: iSensor® IMU 快速入门指南和偏置优化技巧
    发表于 03-21 13:54 0次下载
    AN-1041: iSensor® IMU 快速入门<b class='flag-5'>指南</b>和偏置<b class='flag-5'>优化</b>技巧

    在QT上构建ffmpeg环境实现音频的解码

    在QT上构建ffmpeg环境,实现音频的解码
    发表于 06-09 09:05 1139次阅读
    在QT上<b class='flag-5'>构建</b><b class='flag-5'>ffmpeg</b>环境实现音频的解码

    Gowin器件设计优化与分析用户指南

    电子发烧友网站提供《Gowin器件设计优化与分析用户指南.pdf》资料免费下载
    发表于 09-15 16:00 2次下载
    Gowin器件设计<b class='flag-5'>优化</b>与分析用户<b class='flag-5'>指南</b>

    Vitis AI优化指南

    电子发烧友网站提供《Vitis AI优化指南.pdf》资料免费下载
    发表于 09-14 11:04 0次下载
    Vitis AI<b class='flag-5'>优化</b>器<b class='flag-5'>指南</b>

    SDAccel环境剖析和最优化指南

    电子发烧友网站提供《SDAccel环境剖析和最优化指南.pdf》资料免费下载
    发表于 09-15 11:37 0次下载
    SDAccel环境剖析和最<b class='flag-5'>优化</b><b class='flag-5'>指南</b>

    TCAN455x时钟优化和设计指南

    电子发烧友网站提供《TCAN455x时钟优化和设计指南.pdf》资料免费下载
    发表于 09-27 10:21 0次下载
    TCAN455x时钟<b class='flag-5'>优化</b>和设计<b class='flag-5'>指南</b>

    如何构建优化GPU云网络

    并从计算节点成本优化、集群网络与拓扑的选择等方面论述如何构建优化GPU云网络。
    的头像 发表于 11-06 16:03 340次阅读
    如何<b class='flag-5'>构建</b>及<b class='flag-5'>优化</b>GPU云网络

    MCF8315A优化指南

    电子发烧友网站提供《MCF8315A优化指南.pdf》资料免费下载
    发表于 11-13 15:33 1次下载
    MCF8315A<b class='flag-5'>优化</b><b class='flag-5'>指南</b>