视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验
264、x265、libaom、vvenc 对比测试实验
- 测试机器配置:Apple M1 Pro -16G
- 编码器版本(选择自己编译):所有源码都是当前最新更新的状态,此外各类编码具体的编译过程可参考我的相关系列博客。
| 编码器 | GitHub |
|---|---|
| x264 | git clone https://code.videolan.org/videolan/x264.git |
| x265 | git clone https://bitbucket.org/multicoreware/x265_git.git |
| libaom | git clone https://aomedia.googlesource.com/aom |
| vvenc | git clone https://github.com/fraunhoferhhi/vvenc.git |
- 测试序列:
| 序列 | 分辨率 | 格式 | 位深 | 帧数 | 复杂度 |
|---|---|---|---|---|---|
| parkjoy | 1920x1080 | yuv420 | 8 bit | 500 | 复杂 |
| KristenAndSara | 1280x720 | yuv420 | 8 bit | 600 | 简单 |
-
parkjoy 示意图:

-
KristenAndSara 示意图:

- 命令行:统一设置 fps=25,其他保持默认,不区分 gop、帧类型等编码参数,libaom 也设置了额外参数,默认的需要 2pass 且太慢了。
| 编码器 | 命令行 |
|---|---|
| x264 | ./x264 --input-res wxh input.yuv --fps 25 --bitrate x -o 264.h264 |
| x265 | ./x265 --input input.yuv --input-res wxh --fps 25 --bitrate x -o 265.h265 |
| libaom | ./aomenc -w 1920 -h 1080 --fps=25/1 --target-bitrate=10000 --passes=1 --cpu-used=6 -o av1.ivf parkjoy1920x1080.yuv |
| vvenc | ./vvencFFapp -i parkjoy1920x1080.yuv --Size 1920x1080 -fr 25 --NumPasses 1 --TargetBitrate 8000k --BitstreamFile out.h266 |
- FFmpeg 计算 psnr 命令行:
./ffmpeg -s <宽x高> -pix_fmt <像素格式> -i <受损YUV文件> -s <宽x高> -pix_fmt <像素格式> -i <原始YUV文件> -lavfi psnr=stats_file=psnr.log -f null -
- 测试实验数据:
【注:ffmpeg 解码 h266 文件无法正确解码,但 ffplay 播放正确,还未排查到具体原因,所以 psnr 直接用的 vvenc 自带的计算方法 】
| 视频序列 | 编码器 | 输入 bitrate | 实际 bitrate | psnr | time |
|---|---|---|---|---|---|
| parkjoy | x264 | 20000 kb/s | 19381 kb/s | y:32.080550 u:34.560996 v:36.789507 | 41.46 fps |
| parkjoy | x265 | 15000 kb/s | 14368 kb/s | y:32.000424 u:34.508438 v:36.658605 | 19.91 fps |
| parkjoy | libaom | 10000 kb/s | 11786 kb/s | y:32.142619 u:34.909916 v:37.123507 | 1.48fps(good 模式太慢了,可以选择 rt 模式,但压缩率又不行) |
| parkjoy | vvenc | 8000kb/s | 8403 kb/s | y:32.0261 u:34.9815 v:37.7377 | 0.2 fps |
| 视频序列 | 编码器 | 输入 bitrate | 实际 bitrate | psnr | time |
|---|---|---|---|---|---|
| KristenAndSara | x264 | 2000 kb/s | 2007 kb/s | y:43.002695 u:47.506855 v:48.331598 | 103 fps |
| KristenAndSara | x265 | 1000 kb/s | 1003 kb/s | y:42.910271 u:47.303976 v:48.195422 | 87 fps |
| KristenAndSara | libaom | 400 kb/s | 395 kb/s | y:42.900337 u:48.015101 v:48.909220 | 10 fps |
| KristenAndSara | vvenc | 500kb/s | 490 kb/s | y:42.9935 u:48.1547 v:49.1280 | 1.2 fps |
- libaom 中的 rt 模式和 good 模式
| 视频 | 模式 | 码率 | psnr | time |
|---|---|---|---|---|
| KristenAndSara | good | 395 kb/s | y:42.900337 u:48.015101 v:48.909220 | 10 fps |
| KristenAndSara | rt | 1448 kb/s | y:42.970161 u:46.734927 v:47.505803 | 90 fps |
- 结论:
| 标准 | 压缩率(1080p) | 压缩率(720p) |
|---|---|---|
| H264 | 1×(基准) | 1×(基准) |
| H265 | 25.86%提升 | 50% 提升 |
| AV1 | 39.18%提升 | 80% 提升 |
| H266 | 56.64%提升 | 75.58% 提升 |
- H265 相较于 H264,BD-rate 平均可以提升 25.86% ~ 50%;
- AV1 相较于 H264,BD-rate 平均可以提升39.18% ~ 80%;
- H266 相较于 H264,BD-rate 平均可以提升 56.64% ~ 75.58%;
- 可以发现,在低分辨率简单场景视频下,AV1 的 RD 能力还比 H266 略微强点;
- libaom 中的 rt 模式下编码速度会更好,但 RD 能力不如 good 模式;
- 所得到的结论是粗略的,没有完全对齐所有编码参数,仅作参考。
相关文章:
视频编码器的抉择:x264、x265、libaom、vvenc 对比测试实验
264、x265、libaom、vvenc 对比测试实验 测试机器配置:Apple M1 Pro -16G编码器版本(选择自己编译):所有源码都是当前最新更新的状态,此外各类编码具体的编译过程可参考我的相关系列博客。 编码器GitHubx264git clon…...
【多媒体交互】Unity Kinect实现UI控件的点击
在Unity中,通过Kinect实现UI控件的点击功能,主要涉及手部追踪、坐标映射和手势检测三个核心环节。 实现步骤 初始化Kinect与关节追踪 使用KinectManager获取用户ID和手部关节点(如JointType.HandLeft)的坐标。 long userId _…...
vue将页面导出成word
方法一:使用 html-docx-js html-docx-js 是一个轻量级的库,可以将 HTML 转换为 Word 文档。 安装依赖 首先安装 html-docx-js: Bash深色版本 npm install html-docx-js --save创建导出逻辑 在 Vue 组件中实现导出功能的代码如下࿱…...
React 知识回顾(HOC、合成事件、Fiber)
HOC 嗯,用户问的是HOC是什么以及它能用来做什么。我需要先理解HOC的基本概念,然后整理它的用途。根据搜索结果,HOC是React中的高阶组件,用来复用逻辑。网页1提到HOC是一个函数,接收组件返回新组件,属于设计…...
hive相关面试题以及答案
什么是Hive?它的作用是什么? 答:Hive是一个建立在Hadoop之上的数据仓库工具,它提供了类似于SQL的查询语言HiveQL来操作存储在Hadoop中的数据。Hive的主要作用是让用户能够使用SQL语法来查询和分析大规模数据集。 Hive的架构是什么…...
Jmeter-负载测试
目录 一. 基础负载测试场景:固定并发用户数 1、线程组配置 2、HTTP请求配置 3、添加定时器 4、添加监听器 4.1 聚合报告 4.2 响应时间图 4.3 查看结果树 5、结果分析指标 二. 阶梯式加压场景(逐步增加并发) 1、插件安装 2、阶梯配…...
《深度剖析SQL数据类型转换:隐式与显式的奥秘》
在SQL的世界里,数据类型转换是一个基础且关键的操作,它贯穿于数据库开发、管理与数据分析的各个环节。数据类型转换分为隐式转换和显式转换,二者各有特点与应用场景,深刻理解它们对于编写高效、稳定的SQL代码至关重要。 一、数据…...
基于大模型的自发性气胸全方位预测与诊疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测自发性气胸的原理及技术基础 2.1 大模型介绍 2.2 模型构建与训练数据 2.3 模型训练与优化 三、术前风险预测与准备 3.1 术前风险预测指标 3.2 基于预测的术前准备 3.3 手术方案与麻醉方案制定…...
经销商订货管理系统小程序PHP+uniapp
订货管理系统的行业变革势能 在实体商业与电商融合加速的2025年,订货管理系统已成为连锁品牌、商贸批发企业及工厂客户的核心数字化基建。面对经销商订货流程冗长、加盟商库存协同低效、批发贸易数据孤岛等行业痛点,新一代系统通过ThinkPHPUniapp技术架…...
性能测试理论基础-测试流程及方案设计要点
需求调研 因性能测试技术性和专业性要求比较高,通常需要性能测试人员参与需求调研和确认。 需求调研阶段,通常需要确认以下信息: 项目背景、测试范围、业务逻辑 & 数据流转(与开发确认)、系统架构、软硬件配置信息、 测试数据量(量级要一致)、外部依赖(第三方系统…...
TextGrad:案例
原文:Yuksekgonul, M., Bianchi, F., Boen, J. et al. Optimizing generative AI by backpropagating language model feedback. Nature 639, 609–616 (2025). https://doi.org/10.1038/s41586-025-08661-4 目录 Solution optimizationPrompt optimization for rea…...
kafka 4.x docker启动kafka4.0.0 docker-compose启动最新版kafka 如何使用docker容器启动最新版kafka
1. 镜像选择标签: https://hub.docker.com/r/bitnami/kafka/tags 2. 命令: docker pull bitnami/kafka:4.0.0 3. docker-compose.yml 启动kafka4.0.0: version: 3services:kafka:image: bitnami/kafka:4.0.0container_name: kafkaports:- &…...
Next.js 中间件鉴权绕过漏洞 (CVE-2025-29927) 复现利用与原理分析
免责声明 本文所述漏洞复现方法仅供安全研究及授权测试使用; 任何个人/组织须在合法合规前提下实施,严禁用于非法目的; 作者不对任何滥用行为及后果负责,如发现新漏洞请及时联系厂商并遵循漏洞披露规则。 漏洞原理 Next.js 是一个…...
C#Lambda表达式与委托关系
1. 核心关系图示 A[委托] --> B[提供方法容器] B --> C[Lambda表达式] C --> D[委托实例的语法糖] A --> E[类型安全约束] C --> F[编译器自动生成委托实例] 2. 本质联系 2.1 类型关系 Lambda表达式是编译器生成的委托实例表达式自动匹配符合签名的…...
AOA与TOA混合定位,MATLAB例程,自适应基站数量,三维空间下的运动轨迹,滤波使用EKF
本代码实现了一个基于 到达角(AOA) 和 到达时间(TOA) 的混合定位算法,结合 扩展卡尔曼滤波(EKF) 对三维运动目标的轨迹进行滤波优化。代码通过模拟动态目标与基站网络,展示了从信号测量、定位解算到轨迹滤波的全流程,适用于城市峡谷、室内等复杂环境下的定位研究。 文…...
Uni-app入门到精通:subPackages节点为小程序的分包加载配置
subPackages节点用于为小程序的分包加载配置。因小程序有体积和资源加载限制,各小程序平台提供了分包方式,以加快小程序的下载和启动速度。主包用于放置默认启动页面、babBar页面,以及一些所有分包都会用到的公共资源或JS脚本;而分…...
如何编写单元测试
一、前言知识 1.开发过程 需求分析->设计->开发->测试->上线 2.测试种类 单元测试(测试模块编码)、黑盒测试(测试功能是否满足需求)、白盒测试(测试程序内部的逻辑结构)、回归测试(提出的缺陷进行二次验证)、集成测试(测试主要的业务功能及模块间的整合性)、系…...
Linux系统编程 | 线程的基本概念
💓个人主页:mooridy 💓专栏地址:Linux 关注我🌹,和我一起学习更多计算机的知识! 🔝🔝🔝 什么是线程 程序中的一个执行路线就叫做线程 一个进程至少要有一个执行线程,单…...
C语言之数据结构:双向链表
个人主页:云纳星辰怀自在 座右铭:“所谓坚持,就是觉得还有希望!” 前言 前文阐述了数据结构中单向链表的定义、分类和实际应用。本文将重点阐述带哨兵节点的双向循环链表。 1. 带头双向循环链表 带头双向循环链表 是一种特殊的链…...
剑指Offer62 -- 约瑟夫环
1. 题目描述 圆圈中最后剩下的数字 2. 约瑟夫环 人们站在一个等待被处决的圈子里。 计数从圆圈中的指定点开始,并沿指定方向围绕圆圈进行。 在跳过指定数量的人之后,处刑下一个人。 对剩下的人重复该过程,从下一个人开始,朝同一方…...
RAG生成中的多文档动态融合及去重加权策略探讨
目录 RAG生成中的多文档动态融合及去重加权策略探讨 一、RAG生成概述 二、多文档动态融合策略 1. 拼接与分段编码 2. 独立编码与后续融合 3. 基于查询的动态加权 三、检索结果的去重与加权策略 1. 去重策略 2. 加权策略 四、实践中的挑战与思考 五、结语 RAG生成中的…...
jdk21使用Vosk实现语音文字转换,免费的语音识别
1.下载vosk的model vosk官网:https://alphacephei.com/vosk/models 我这里使用较小的vosk-model-small-cn-0.22 2.添加相关pom文件 <!-- 获取音频信息 --><dependency><groupId>org</groupId><artifactId>jaudiotagger</artifac…...
I.MX6ULL 开发板上挂载NTFS格式 U 盘
I.MX6ULL 开发板上挂载NTFS格式 U 盘 挂载失败安装NTFS-3G安装失败成功安装 移植挂载成功卸载U盘 挂载失败 我使用的U盘的格式是NTFS格式的 插入U盘时会有信息 我使用的是闪迪的U盘,大小标称是 32G ,实际能用的只有 28G 左右 可以使用lsblk命令查看磁盘…...
性能测试~
1.什么是性能测试 1.什么是性能 就像这两个车一样,虽然都是代步工具,构造都是一样的,但是路虎的发动机要比捷达好.路虎的百米加速却是比捷达快的,我们就知道路虎的性能要比捷达好 . 那么什么是软件的性能呢?我们分析一下 2.常见的性能测试指标 2.1并发数 并发数是指在同一…...
排查使用RestTemplate远程调用,@RequestBody注解接收不到实体类
做项目学习,使用RestTemplate远程调用,从order订单系统调用pay支付系统,出现使用Request做远程接收。 代码的逻辑很简单,但就是没有接收到实体类 1. 猜想是不是没有序列化和初始化方法? 这个好排查,看Pay和…...
数据库同步中间件PanguSync:如何跳过初始数据直接进行增量同步
某些用户在使用数据库同步中间件PanguSync时说,我不想进行初次的全量同步,我已经源备份还原到目标库了,两边初始数据一样,想跳过初始数据,直接进行增量同步,该怎么设置。 直接上干货,按如下步骤…...
javaWeb Router
一、路由简介 1、什么是路由? - 定义:路由就是根据不同的 URL 地址展示不同的内容或页面。 - 通俗理解:路由就像是一个地图,我们要去不同的地方,需要通过不同的路线进行导航。 2、路由的作用 - 单页应用程序…...
qwen2.5vl技术报告解读
一. 首先qwen2.5vl模型特点 全能文档解析能力 升级文本识别至全场景文档解析,擅长处理多场景、多语种及复杂版式文档(含手写体、表格、图表、化学方程式、乐谱等),实现跨类型文档的精准解析。 跨格式精准目标定位 突破格式限制,大幅提升对象检测、坐标定位与数量统计精度,…...
【Linux】进程的详讲(上)
目录 📖1、冯诺依曼体系结构 📖2、硬件介绍 📖3、内存的重要性 📖4、程序运行的步骤 📖5、QQ聊天时的数据流动 📖6、操作系统 📖7、操作系统的目的 📖8、操作系统是如何…...
高精度除法
除数与被除数都是大整数 代码 #include<bits/stdc.h> using namespace std; typedef long long ll; string a,b; vector<int>dend,sor; bool aisbigger(vector<int>&a,vector<int>&b){if(a.size()!b.size())return a.size()>b.size();for…...
