FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

2024-05-04 09:44

本文主要是介绍FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

AV1是一种新兴的免费视频编码标准,它由开放媒体联盟(Alliance for Open Media,简称AOM)于2018年制定,融合了Google VP10、Mozilla Daala以及Cisco Thor三款开源项目的成果。据说在实际测试中,AV1标准比H.265(HEVC)的压缩率提升了大约27%。由于AV1具有性能优势,并且还是免费授权,因此各大流媒体平台更倾向使用AV1而非HEVC标准。
AV1如此炙手可热,以致它的编解码器如雨后春笋,单单FFmpeg支持的AV1编解码器,就有libaom、libdav1d、libsvtav1、librav1e四种。经过在Linux环境实地验证,前三种都能在华为云的欧拉系统上编译集成,只有librav1e尚未成功编译。下面就介绍如何在Linux环境给FFmpeg集成libaom、libdav1d、libsvtav1这三种AV1编解码库。

一、安装libaom

libaom是谷歌提供的AV1编解码工具,其代码托管在谷歌网站,国内无法访问,开发者可通过清华大学的镜像网站下载它的源码,下载地址是https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/pool/main/a/aom/aom_3.7.1.orig.tar.gz。
libaom的安装步骤说明如下。
1、将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令。

tar zxf aom_3.7.1.orig.tar.gz
cd aom-3.7.1

2、进入解压后的build目录,运行下面命令配置libaom。

cd build
cmake ..

3、运行下面命令编译libaom。

make -j4

4、编译完成后,运行下面命令安装libaom。

make install

二、安装libsvtav1

SVT-AV1项目最初由英特尔与奈飞公司合作创建,后来被AOM官方收编,它的源码托管页面在https://gitlab.com/AOMediaCodec/SVT-AV1。因为《FFmpeg开发实战:从零基础到短视频上线》一书采用的FFmpeg版本为5.1.2,兼容该版本FFmpeg的SVT-AV1最高版本为1.4.0,所以需要下载这个源码链接https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v1.4.0/SVT-AV1-v1.4.0.tar.gz。注意,如果使用更高版本的SVT-AV1,会导致后面FFmpeg编译失败。
libsvtav1的安装步骤说明如下。
1、将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令。

tar zxvf SVT-AV1-v1.4.0.tar.gz
cd SVT-AV1-v1.4.0

2、进入解压后的Build目录,运行下面命令配置libsvtav1。

cd Build
cmake ..

3、运行下面命令编译libsvtav1。

make -j4

4、编译完成后,运行下面命令安装libsvtav1。

make install

三、安装libdav1d

libdav1d是一款AV1的解码器,只负责解码,不负责编码。它的源码托管页面在https://code.videolan.org/videolan/dav1d/,源码包的下载地址是https://code.videolan.org/videolan/dav1d/-/archive/1.3.0/dav1d-1.3.0.tar.gz。
libdav1d的安装步骤说明如下。
1、安装编译工具meson和ninja
meson和ninja是基于Python语言的编译工具,故需确保服务器已经安装了Python3。另外,由于服务器访问国外网站不稳定,因此可先设置国内的资源镜像网站,比如移动云。具体的镜像设置与工具安装命令如下:

pip config set global.index-url https://ecloud.10086.cn/api/query/developer/nexus/repository/python-sdk/simple
pip3 install meson
pip3 install ninja

2、将下载好的压缩包上传到服务器并解压,也就是依次执行以下命令。

tar zxvf dav1d-1.3.0.tar.gz
cd dav1d-1.3.0

3、进入解压后的build目录,运行下面命令配置libdav1d。

mkdir build
cd build
meson setup

4、运行下面命令编译libdav1d。

ninja

5、编译完成后,运行下面命令安装libdav1d。

ninja install

四、让FFmpeg启用libaom、libdav1d、libsvtav1

由于FFmpeg默认未启用libaom、libdav1d、libsvtav1,因此需要重新配置FFmpeg,标明启用libaom、libdav1d、libsvtav1,然后重新编译安装FFmpeg。FFmpeg的Linux环境完整编译过程参见《FFmpeg开发实战:从零基础到短视频上线》一书的“1.2.3  自行编译与安装FFmpeg”,详细的启用步骤说明如下。
1、加载环境变量PKG_CONFIG_PATH和LD_LIBRARY_PATH
因为libaom、libdav1d、libsvtav1三个库默认安装在/usr/local/lib64目录,所以要将相关路径加载到PKG_CONFIG_PATH和LD_LIBRARY_PATH。执行下面命令编辑profile文件:

cd
vi .bash_profile

往.bash_profile的文件末尾添加下面两行:

export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib64

保存并退出.bash_profile之后,执行以下命令加载环境变量:

source .bash_profile

然后执行下面的环境变量查看命令,确保环境变量PKG_CONFIG_PATH和LD_LIBRARY_PATH已经成功加载。

env | grep PKG_CONFIG_PATH
env | grep LD_LIBRARY_PATH

2、回到FFmpeg源码的目录,执行以下命令重新配置FFmpeg,主要增加启用libaom、libdav1d、libsvtav1。(增加了选项--enable-libaom --enable-libsvtav1 --enable-libdav1d)

./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libxavs2 --enable-libdavs2 --enable-libmp3lame --enable-libfreetype --enable-libass --enable-libfribidi --enable-libxml2 --enable-fontconfig --enable-sdl2 --enable-libvorbis --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-version3 --enable-libopus --enable-libvpx --enable-openssl --enable-libaom --enable-libsvtav1 --enable-libdav1d --enable-libuavs3d --enable-iconv --enable-gpl --enable-nonfree

3、运行下面命令编译FFmpeg。

make clean
make -j4

4、执行下面命令安装FFmpeg。

make install

5、运行以下命令查看FFmpeg的版本信息。

ffmpeg -version

查看控制台回显的FFmpeg版本信息,找到“--enable-libaom --enable-libsvtav1 --enable-libdav1d”,说明FFmpeg正确启用了AV1的三个编解码器libaom、libdav1d、libsvtav1。
 

这篇关于FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958904

相关文章

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Linux之软件包管理器yum详解

《Linux之软件包管理器yum详解》文章介绍了现代类Unix操作系统中软件包管理和包存储库的工作原理,以及如何使用包管理器如yum来安装、更新和卸载软件,文章还介绍了如何配置yum源,更新系统软件包... 目录软件包yumyum语法yum常用命令yum源配置文件介绍更新yum源查看已经安装软件的方法总结软

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Linux alias的三种使用场景方式

《Linuxalias的三种使用场景方式》文章介绍了Linux中`alias`命令的三种使用场景:临时别名、用户级别别名和系统级别别名,临时别名仅在当前终端有效,用户级别别名在当前用户下所有终端有效... 目录linux alias三种使用场景一次性适用于当前用户全局生效,所有用户都可调用删除总结Linux

Linux:alias如何设置永久生效

《Linux:alias如何设置永久生效》在Linux中设置别名永久生效的步骤包括:在/root/.bashrc文件中配置别名,保存并退出,然后使用source命令(或点命令)使配置立即生效,这样,别... 目录linux:alias设置永久生效步骤保存退出后功能总结Linux:alias设置永久生效步骤

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用