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

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.mzph.cn/bicheng/29097.shtml

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

相关文章

vue分页

先看效果 再看代码 <!-- 分页 --><div v-if"pageParams.pageCount > 1" class"flex justify-end mt-6"><n-paginationv-model:page"pageParams.page" v-model:page-size"pageParams.pageSize" :page-count"pa…

Unity3D MMORPG加载背包配置表详解

一、引言 在Unity3D开发的大型多人在线角色扮演游戏&#xff08;MMORPG&#xff09;中&#xff0c;背包系统扮演着至关重要的角色。它不仅是玩家存储和管理物品的地方&#xff0c;更是游戏经济体系和交互系统的重要组成部分。背包的配置表加载是背包系统实现的关键步骤之一&am…

Hazelcast 分布式缓存 在Seatunnel中的使用

1、背景 最近在调研seatunnel的时候&#xff0c;发现新版的seatunnel提供了一个web服务&#xff0c;可以用于图形化的创建数据同步任务&#xff0c;然后管理任务。这里面有个日志模块&#xff0c;可以查看任务的执行状态。其中有个取读数据条数和同步数据条数。很好奇这个数据…

羊城杯 2020 a_piece_of_java

考点:JDBC反序列化打CC链动态代理类触发readobject 一眼看过去 好像只有一个mysql-connector-java 可以利用jdbc 可能的攻击路径就有1) Mysql服务器任意文件读取 2) JDBC反序列化打依赖链 出现了一个不常见的依赖库 serialkiller 做了反序列化的过滤器 可以尝试查看其源码 htt…

2000-2022年上市公司员工、工资数据

2000-2022年上市公司员工、工资数据 1、时间&#xff1a;2000-2022年 2、来源&#xff1a;上市公司年报 3、指标&#xff1a;年份、股票代码、股票简称、行业名称、行业代码、省份、城市、区县、行政区划代码、城市代码、区县代码、首次上市年份、上市状态、员工人数_人、应…

Windows 与 Java 环境下的 Redis 利用分析

1 前言 在最近的一次攻防演练中&#xff0c;遇到了两个未授权访问的 Redis 实例。起初以为可以直接利用&#xff0c;但后来发现竟然是Windows Java (Tomcat)。因为网上没有看到相关的利用文章&#xff0c;所以在经过摸索&#xff0c;成功解决之后决定简单写一写。 本文介绍了…

【工程2区】毕业神刊 —— 1-2个月录用!非黑!非预警!

【欧亚科睿学术】 电力能源类SCIE ✅ 进展超顺 ✅ 录用率高 ✅ 领域相关均可 【期刊简介】IF&#xff1a;1.0-2.0&#xff0c;JCR2区&#xff0c;中科院4区 【版面类型】正刊&#xff0c;仅少量版面 【终审周期】走期刊部系统&#xff0c;预计3个月左右录用 【检索情况…

Linux基本知识----3

1.什么是linux&#xff1f; Linux继承了Unix以网络为核心的设计思想&#xff0c;是一个性能稳定的多用户网络操作系统 2.为什么 Linux 体系结构要分为用户空间和内核空间的原因&#xff1f; Linux 为了保护内核的安全&#xff0c;把系统分成了两部分。 3.BASH和DOS之间的基…

使用SpringBoot对接Kafka

Kafka是什么&#xff0c;以及如何使用SpringBoot对接Kafka 一、Kafka与流处理 我们先来看看比较正式的介绍&#xff1a;Kafka是一种流处理平台&#xff0c;由LinkedIn公司创建&#xff0c;现在是Apache下的开源项目。Kafka通过发布/订阅机制实现消息的异步传输和处理。它具有高…

JS是什么

JS 是 JavaScript 的缩写&#xff0c;它是一种轻量级的、解释型的或即时编译型的编程语言。JavaScript 主要被用于在网页上实现动态的、交互式的功能。它可以直接嵌入到HTML网页中&#xff0c;也可以通过外部文件来链接。 JavaScript 有以下主要特性和用途&#xff1a; 动态交…

JAVA动态表达式:反向解析表达式

接上面&#xff1a; JAVA动态表达式&#xff1a;Antlr4 G4 模板 读取字符串表达式结构树-CSDN博客 JAVA动态表达式&#xff1a;Antlr4 表达式树解析-CSDN博客 JAVA动态表达式&#xff1a;Antlr4 G4模板-CSDN博客 上面的内容是实现了表达式转行成类。 如&#xff1a;proc…

【保姆级】Linux 基于 Docker 部署 ES7.7.0 elasticsearch7.7.0

一、拉取 ES 镜像 docker pull elasticsearch:7.7.0二、创建挂载目录并授权 # 挂载目录 mkdir ~/elasticsearch mkdir ~/elasticsearch/config mkdir ~/elasticsearch/data mkdir ~/elasticsearch/plugins# 赋予权限 sudo chmod -R 777 &#xff5e;/elasticsearch/ sudo chm…

组件二次封装,通过属性事件透传,插槽使用,组件实例方法的绑定,深入理解 Vue.js 组件扩展与插槽

透传&#xff0c;插槽&#xff0c;组件实例方法的绑定&#xff0c;深入理解 Vue.js 组件扩展与插槽 前言 Vue.js 提供了强大的组件化系统&#xff0c;允许开发者构建可复用、可组合的UI组件。在实际项目中&#xff0c;直接使用第三方库提供的基础组件&#xff08;如Element UI…

Internet Download Manager(IDM6.41)软件下载-详细安装教程视频

Internet Download Manager有一个智能下载逻辑加速器&#xff0c;具有智能动态文件分割和安全的多部分下载技术&#xff0c;可以加速下载。与其他下载加速器和管理器不同&#xff0c;Internet下载管理器在下载开始之前对文件进行分段&#xff0c;而Internet下载管理器在下载过程…

用TensorRT-LLM进行LLama的推理和部署

Deploy an AI Coding Assistant with NVIDIA TensorRT-LLM and NVIDIA Triton | NVIDIA Technical BlogQuick Start Guide — tensorrt_llm documentation (nvidia.github.io) 使用TensorRT-LLM的源码&#xff0c;来下载docker并在docker里编译TensorRT-LLM&#xff1b; 模型…

模拟14位相机输出输入到bram Verilog代码

1 模拟输出代码 `timescale 1ns / 1psmodule simulate_camera_out (input clk,input rest_n,output camera_clk, //像素时钟output [13:0] camera_data, //像素值数据output [19:0] pixel_xy, //此时输出的像素值坐标output reg frame_valid //帧有效信号,1代表帧有效0代…

细说MCU定时器中断的实现方法

目录 一、硬件及工程 二、STM32G4系列MCU的定时器 三、定时器中断的实现过程 1、配置新工程.ioc 2、代码修改 &#xff08;1&#xff09;时钟初始化函数MX_TIM3_Init() &#xff08;2&#xff09;使能定时器中断 &#xff08;3&#xff09;定时器中断服务函数 &#…

从混乱到秩序:数据提取与治理的重要性

&#x1f525;从混乱到秩序&#xff1a;数据提取与治理的重要性&#x1f525; &#x1f4ca; 大家好&#xff0c;今天我们来聊聊一个在我们生活中无处不在&#xff0c;但又经常被忽视的话题——#数据提取与治理#。 &#x1f4ad; 想象一下&#xff0c;你走进一个满是杂物的房…

Android Calculator2源码分析与修改

private CalculatorDisplay mDisplay; private Symbols mSymbols new Symbols(); -41,6 44,7 class Logic { private int mLineLength 0; private static final String INFINITY_UNICODE “\u221e”; private static final String ZMS_NUMBER “55555”; public stat…

Linux构建本地时间同步ntp

环境介绍&#xff1a; 主机名 IP地址 系统发行版 环境 Node01 192.168.100.102 Centos 7.4 可联网、已关闭防火墙selinux Node02 192.168.100.103 Centos 7.4 已关闭防火墙selinux 1.主节点同步阿里云标准时间 在保证连接外网的情况下&#xff0c;同步阿里服务器的…