高级视频编码器性能对比(H265、VP9、AV1)

devtools/2024/9/23 7:50:33/

1、背景介绍

目前在视频编解码器中,H264已经成为绝对的主流,被大部分设备、浏览器所支持。虽然有更先进的编码器推出,但是受限于推广速度和设备支持成本,一直未能成为主流。

今年公司目标是持续降本增效,现在将”屠刀“指向了视频业务的存储成本。视频文件存储主要两块指标:存储本身和CDN资源。对于历史比较旧的数据会用更低成本的存储方式备份存储。目前主要想优化存储本身的成本。对存储成本影响最大的是文件大小,而对文件大小影响最大的是视频码率,我们想要降低文件大小就要降低视频码率,但是我们想要降低码率又不太影响视频观看质量怎么办?使用更先进的编码器。

2、编解码器对比

2.1 H264(AVC)

H.264在1997年ITU的视频编码专家组提出时被称为H.264,在ITU与ISO合作研究后被称为MPEG4 Part10或H.264。

虽然上述两个组织提出了H264编码规范,但是并没有具体实现。

  • openh264 :我们日常使用的视频编码大多由思科(cisco)开源的openh264编解码库:
    http://www.openh264.org/。

  • x264:目前性能最好最完善的h264编解码库。由大名鼎鼎的VLC播放器的维护机构,法国videolan开源组织维护的libx264编解码库:http://www.videolan.org/developers/x264.html。

2.2 H265(HEVC)

主要三个实现:

  • x265:业界最好的h265(hevc)编解码库。 同样由大名鼎鼎的VLC播放器的维护组织法国videolan组织开源的libx265编解码库: https://www.videolan.org/developers/x265.html

  • openhevc:由FFmpeg维护的H265(HEVC)的编解码库,Openhevc by OpenHEVC

  • kvazaar:FFmpeg项目引用的另一款开源的H265(HEVC)解码库,注意kvazaar解码库只提供H265解码,并不提供编码。 https://github.com/ultravideo/kvazaar

2.3 VP9

VP9也是google开源的用与比拼H265(HEVC)的编解码器,除了IE9以下版本的浏览器外,现代浏览器都支持VP9视频编码,软件实现:

  • libvpx:https://www.linuxfromscratch.org/blfs/view/svn/multimedia/libvpx.html

2.4 AV1

AV1是Google VP10、Mozilla Daala以及Cisco Thor三款开源编码项目共同研发成果。AV1打破了之前编码标准中传统的二维运动矢量模型的限制,第一次引入了仿射变换运动模型,不仅可以描述平移运动,同时可以更好的表述如旋转、缩放等更加复杂的运动,有效的提升了视频编码效率。

在实际测试中,AV1比H265(HEVC)压缩率提升约27%,可以说是力压H265。是目前为止,世界上压缩性能最好的视频编解码器。再借用游戏界的话术来讲,那AV1就是“次世代”编解码器。

软件实现包含主要是FFmpeg的两个内置库:

  • dav1d:由FFmpeg和法国videolan开源组织共同维护的dav1d编解码库:https://www.videolan.org/projects/dav1d.html。跟其他videolan维护项目不同的是,dav1d编解码库不受专利版权限制。

  • librav1e:号称最快的av1解码器。实际上dav1d和librav1e编解码器性能差不多,差别不大。
    https://github.com/xiph/rav1e

3、兼容性介绍

在H264后推出的视频编解码器主要有:H265、VP9、AV1。

编解码器的普及上,编码一遍问题不大,兜底策略可以在应用中接入软编码器,主要是在浏览器中播放的兼容性上。我们先看看Chrome浏览器对解码器的支持:

  • VP8

  • VP9

  • AV1 [Only Chrome OS, Linux, macOS, and Windows at present]

  • Theora [Except on Android variants]

  • H.264 [Google Chrome only]

  • H.265 [Google Chrome only and only where supported by the underlying OS]

  • MPEG-4 [Google Chrome OS only]

H265、AV1不是所有所有场景都支持。

再看下Android平台对视频编码器的支持:

H.263对 H.263 的支持在 Android 7.0 及更高版本中并非必需• 3GPP (.3gp)
• MPEG-4 (.mp4)
H.264 AVC
Baseline Profile (BP)

(Android 3.0 及更高版本)
• 3GPP (.3gp)
• MPEG-4 (.mp4) • MPEG-TS(.ts、仅限 AAC 音频、不可查找、Android 3.0 及更高版本)
H.264 AVC
Main Profile (MP)

(Android 6.0 及更高版本)
解码器为必需项,编码器为推荐项。
H.265 HEVC
(Android 5.0 及更高版本)
适用于移动设备的 Main Profile Level 3 和适用于 Android TV 的 Main Profile Level 4.1• MPEG-4 (.mp4)
MPEG-4 SP3GPP (.3gp)
VP8
(Android 4.3 及更高版本)

(Android 2.3.3 及更高版本)
只能在 Android 4.0 及更高版本中流式传输• WebM (.webm)
• Matroska(.mkv、Android 4.0 及更高版本)
VP9
(Android 4.4 及更高版本)
• WebM (.webm)
• Matroska(.mkv、Android 4.0 及更高版本)

4、性能衡量指标

我们录制设备在电视上,编码性能太差,所以方案是H264编码后,再服务端后台进行AV1或H265转码。

涉及到了转码所以性能上我们考虑几个指标:

  • 转码实时率:专门1秒视频用多长时间,消耗多少CPU;

  • 编码效率:同样码率视频效果

5、总结

本文介绍了先进的视频编码器:H265、VP9、AV1的对比及软件实现。介绍了浏览器等平台对高级视频编码器的兼容性效果,以及编码器选型所要考虑的性能指标。

6、参考

  • Video Encoding Settings for H.264 Excellence

  • High Efficiency Video Coding

  • FFmpeg Codecs Documentation


http://www.ppmy.cn/devtools/53688.html

相关文章

ios-deploy - Required for installing your app on a physical device with the CLI

ios-deploy 是一个用于在 iOS 设备上安装、调试和运行 iOS 应用的开源工具。如果你正在使用命令行界面(CLI)来部署 React Native 或其他原生 iOS 应用到物理设备,那么安装 ios-deploy 是必要的。 以下是安装 ios-deploy 的一般步骤&#xff…

二开版视频CMS完整运营源码/新版漂亮APP手机模板/集成员分销功能等

一个二开的影视CMS,直接上传源码至网站根目录,访问网站域名即可安装。 测试环境:Nginx 1.20.1—MySQL 5.6.50–PHP-7.2(安装拓展/fileinfo) 上传源码,访问域名直接安装 后台地址:域名/MDadmi…

Java项目:111 基于SpringBoot的在线家具商城设计与实现

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本系统有管理员和用户两个角色,包括前台商城平台及后台管理系统。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订…

Stable Diffusion vs DALL·E3

大模型技术论文不断,每个月总会新增上千篇。本专栏精选论文重点解读,主题还是围绕着行业实践和工程量产。若在某个环节出现卡点,可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技(Mamba,xLSTM,KAN)则提…

[GESP202306 三级] 春游

题目:原题点我 题目大意: 找 0 0 0到 N − 1 N-1 N−1哪个少了输出哪个,没少输出 N N N 解题思路: 建立一个bool类型变量flag,输入时直接将对应的数放到对应的位置上去,就免了排序; 接着判断&#xff1…

最小生成树prim算法详解

prim算法解决的是最小生成树问题,即在一个给定的无向图G中求一棵生成树T,使得这棵树拥有图G中的所有顶点,且所有边都是来自图G中的边,并且满足整棵树的边权之和最小。 prim算法的基本思想是对图G设置集合S来存放已被访问的顶点&a…

基于文本和图片输入的3D数字人化身生成技术解析

随着虚拟现实、增强现实和元宇宙等技术的飞速发展,对高度逼真且具有表现力的3D数字人化身的需求日益增长。传统的3D数字人生成方法往往需要依赖大量的3D数据集,这不仅增加了数据收集和处理的成本,还限制了生成的多样性和灵活性。为了克服这些挑战,我们提出了一种基于文本提…

Linux环境下,怎么排查os中系统负载过高的原因瓶颈?

在Linux环境下排查系统负载过高的原因和瓶颈,可以采取以下步骤: 使用top或htop命令观察系统整体负载情况。查看load average的值,分别表示系统在1分钟、5分钟和15分钟内的平均负载。如果负载值超过CPU核心数量的70-80%,表示系统负…