找回密码
 立即注册
首页 业界区 业界 FFmpeg开发笔记(七十)Windows给FFmpeg集成AV1编码器li ...

FFmpeg开发笔记(七十)Windows给FFmpeg集成AV1编码器libsvtav1

松菊 2025-6-29 11:29:36
​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四种。接下来以微软的视窗系统为例,介绍如何在Windows环境给FFmpeg集成AV1编码器libsvtav1,具体的操作步骤说明如下:
一、配置libsvtav1

SVT-AV1项目最初由英特尔与奈飞公司合作创建,后来被AOM官方收编,它的源码托管页面在https://gitlab.com/AOMediaCodec/SVT-AV1。虽然最新版为2025年3月推出的SVT-AV1-v3.0.2,但实际验证在Windows10上配置失败,所以要用2024年10月推出的SVT-AV1-v2.3.0,下载地址是https://gitlab.com/AOMediaCodec/SVT-AV1/-/archive/v2.3.0/SVT-AV1-v2.3.0.tar.gz。
先下载最新的svt-av1源码,再把svt-av1源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
  1. tar zxvf SVT-AV1-v2.3.0.orig.tar.gz
  2. cd SVT-AV1-v2.3.0
复制代码
然后执行下面命令配置svt-av1:
  1. cd Build
  2. cmake -DBUILD_SHARED_LIBS=1 ..
复制代码
配置完毕,会在Build目录下找到svt-av1.sln,这就是svt-av1的Visual Studio项目工程文件。
二、编译libsvtav1

打开Visual Studio 2022,在欢迎页面单击右侧的“打开项目或解决方案”,在弹出的文件对话框中选择SVT-AV1-v2.3.0\Build目录下的svt-av1.sln。
打开svt-av1工程后,依次选择顶部菜单:生成→配置管理器,在打开的配置管理器窗口上,找到左上角的“活动解决方案配置”下拉框,把Debug模式改为Release模式,再单击窗口右下角的关闭按钮。
依次选择顶部菜单:生成→Build ALL_BUILD,Visual Studio就开始编译svt-av1模块。编译过程可在Visual Studio界面下方观察,直到编译完成如下图所示。
1.png

此时可在SVT-AV1-v2.3.0\Bin\Release目录下找到SvtAv1Enc.lib和SvtAv1Enc.dll,这两个文件就是编译生成的libsvtav1库文件。
三、安装libsvtav1

确保Windows系统已经按照《FFmpeg开发实战:从零基础到短视频上线》第一章“1.3  Windows系统安装FFmpeg”的说明安装配置了MSYS,再按照以下步骤在MSYS环境安装libsvtav1。
1、在msys64的/usr/local目录下新建libsvtav1目录,并在该目录下创建lib子目录;
2、把svt-av1工程中Bin\Release目录下的SvtAv1Enc.lib和SvtAv1Enc.dll两个文件复制到第一步创建的lib目录;
3、在lib目录下创建pkgconfig子目录,并把svt-av1工程的Build\SvtAv1Enc.pc复制到pkgconfig目录;然后打开SvtAv1Enc.pc,把开头一行改成下面这样。
  1. prefix=/usr/local/libsvtav1
复制代码
4、在msys64的/usr/local/libsvtav1目录下创建include目录,再在include下创建子目录svt-av1,然后把svt-av1工程中Source\API目录下的几个h文件都复制到刚才创建的include/svt-av1目录;
经过以上步骤操作后的libsvtav1目录结构如下所示。
  1. /usr/local/libsvtav1
  2.  |--------------- lib
  3.  |                 |----- SvtAv1Enc.lib
  4.  |                 |----- SvtAv1Enc.dll
  5.  |                 |----- pkgconfig
  6.  |                           |----- SvtAv1Enc.pc
  7.  |--------------- include
  8.  |                 |----- svt-av1
  9.  |                           |----- EbSvtAv1.h
  10.  |                           |----- EbSvtAv1Enc.h
  11.  |                           |----- ……
复制代码
四、编译安装FFmpeg

先下载最新的FFmpeg源码(版本号需大于等于7.1),再把FFmpeg源码包复制到MSYS环境的/usr/local/src目录下。接着在MSYS控制台执行下面命令解压源码包:
  1. cd /usr/local/src
  2. unzip ffmpeg-n7.1.1.zip
复制代码
确保MSYS环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第八章的“8.1.1  给FFmpeg集成x264”和“8.1.5  给FFmpeg集成x265”安装了H.264的编码器libx264和H.265的编码器libx265,也按照该书第十章的“10.1.1  FFmpeg集成SDL”安装了Windows系统的SDL2库,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行下面命令配置FFmpeg的编译环境:
  1. cd ffmpeg-n7.1.1
  2. export PKG_CONFIG_PATH=/usr/local/libsvtav1/lib/pkgconfig:$PKG_CONFIG_PATH
  3. ./configure --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
复制代码
配置完毕执行下面命令编译和安装FFmpeg,编译完成的ffmpeg库将会安装到configure指定的/usr/local/ffmpeg目录。
  1. make
  2. make install
  3. cp /usr/local/libsvtav1/lib/SvtAv1Enc.dll /usr/local/ffmpeg/bin
复制代码
五、查看FFmpeg的安装结果

运行下面命令查看FFmpeg的安装版本:
  1. ffmpeg -version
复制代码
上面命令返回的FFmpeg版本信息如下:
  1. ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
  2. built with gcc 12.2.0 (Rev10, Built by MSYS2 project)
  3. configuration: --prefix=/usr/local/ffmpeg --arch=x86_64 --enable-shared --disable-static --disable-doc --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-librist --enable-libdav1d --enable-libaom --enable-libsvtav1 --enable-sdl2 --enable-gpl --enable-nonfree --enable-iconv --enable-zlib --cross-prefix=x86_64-w64-mingw32- --target-os=mingw32
  4. libavutil      59. 39.100 / 59. 39.100
  5. libavcodec     61. 19.101 / 61. 19.101
  6. libavformat    61.  7.100 / 61.  7.100
  7. libavdevice    61.  3.100 / 61.  3.100
  8. libavfilter    10.  4.100 / 10.  4.100
  9. libswscale      8.  3.100 /  8.  3.100
  10. libswresample   5.  3.100 /  5.  3.100
  11. libpostproc    58.  3.100 / 58.  3.100
复制代码
根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到“--enable-libsvtav1”,说明FFmpeg已经启用了AV1编码器libsvtav1。
更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册