FFmpeg开发笔记(七十二)Linux给FFmpeg集成MPEG-5视频编解码器EVC

MPEG-5是新一代的国际音视频编解码标准,像我们熟悉的MP3、MP4等音视频格式就来自于MPEG系列。MP3格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的"5.2 MP3音频",MP4格式的说明介绍参见《FFmpeg开发实战:从零基础到短视频上线》一书的"2.1.2 音视频文件的封装格式"。

MPEG-5有关视频编解码的内容主要有两部分,一个是Part 1的基本视频编码(Essential Video Coding,EVC),另一个是Part 2的低复杂度增强视频编码(Low Complexity Enhancement Video Coding,LCEVC)。其中Part 1的EVC是由三星、华为、高通、Divideon 支持的MPEG标准,它由两个配置文件组成,一个为只使用过期专利且免版税的基线规范,另一个为需要版税并使用创新编码工具的主规范。EVC旨在提供比现有视频编码标准更高的压缩效率,同时解决专利许可问题,实现免专利费的编码方案。
相比现有的H.624和H.265标准,EVC在视频编解码方面拥有下列几点优势:
1、在主模式下,EVC的平均比特率比H.265低26%;在基线模式下,比H.264低31%。
2、EVC的解码时间比H.264减少60%。
3、EVC的基线方案包含了超过20年的技术,可以实现免专利费的要求。
MPEG-5现已开源MPEG-5 EVC的视频编解码器,其中视频解码器的开源库叫libxevd,视频编码器的开源库叫libxeve。如今EVC的编解码器libxevd和libxeve日渐成熟,从7.0版本开始的最新FFmpeg源码已经支持EVC的编解码器libxevd和libxeve。
接下来以华为的欧拉系统为例,介绍如何在Linux环境给FFmpeg集成MPEG-5 EVC视频编解码器libxevd和libxeve,具体的操作步骤说明如下:

一、安装libxevd

libxevd是一款MPEG-5的EVC视频解码器。它的源码托管页面在https://github.com/mpeg5/xevd/,最新版本是2024年4月发布的xevd-0.5.0,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xevd/tar.gz/refs/tags/v0.5.0。

libxevd的安装步骤说明如下。

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

复制代码
tar zxvf xevd-0.5.0.tar.gz
cd xevd-0.5.0

2、在xevd目录下创建新文件version.txt,文件内容填入"v0.5.0",表示解码器的版本为0.5.0。

3、执行以下命令配置libxevd

复制代码
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 --install-prefix=/usr/local ..

配置完成后,打开src_main/CMakeFiles/xevd_dynamic.dir/link.txt,在"-shared"后面补充" -lm",表示生成的动态库要链接数学函数库。

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

复制代码
make

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

复制代码
make install

二、安装libxeve

libxeve是一款MPEG-5的EVC视频编码器。它的源码托管页面在https://github.com/mpeg5/xeve/,最新版本是2024年6月发布的xeve-0.5.1,该版本的源码包下载地址是https://codeload.github.com/mpeg5/xeve/tar.gz/refs/tags/v0.5.1。

注意:由于FFmpeg仅支持版本号大于等于0.5.1的libxeve,因此务必下载xeve-0.5.1,不可下载xeve-0.5.0。

libxeve的安装步骤说明如下。

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

复制代码
tar zxvf xeve-0.5.1.tar.gz
cd xeve-0.5.1

2、在xeve目录下创建新文件version.txt,文件内容填入"v0.5.1",表示编码器的版本为0.5.1。

3、执行以下命令配置libxeve

复制代码
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=1 --install-prefix=/usr/local ..

配置完成后,打开src_main/CMakeFiles/xeve_dynamic.dir/link.txt,在"-shared"后面补充" -lm",表示生成的动态库要链接数学函数库。

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

复制代码
make

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

复制代码
make install

三、让FFmpeg启用libxevd和libxeve

由于FFmpeg默认未启用libxevd和libxeve,因此需要重新配置FFmpeg,标明启用libxevd和libxeve,然后重新编译安装FFmpeg。

先下载最新的FFmpeg源码(版本号需大于等于7.0),再把FFmpeg源码包上传到Linux服务器的/usr/local/src目录下。接着登录Linux服务器的控制台,执行下面命令解压源码包:

复制代码
cd /usr/local/src
unzip ffmpeg-n7.1.1.zip

确保Linux环境已经按照《FFmpeg开发实战:从零基础到短视频上线》该书第一章的"1.2 Linux系统安装FFmpeg"安装了H.264的编码器libx264和H.265的编码器libx265,并且按照之前的文章安装了H.266的编码器libvvenc,然后执行以下的liblc3启用步骤。

1、回到FFmpeg源码的目录,执行以下命令重新配置FFmpeg,主要增加启用libxevd和libxeve。(增加了选项" --enable-libxevd --enable-libxeve")

复制代码
cd ffmpeg-n7.1.1
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig:$PKG_CONFIG_PATH
./configure --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-libxevd --enable-libxeve --enable-libxevd --enable-libxeve --enable-iconv --enable-gpl --enable-nonfree

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

复制代码
make clean
make -j4

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

复制代码
make install

四、查看FFmpeg的安装结果

运行下面命令查看FFmpeg的安装版本:

复制代码
ffmpeg -version

上面命令返回的FFmpeg版本信息如下:

复制代码
ffmpeg version 7.1.1 Copyright (c) 2000-2025 the FFmpeg developers
built with gcc 10.3.1 (GCC)
configuration: --prefix=/usr/local/ffmpeg --enable-shared --disable-static --disable-doc --enable-zlib --enable-libx264 --enable-libx265 --enable-libvvenc --enable-liblc3 --enable-libxevd --enable-libxeve --enable-iconv --enable-gpl --enable-nonfree
libavutil      59. 39.100 / 59. 39.100
libavcodec     61. 19.101 / 61. 19.101
libavformat    61.  7.100 / 61.  7.100
libavdevice    61.  3.100 / 61.  3.100
libavfilter    10.  4.100 / 10.  4.100
libswscale      8.  3.100 /  8.  3.100
libswresample   5.  3.100 /  5.  3.100
libpostproc    58.  3.100 / 58.  3.100

根据以上返回的版本信息,可知已安装的FFmpeg版本号为7.1.1,同时configuration这行找到"--enable-libxevd --enable-libxeve",说明FFmpeg已经启用了MPEG-5 EVC视频编解码器libxevd和libxeve。

更多详细的FFmpeg开发知识参见《FFmpeg开发实战:从零基础到短视频上线》一书。

相关推荐
贺biubiu19 小时前
2025 年终总结|总有那么一个人,会让你千里奔赴...
android·程序员·年终总结
xuekai2008090119 小时前
mysql-组复制 -8.4.7 主从搭建
android·adb
nono牛20 小时前
ps -A|grep gate
android
未知名Android用户21 小时前
Android动态变化渐变背景
android
行业探路者21 小时前
二维码标签是什么?主要有线上生成二维码和文件生成二维码功能吗?
学习·音视频·语音识别·二维码·设备巡检
nono牛1 天前
Gatekeeper 的精确定义
android
stevenzqzq1 天前
android启动初始化和注入理解3
android
城东米粉儿1 天前
compose 状态提升 笔记
android
粤M温同学1 天前
Android 实现沉浸式状态栏
android
Android系统攻城狮1 天前
Android16音频之获取Record状态AudioRecord.getState:用法实例(一百七十七)
音视频·android16·音频进阶