当前位置: 首页 > news >正文

libaom 编码参数 g_usage 分析与实验

libaom

libaom是AOMedia Video 1 (AV1) 视频编码格式的参考实现库,由Alliance for Open Media (AOMedia) 开发和维护。它是一个开源项目,为开发者提供了实现AV1视频编码的工具。

  1. 主要特点
    • 开放和免版税:提供开放源代码的编码器,任何个人和组织都可免费使用,无需支付版税。
    • 高效的编码:旨在提供高效的视频压缩,适应不同网络条件和设备性能。
    • 跨平台支持:支持多种操作系统和平台,如Windows、Linux和macOS。
    • 多空间层和时间层编码:允许视频在不同分辨率和帧率下进行编码。
    • 社区支持:作为开源项目,得到活跃社区支持,不断有新功能和改进加入。
    • 可配置性:提供多种配置选项,开发者可根据应用需求调整编码参数。
    • 实时编码:支持实时编码,适用于直播和实时通信应用。
    • 兼容性:编码的视频可在支持AV1解码的任何播放器或设备上播放。
  2. 应用场景
    libaom被广泛应用于多种生产系统中,包括视频播放器、浏览器和视频服务提供商。尤其在流媒体、网页视频、视频会议等领域,因其高效的压缩性能和免版税的特性,成为降低带宽要求、提供高质量视频的理想选择。

编码参数 g_usage 介绍

  1. 该编码参数用于指定编码器的使用场景,不同的 usage 值会影响编码器的内部参数配置和优化策略,定义了三个标准usage模式常量:
    • AOM_USAGE_GOOD_QUALITY: 高质量模式,适合存储和高质量流媒体
    • AOM_USAGE_REALTIME: 实时模式,优化低延迟
    • AOM_USAGE_ALL_INTRA: 全I帧模式,适合编辑和随机访问
  2. 在使用命令行是关于该编码参数的说明:
  .usage = ARG_DEF("u", "usage", 1,"Usage profile number to use (0: good, 1: rt, 2: allintra)"),
  1. 在 validate_config 函数中配置验证当g_usage == AOM_USAGE_ALL_INTRA 的逻辑。
  if (cfg->g_usage == AOM_USAGE_ALL_INTRA) {RANGE_CHECK_HI(cfg, g_lag_in_frames, 0);  // 检查滞后帧数必须为0(全I帧模式不允许滞后编码)RANGE_CHECK_HI(cfg, kf_max_dist, 0);      // 检查关键帧最大间隔必须为0(全I帧模式每帧都是关键帧)}
  1. 在validate_config 函数会根据g_usage 的值检查cpu_used 参数的有效范围。
    • 实时模式( AOM_USAGE_REALTIME ):允许值0-11
    • 其他模式(高质量/全I帧):允许值0-9
    • cpu_used 参数控制编码速度与质量的权衡:
      • 值越小编码质量越高但速度越慢
      • 值越大编码速度越快但质量可能降低
  RANGE_CHECK(extra_cfg, cpu_used, 0,(cfg->g_usage == AOM_USAGE_REALTIME) ? 11 : 9);
  1. set_encoder_config 函数中有 g_usage 的设置逻辑,三种模式对应关系:
    • AOM_USAGE_REALTIME -> REALTIME :实时编码模式,优化低延迟
    • AOM_USAGE_ALL_INTRA -> ALLINTRA :全I帧编码模式,适合编辑和随机访问
    • 其他值 -> GOOD :默认高质量编码模式,适合存储和高品质流媒体
  switch (cfg->g_usage) {case AOM_USAGE_REALTIME: oxcf->mode = REALTIME; break;  // 实时编码模式case AOM_USAGE_ALL_INTRA: oxcf->mode = ALLINTRA; break; // 全I帧编码模式 default: oxcf->mode = GOOD; break;                      // 默认高质量编码模式}

编码参数 g_usage 实验

  1. 命令行:./aomenc -w 1920 -h 1080 --fps=25/1 --passes=1 --usage=0 -o av1.ivf BasketballDrive_1920x1080_50.yuv
  2. 视频序列说明:
    在这里插入图片描述
  3. 实验数据
视频序列g_usage码率(b/s)PSNR(dB)编码耗时(ms)
BasketballDrive_1920x1080_50.yuv0(good)309675y:31.861267 u:39.052929 v:37.547545 average:33.14853812132722
1(rt)307425y:27.402939 u:33.223680 v:32.291895 average:28.56993011985

总结

  • 维持 300kb/s 的默认码率下, GOOD 模式编码耗时是REALTIME 模式的 1012 倍,GOOD 模式编码PSNR 比REALTIME 模式高出 4.6dB!
  • libaom 的 GOOD 模式感觉应用了 AV1 标准所有的编码工具集,而 REALTIME 模式为了实时性感觉只是应用了一些必备的简单的编码工具集,对比了压缩能力,感觉为了实现实时能力,压缩能力比 x264也没强太多!
  • libaom 还是值得深度研究,编码能力的伸缩性还是很强大的!

相关文章:

  • MQ(RabbitMQ)消息重复消费问题的全面解决方案
  • 【天外之物】加速度与速度的单位向量的内积得到加速度在切向向量上的值
  • 2025年广东餐饮服务考试主要内容
  • Flutter学习四:Flutter开发基础(一)Widget
  • Leetcode - 双周赛135
  • 黑龙江 GPU 服务器租用:开启高效计算新征程
  • 【LaTeX】公式图表进阶操作
  • 深入理解卷积神经网络(CNN):从原理到实践
  • 如何保障企业数据的安全?软件开发中的数据安全防护措施
  • 龙虎榜——20250416
  • Day09【基于新闻事件的命名实体抽取】
  • 【Ai】dify:Linux环境安装 dify 详细步骤
  • AutoToM:让AI像人类一样“读心”的突破性方法
  • 数据结构之图
  • JavaEE-0416
  • Linux虚拟机filezilla总是连不上
  • Unity游戏多语言工具包
  • 类和对象终
  • # 03_Elastic Stack 从入门到实践(三)-- 4
  • 轴映射与轨迹平面(Axis Mapping and Trajectory Planes)
  • 网站微信推广方案/23岁老牌网站
  • 免费1级做爰片观看网站在线视频/上海今日头条新闻
  • 学做彩票网站/近一周的新闻大事热点
  • 东莞商城网站建设哪里比较好/台州关键词优化平台
  • wordpress官方的三个主题好排名/福州关键词排名优化
  • 企业网站建设策划书1万字/百度竞价培训班