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。

相关推荐
EasyCVR1 小时前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
简鹿办公2 小时前
使用 FFmpeg 进行音视频转换的相关命令行参数解释
ffmpeg·简鹿视频格式转换器·ffmpeg视频转换
冷凝女子3 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
安步当歌4 小时前
【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
音视频·webrtc·视频编解码·video-codec
顾北川_野4 小时前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
顶呱呱程序4 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
EasyCVR5 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
runing_an_min5 小时前
ffmpeg 视频滤镜:屏蔽边框杂色- fillborders
ffmpeg·音视频·fillborders
岁月小龙16 小时前
如何让ffmpeg运行时从当前目录加载库,而不是从/lib64
ffmpeg·origin·ffprobe·rpath
我喜欢就喜欢18 小时前
基于qt vs下的视频播放
开发语言·qt·音视频