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

前沿

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

实时模式下 libaom 与 x264 实验

  1. 视频序列:
视频序列 分辨率 复杂度
FourPeople_1280x720_60.yuv 1280x720 简单
BasketballDrive_1920x1080_50.yuv 1920x1080 复杂
  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.yuv x264 BD-rate 772 y:38.543713 u:43.920132 v:45.169686 average:39.785921 143
FourPeople_1280x720_60.yuv libaom BD-rate 775 y:40.670989 u:45.478396 v:46.747394 average:41.846336 143
BasketballDrive_1920x1080_50.yuv x264 BD-rate 2960.63 y:34.384102 u:40.506557 v:40.226674 average:35.628988 51.01
BasketballDrive_1920x1080_50.yuv libaom BD-rate 2909.15 y:35.433867 u:40.605196 v:40.475102 average:36.571560 32.31
  1. 用 Python 比较前 50 帧 psnr-y 数据(以BasketballDrive_1920x1080_50.yuv为例)
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 高了很多;
  • 总结一下,实时模式下,如果保持 x264 和 libaom 相同编码速度,libaom 的编码能力相对 x264 会更微乎其微,也进一步证明 libaom 的编码能力的伸缩性更强,为了实现实时编码,会关闭更多的编码工具;更多细节还需要进一步分析源码和原理。

原文与参考

相关推荐
哔哩哔哩技术16 天前
2025 B站春晚直播——流媒体技术助力直播体验提升与玩法创新
音视频开发
hepherd16 天前
iOS - 音频: Core Audio - 播放
swift·音视频开发
音视频牛哥16 天前
跨越技术藩篱,低延迟RTMP与RTSP播放器的战略意义
音视频开发·视频编码·直播
音视频牛哥16 天前
流转时光,极致传输:大牛直播SDK跨平台RTMP播放模块的超低延迟之道
音视频开发·视频编码·直播
David凉宸17 天前
视频融合 hls流如何对接
前端·音视频开发
音视频牛哥17 天前
跨平台轻量级RTSP服务模块:一切源自一场小而美的坚持
音视频开发·视频编码·直播
音视频牛哥17 天前
跨平台RTSP播放器之快于心稳于骨,毫秒之间见真章
音视频开发·视频编码·直播
音视频牛哥17 天前
音视频行业的真相是:真正难的,是把一件事做到极致
音视频开发·视频编码·直播
音视频牛哥18 天前
[对话牛哥]技术不是炫技,是让世界听见你声音的开始
音视频开发·视频编码·直播