实时模式下 libaom 与 x264 编码对比实验

news2025/5/21 15:19:26

前沿

  1. 理论基础:在相同视频质量下,AV1的压缩率比H.264高约30%-50%。
  2. 实时模式:视频编码中的实时模式,其核心目标是平衡编码效率与延迟要求,尤其在视频会议、直播、实时通信等场景中至关重要。
    • 低延迟要求:编码过程需在毫秒级完成,通常要求端到端延迟控制在100ms以内,例如视频通话场景。
    • 复杂度与效率平衡:牺牲部分压缩率以提升编码速度,例如AV1的实时模式通过简化算法(如减少运动预测模式)降低计算量。
  3. BD-rate:BD-rate(Bjøntegaard-delta-rate)是视频编码领域用于衡量编码算法优化效果的核心指标,通过对比率失真(RD)曲线的积分差异,量化码率节省或质量提升的幅度;一般有在相同码率下比较 PSNR,或者在相同 PSNR 比较码率两种方法。
  4. GitHub
    • x264:https://code.videolan.org/videolan/x264.git
    • libaom:https://aomedia.googlesource.com/aom

实时模式下 libaom 与 x264 实验

  1. 视频序列:
视频序列分辨率复杂度示例图
FourPeople_1280x720_60.yuv1280x720简单在这里插入图片描述
BasketballDrive_1920x1080_50.yuv1920x1080复杂在这里插入图片描述
  1. 编码命令行:
编码器命令行
x264./x264 --input-res wxh input.yuv --fps 25 --bitrate x --tune zerolatency -o 264.h264
libaom./aomenc -w x -h y --fps=25/1 --passes=1 --usage=1 --cpu-used=11 -o av1.ivf input.yuv
  1. 解码与计算 PSNR 命令行:
方式命令行
解码./ffmpeg -i input.h264(/ivf) output.yuv
PSNR./ffmpeg -s <宽x高> -pix_fmt <像素格式> -i <受损YUV文件> -s <宽x高> -pix_fmt <像素格式> -i <原始YUV文件> -lavfi psnr=stats_file=psnr.log -f null -
  1. 实验数据:
视频序列编码器对比方式码率(kbps)PSNR(dB)编码速度(fps)
FourPeople_1280x720_60.yuvx264BD-rate772y:38.543713 u:43.920132 v:45.169686 average:39.785921143
FourPeople_1280x720_60.yuvlibaomBD-rate775y:40.670989 u:45.478396 v:46.747394 average:41.846336143
BasketballDrive_1920x1080_50.yuvx264BD-rate2960.63y:34.384102 u:40.506557 v:40.226674 average:35.62898851.01
BasketballDrive_1920x1080_50.yuvlibaomBD-rate2909.15y:35.433867 u:40.605196 v:40.475102 average:36.57156032.31
  1. 用 Python 比较前 50 帧 psnr-y 数据(以BasketballDrive_1920x1080_50.yuv为例)
    在这里插入图片描述
# -*- coding: utf-8 -*-
# created by 码流怪侠
import matplotlib.pyplot as plt

# 提取前50帧的psnr_y数据
# x264
psnr_y_x264 = [
    36.79, 35.65, 35.90, 35.98, 35.99, 35.99, 35.98, 35.98, 36.04, 36.08,
    36.14, 36.14, 36.19, 36.31, 36.34, 36.35, 36.41, 36.42, 36.45, 36.52,
    36.59, 36.58, 36.58, 36.52, 36.44, 36.37, 36.18, 36.06, 35.93, 35.87,
    36.02, 36.09, 35.98, 35.84, 35.81, 35.72, 35.62, 35.57, 35.56, 35.49,
    35.43, 35.32, 35.24, 35.11, 34.92, 34.80, 34.59, 34.51, 34.48, 34.51
]
# libaom
psnr_y_libaom = [
    43.01, 36.71, 36.44, 36.19, 36.05, 36.09, 36.31, 36.59, 36.91, 37.15,
    37.28, 37.36, 37.42, 37.56, 37.60, 37.65, 37.68, 37.73, 37.72, 37.72,
    37.76, 37.75, 37.71, 37.64, 37.57, 37.41, 37.28, 37.11, 36.98, 36.94,
    36.98, 36.95, 36.87, 36.74, 36.68, 36.60, 36.54, 36.42, 36.37, 36.32,
    36.31, 36.21, 36.10, 35.98, 35.74, 35.53, 35.35, 35.25, 35.23, 35.18
]


# 创建图表
plt.figure(figsize=(12, 6))
plt.plot(psnr_y_x264, marker='o', linestyle='-', color='b', label='x264', alpha=0.7)
plt.plot(psnr_y_libaom, marker='s', linestyle='--', color='r', label='libaom', alpha=0.7)


plt.title('PSNR Comparison (x264 vs libaom) for First 50 Frames')  # 更新标题
plt.xlabel('Frame Number')
plt.ylabel('PSNR (dB)')
plt.grid(True)
plt.xticks(range(0, 50, 5))
plt.yticks(range(28, 46, 2))  # 调整Y轴范围
plt.ylim(28, 45)  # 调整Y轴显示范围
plt.legend()


# 显示图表
plt.tight_layout()
plt.savefig('psnr_comparison.png')
plt.show()

结论

  • 实时模式下,720p 简单视频场景下,BD-rate 方式,即编码码率 800kbps 下, x264 的编码速度是 libaom 的 1.36 倍,x264 的 亮度 Y 的 PSNR 比 libaom 低 2.13dB,色度 U 低 1.55dB,色度 V 低 1.58dB,平均低 2.06dB;
  • 实时模式下,1080p 复杂视频场景下,BD-rate 方式,即编码码率 2900kbps 下, x264 的编码速度是 libaom 的 1.59 倍,x264 的 亮度 Y 的 PSNR 比 libaom 低 1.04dB,色度 U 低 0.1dB,色度 V 低 0.25dB,平均低 0.94 dB;
  • 对比低、高分辨率,libaom 在高分辨率优势降低比较多;
  • 对比亮度分量、色度分量,libaom 在色度分量表现相对比较疲软;
  • 用 elecard 分析BasketballDrive_1920x1080_50.yuv 的编码后码流,libaom 的 I 帧占据的 bit 是 x264 的 4.18 倍,这就是为什么 libaom 的第一帧的 PSNR 高了很多;
    在这里插入图片描述
    在这里插入图片描述
  • 总结一下,实时模式下,如果保持 x264 和 libaom 相同编码速度,libaom 的编码能力相对 x264 会更微乎其微,也进一步证明 libaom 的编码能力的伸缩性更强,为了实现实时编码,会关闭更多的编码工具;更多细节还需要进一步分析源码和原理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2337101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习海康VisionMaster之矩形检测

这几天太忙了&#xff0c;好几天没有学习了&#xff0c;今天终于空下来了&#xff0c;继续学习之路吧。 一&#xff1a;进一步学习了 今天学习下VisionMaster中的矩形检测&#xff0c;这个一开始我以为是形态学方面的检测&#xff0c;实际操作下来其实还是边缘直线的衍生应用&…

C Primer Plus 第6版 编程练习——第3章

1、通过试验&#xff08;即编写带有此类问题的程序&#xff09;观察系统如何处理整数上道、浮占数上溢和浮点数下溢的 int main(int argc, char** argv) {int intMax 2147483647;float floatMax 3.402823466e38f;float floatMin -3.402823466e38f;printf("intMax:%d, …

十倍开发效率 - IDEA插件之 Mybatis Log Free

提高效率不是为了完成更多任务&#xff0c;而是为了有充足的时间摸鱼 快速体验 MyBatis Log Free 支持打印执行的 SQL&#xff08;完整的SQL&#xff0c;没有占位符的&#xff09;。 没有使用 MyBatis Log Free 的开启日志打印是这样的&#xff1a; 用了 MyBatis Log Free 后…

手动安装 VMware Tools 并设置虚拟机共享 Windows 文件夹

前言&#xff1a;在当今数字化的工作环境中&#xff0c;虚拟机技术为我们提供了强大的灵活性和便利性。VMware 作为虚拟化领域的佼佼者&#xff0c;其虚拟机软件被广泛应用于开发、测试和日常工作中。然而&#xff0c;许多用户在使用 VMware 虚拟机时&#xff0c;会遇到一个常见…

(免费)flask调用讯飞星火AI,实现websocket

本文章可借鉴学习&#xff0c;不可直接盗用 接入ai要获取ID&#xff0c;Secret&#xff0c;Key&#xff0c;和接口地址&#xff0c;由于我们服务接口类型是websocket&#xff0c;所以要获取相应的接口地址。&#xff08;千万不要复制粘贴到http的了&#xff09; 还要获取doma…

2021-11-09 C++三位数平方含有该数

缘由求解&#xff0c;运算函数&#xff0c;哪位大神教一下-编程语言-CSDN问答 void 三位数平方含有该数() {//缘由https://ask.csdn.net/questions/7560152?spm1005.2025.3001.5141int a 100, aa 1000, f 0;while (a < aa){f a*a;while (f > a)if ((f - a) % aa)f …

StarRocks Community Monthly Newsletter (Mar)

版本动态 3.4.1 版本更新 核心功能升级 数据安全与权限管控 支持「安全视图」功能&#xff0c;严格管控视图查询权限 MySQL协议连接支持SSL认证&#xff0c;保障数据传输安全 存算分离架构增强 支持自动创建Snapshot&#xff08;集群恢复更便捷&#xff09; Storage Volu…

Github 2FA(Two-Factor Authentication/两因素认证)

Github 2FA认证 多因素用户认证(Multi-Factor Authentication)&#xff0c;基本上各个大互联网平台&#xff0c;尤其是云平台厂商&#xff08;如&#xff1a;阿里云的MFA、华为云、腾讯云/QQ安全中心等&#xff09;都有启用了&#xff0c;Github算是搞得比较晚些了。 双因素身…

动态规划 -- 简单多状态dp,打家劫舍问题

1 按摩师 面试题 17.16. 按摩师 - 力扣&#xff08;LeetCode&#xff09; 本题的意思简单理解就是&#xff0c;如果我们接受了第 i 个预约&#xff0c;那么第 i -1 个预约和第 i1 个预约我们都是无法接受的&#xff0c;只能至少间隔一个选择。 按照以前的经验&#xff0c;我们…

C++学习之游戏服务器开发⑤AOI业务逻辑

目录 1.项目进度回顾 2.完善整体架构 3.AOI网格思路 4.网络AOI数据结构 5.游戏世界类添加&#xff0c;删除和构造 6.AOI查找实现 7.GAMEROLE类结合AOI 8.登陆时发送ID和姓名 9.登陆时发送周围玩家位置 10.玩家上线完成 11.玩家下线处理 1.项目进度回顾 时间轮调度处理…

Python 实现日志备份守护进程

实训背景 假设你是一名运维工程师&#xff0c;需要为公司的监控系统开发一个简单的日志备份守护进程。该进程需满足以下需求&#xff1a; 后台运行&#xff1a;脱离终端&#xff0c;长期监控指定目录&#xff08;如 /var/log/app/&#xff09;中的日志文件。自动备份&#xf…

Electricity Market Optimization 探索系列(VII)- 直流潮流方程的推导及例题

本文参考书籍&#xff1a;电力经济与电力市场&#xff0c;甘德强&#xff0c;杨莉&#xff0c;冯冬涵 著 link \hspace{1.6em} 文章的结构如下&#xff1a;围绕电力传输系统中短线路的等值等效模型&#xff0c;从节点注入功率的角度和线路功率的角度分析电网中的潮流&#xff0…

路由过滤实验

实验拓扑以及要求 此实验总结 1.ip-prefix 拒绝192.168.4.1 32,这样写的话并不会匹配192.168.4.1 32,需要加上范围less-eq 32,也就是说,192.168.4.1 32只是规则的范围,匹配还是得写范围 2.router-policy适合用在边界路由器引入 filter-policy都可以用 配置IP 配置ospf,rip …

Idea连接远程云服务器上的MySQL,开放云服务器端口

1.开放云服务器的3306端口 &#xff08;1&#xff09;进入到云服务器的控制台 &#xff08;2&#xff09;点击使用的云服务器 &#xff08;3&#xff09;点击 配置安全组规则 &#xff08;4&#xff09;添加规则 &#xff08;5&#xff09;开放端口 2.创建可以远程访问…

Oracle查询大表的全部数据

2000w的大表 表结构如下&#xff0c;其中id是索引 查询处理慢的写法 List<String> queryLoidForPage(Integer startNum,Integer endNum){try {Connection oracleConnection initBean.oracleConnection;Statement stmt oracleConnection.createStatement();// 4.执行查…

PyTorch生成式人工智能实战(1)——神经网络与模型训练过程详解

PyTorch生成式人工智能实战&#xff08;1&#xff09;——神经网络与模型训练过程详解 0. 前言1. 传统机器学习与人工智能2. 人工神经网络基础2.1 人工神经网络组成2.2 神经网络的训练 3. 前向传播3.1 计算隐藏层值3.2 执行非线性激活3.3 计算输出层值3.4 计算损失值3.5 实现前…

基于X86/Nvidia+FPGA大模型具身智能机器人控制器解决方案,同时拥有算力与实时的便利

2025年成为人形机器人产业化元年&#xff0c;行业已突破早期实验室研发阶段&#xff0c;进入"场景验证量产爬坡"新周期&#xff0c;预计2031年具身智能市场规模有望突破万亿元。这一进程的背后&#xff0c;是硬件算力、实时控制、环境适应等底层技术的系统性突破——…

使用 OpenRewrite 简化 Java 和 SpringBoot 迁移

大家好&#xff0c;这里是架构资源栈&#xff01;点击上方关注&#xff0c;添加“星标”&#xff0c;一起学习大厂前沿架构&#xff01; 移民的挑战 随着 Spring Boot 2.x 等旧版本即将到期且不再获得支持&#xff0c;迁移到较新版本对于安全性、兼容性和性能改进至关重要。但…

2025中国移动云智算大会回顾:云智变革,AI+跃迁

4月10日&#xff0c;2025中国移动云智算大会在苏州举办。会上&#xff0c;中国移动开启“由云向智”新范式&#xff0c;以“智”为核心开辟算网新生态&#xff0c;彰显其在AI新时代的战略远见与技术引领力。 “云智算”将如何通过算网基础设施与人工智能核心技术的深度融合&am…

Unity URP Moblie AR示例工程,真机打包出来,没阴影

效果&#xff1a; unity ar示例演示 现象&#xff1a; 真机打包测试私活没有阴影 Unity版本&#xff1a;2022.3.4f1c1 分析原因&#xff1a; Prefab &#xff1a;ARFeatheredPlane中也有材质&#xff0c;一个用于环境遮挡&#xff0c;一个用于阴影接受。 按理说有啊。 urp …