首页 > 系统相关 >FFmpeg开发笔记(二十四)Linux环境给FFmpeg集成AV1的编解码器

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

时间:2024-05-27 13:22:44浏览次数:24  
标签:enable libaom FFmpeg -- 编解码器 AV1 libdav1d

​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。

标签:enable,libaom,FFmpeg,--,编解码器,AV1,libdav1d
From: https://www.cnblogs.com/aqi00/p/18199491

相关文章

  • FFmpeg之转码
    文章目录概述transcode小结概述上一篇说了主要的流程,也就是ffmpeg_parse_options的流程,如下图:红色箭头的流程说的差不多了,接下来看看绿色框框,也就是transcode的流程。transcode还是先给出我画的流程图,如下:如上图,大概流程就是这样。其中,最重要的就是transcode_s......
  • ffmpeg解码YUV
    方法1:命令解码#解码命令ffmpeg-iinput.mp4-frawvideooutput.yuv#播放命令ffplay-s720x1280-pix_fmtyuv420poutput.yuv方法2:代码解码 main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavutil/avutil.h&quo......
  • ffmpeg截取文件
    方法1:命令截取#裁剪视频-t支持数字和HH:MM:SS格式,数字格式是时长,从起始到指定时长,HH:MM:SS格式是结束时间,也可以通过-ss给出一个开始时间,-to给出结束时间ffmpeg-iinput_video.mp4-t5output_video.mp4ffmpeg-iinput_audio.wav-t00:00:05output_audio.wav方法......
  • ffmpeg里的时间计算和转换
    main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavutil/avutil.h"#include"libavcodec/avcodec.h"intmain(intargc,char*argv[]){av_log_set_level(AV_LOG_DEBUG);if(argc......
  • AV1视频编码标准介绍
    AOMedia开放媒体联盟(AOMedia)是一个由多家科技公司组成的联盟,旨在开发开放、免版税的视频编码格式。成立背景:AOMedia成立于2015年,由亚马逊、思科、谷歌、英特尔、微软、奈飞(Netflix)、Mozilla等公司共同成立。联盟的目标是创建一种开放、免版税的视频编码格式。AV1编码格......
  • ffmpeg提取H264视频数据
    方法1:命令提取ffmpeg-iinput.mp4-an-vcodeccopyout.h264ffmpeg-iinput.mp4-an-vcodeccopy-bsf:h264_mp4toannexbout1.h264方法2:代码提取 main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavut......
  • FFmpeg开发笔记(二十三)使用OBS Studio开启RTMP直播推流
    ​OBS是一个开源的直播录制软件,英文全称叫做OpenBroadcasterSoftware,广泛用于视频录制、实时直播等领域。OBS不但开源,而且跨平台,兼容Windows、MacOS、Linux等操作系统。OBS的官网是https://obsproject.com/,录制软件名叫OBSStudio,它基于QT+FFmpeg编码。使用OBS实现直播功能的......
  • ffmpeg提取aac数据
    方法1:通过命令提取ffmpeg-iinput.mp4-vn-acodecaac../output.aac方法2:通过代码提取流程图  main.c#include"libavutil/log.h"#include"libavformat/avformat.h"#include"libavcodec/avcodec.h"intmain(intargc,char**argv){......
  • ffmpeg
    1.ffmpegffmpeg官网,https://ffmpeg.org/ffmpeg.html。FFmpeg是领先的多媒体框架,能够解码、编码、转码、过滤和播放多媒体。2.项目中视频处理使用ffmpeg的两种方式方式一。官方下载ffmpeg的基于windows或者linux的工具包。将ffmpeg的bin添加到path中,然后就可以直接使用f......
  • ffmpeg显示视频信息
    方式1:通过命令获取ffprobe../input.mp4方式2:代码获取main.c#include"libavutil/log.h"#include"libavformat/avformat.h"intmain(intargc,char**argv){av_log_set_level(AV_LOG_DEBUG);if(argc<2){av_log(NULL,AV_LOG_ERROR,......