首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

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

  • 25-04-18 16:21
  • 4588
  • 13626
juejin.cn

前沿

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

image.png

python
代码解读
复制代码
# -*- 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 高了很多;

image.png

  • 总结一下,实时模式下,如果保持 x264 和 libaom 相同编码速度,libaom 的编码能力相对 x264 会更微乎其微,也进一步证明 libaom 的编码能力的伸缩性更强,为了实现实时编码,会关闭更多的编码工具;更多细节还需要进一步分析源码和原理。

原文与参考

  • 原文:实时模式下 libaom 与 x264 编码对比实验
  • 博客主页:码流怪侠
  • 公众号:码流怪侠
注:本文转载自juejin.cn的码流怪侠的文章"https://juejin.cn/post/7494106899646971941"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

103
后端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top