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开发实战:从零基础到短视频上线》一书。
FFmpeg开发笔记(七十二)Linux给FFmpeg集成MPEG-5视频编解码器EVC的更多相关文章
- FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台
FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待 前言 将ffmpeg移植到海思H ...
- 树莓派开发笔记(十二):入手研华ADVANTECH工控树莓派UNO-220套件(一):介绍和运行系统
前言 树莓派也可以做商业应用,工业控制,其稳定性和可靠性已经得到了验证,故而工业控制,一些停车场等场景也有采用树莓派作为主控的,本片介绍了研华ADVANTECH的树莓派套件组UNO-220-P4N ...
- .net开发笔记(十二) 设计时与运行时的区别(续)
上一篇博客详细讲到了设计时(DesignTime)和运行时(RunTime)的概念与区别,不过没有给出实际的Demo,今天整理了一下,做了一个例子,贴出来分享一下,巩固前一篇博客讲到的内容. 简单回顾 ...
- 安卓开发笔记(十二):SQLite数据库储存(上)
SQLite数据库存储(上) 创建数据库 Android专门提供了一个 SQLiteOpenHelper帮助类对数据库进行创建和升级 SQLiteOpenHelper需要创建一个自己的帮助类去继承它并 ...
- ESP32 开发笔记(十二)LittlevGL 添加自定义字体和物理按键
LittlevGL 添加自定义字体获取字库 ttf 文件可以从一些网站上获取字库文件,比如请注意字体许可证 生成源文件使用 LittlevGL 提供的字库文件转换工具,将 ttf 字库文件转换为源文件 ...
- Java开发笔记(十二)布尔变量论道与或非
在编程语言的设计之初,它们除了可以进行数学计算,还常常用于逻辑推理和条件判断.为了实现逻辑判断的功能,Java引入了一种布尔类型boolean,用来表示“真”和“假”.该类型的变量只允许两个取值,即t ...
- PID控制器开发笔记之十二:模糊PID控制器的实现
在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...
- Android笔记(七十二) Style和Theme
我们尝尝需要使用setText.setColor.setTextSize等属性来设置控件的样式,但是每个控件都需要设置这些属性,工作量无疑是巨大的,并且后期维护起来也不方便. Style Androi ...
- Hi3516开发笔记(十):Qt从VPSS中获取通道图像数据存储为jpg文件
前言 上一篇已经将himpp套入qt的基础上进行开发.那么qt中拿到frame则是很关键的交互,这是qt与海思可能编解码交叉开发的关键步骤. 受限制 因为直接配置sample的vi比较麻烦 ...
- FFmpeg开发笔记(三):ffmpeg介绍、windows编译以及开发环境搭建
前言 本篇章是对之前windows环境的补充,之前windows的是无需进行编译的,此篇使用源码进行编译,版本就使用3.4.8. FFmpeg简介 FFmpeg是领先的多媒体框架,能够解码 ...
随机推荐
- 手写数字识别实战教程:从零实现MNIST分类器(完整代码示例)
引言:数字识别的魔法世界 在人工智能的奇妙宇宙中,手写数字识别堪称经典中的经典.这个看似简单的任务--让电脑像人一样"认数字",背后蕴含着模式识别的核心思想.本文将带领你亲手实现一 ...
- el-table-column动态判断显示性别男女
<el-table-column label="性别" width="60" align="center" prop="ge ...
- OpenJDK与OracleJDK--不挣钱的永远是二等公民
众所周知,编程语言是的根是它的标准.标准和国际技术组织密切相关,比如 c++标准,由国际标准化组织(ISO) 的 C++ 标准委员会ISO/IEC JTC1/SC22/WG21)维护更新,他们发布的标 ...
- 爬虫项目之爬取4K高清壁纸
爬虫项目之爬取4K高清壁纸 目标网址:4K壁纸高清图片_电脑桌面手机全面屏壁纸4K超清_高清壁纸4K全屏 - 壁纸汇 使用技术Selenium+Requests 下面是目标网页 思路:由于此网页是通过 ...
- infiniswap安装
环境:ubuntu14.04,内核4.04 uname -a Linux ubuntu 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11: ...
- Joomla未授权访问漏洞|CVE-2023-23752复现及修复
00 前言 这漏洞公开有阵子了好像,今天才复现了下 Jooml 在海外使用较多,是一套使用 PHP 和 MySQL 开发的开源.跨平台的内容管理系统(CMS).Joomla 4.0.0 至 4.2 ...
- 【记录】IDA和Ollydbg查看指令地址及地址对应的指令
文章目录 在IDA中查看指令地址 在Ollydbg中查看指令地址 在Ollydbg中查看地址对应的指令 在IDA中查看指令地址 在Ollydbg中查看指令地址 ollydbg在对应指令处,右键-查看- ...
- 106套Axure RP大数据可视化大屏模板及通用组件库
106套Axure RP大数据可视化大屏模板包括了多种实用美观的可视化组件库及行业模板库,行业模板涵盖:金融.教育.医疗.政府.交通.制造等多个行业提供设计参考. 随着大数据的发展,可视化大屏在各行各 ...
- 将数据导出 Excel 并异步发送到指定邮箱:一次性能优化实战
使用 Spring Boot 实现 Excel 导出 + 邮件异步发送功能,解决接口阻塞问题 一.背景介绍最近我在开发一个跑团管理系统的数据导出功能,需求是将用户查询的成员信息.跑量统计等数据导出为 ...
- helm3培训文档
helm介绍1.传统服务部署到k8s集群的流程拉取代码--> 打包编译-->构建镜像-->准备一堆相关部署的yaml文件(如:deployment.service.ingress等) ...