点击上方“LiveVideoStack”关注我们

翻译 | Alex

技术审校 | 章琦

本文来自OTTVerse,作者为Krishna Rao Vijayanagar。

编解码器

Easy Tech

#005#

在本篇文章中,我们将学习视频编解码器、视频编码标准以及在数据压缩和解压缩的过程中,视频编码标准是如何发挥作用的。

在前面介绍数据压缩的文章中,我们已经证实,数据预测对于减少数据体积而言至关重要。

在预测的过程中,为了向另一端传达压缩信息的含义和句法,我们最终设计了一门“语言”。这种语言的设计很微妙,我们在本篇文章中将重点说明。

数据压缩和创造语言

为了理解视频编解码器,我将请你传送下列英语字母序列给你的朋友。但是,有限制条件:我们手边的系统比较落后,它要用1字节的空间存储一个字母或数字。

数据:

<data>A A A A A A A A A A A A A A A A A A A A B
</data>

注意:直接告诉你,这里有20个A和1个B(担心你数不清楚),你要怎么做呢?

答案:我要说的是,有两种显而易见的技术能够解决此问题(我们排除了所有高级熵编码技术以假设你从未听说它们)。

方法1:每个A和B都使用1个字节存储,一共占用21字节的存储空间。

方法2:使用如下方法:

  • 第一个字符“A”用1个字节存储

  • 数字“20”用1个字节存储

  • 字母“B”用1个字节存储

  • 数字“1”用1个字节存储

我们最后就得出:

A20B1

只用了4个字节,厉害吧!

好了,我们把称为码流的A20B1传给你的朋友吧!

等等!他该如何理解这个码流?除了你我以外,其他人根本不知道它是什么意思。是的!这就是我们需要定义一种语言来处理数据的原因。这种语言需要设置明确的规则来管理“编码或压缩”数据的“解码和解压缩”。

我们暂且将这种语言称为 Compresslt

CompressIt 的规则非常简单:

  • 奇数字节代表要存储的字母

  • 偶数字节代表连续字母的存储次数

设计完我们的语言后,我现在可以将 CompressIt 的规范发布在网上以供其他工程师阅读并发现可能存在的漏洞或错误。

一个只有两行字的文件中,还会有什么错误?

我想说的是,非常有可能。比如,有人可能会站出来说:“嘿,伙计们!如果一个字母重复256次怎么办?我这么问是因为256已经超过了一个字节所能容纳的值。”

糟糕!我们犯了一个大错!但你看,这也说明了peer review的重要性!现在,语言创造者(你和我)需要重新制定一个更好的规范,并再次发给大家review。

整个过程会一直持续,直到解决所有问题,而且所有人(编解码器工程师)将在这种语言规范上达成一致。

   编解码器诞生了!

我一直在上面的例子中使用“语言”一词,但实际上你和我刚才做的正是在定义和实现一个编解码器——数据压缩和解压缩方案

在现实世界中,编解码器是这样诞生的(大部分情况):

一群被称为“编解码委员会”的人聚到一起,然后:

  • 告诉全世界,现在需要新的编解码器并明确规定要求(如:提高50%的压缩率、能压缩8K视频、新的色彩格式等)

  • 征求贡献、提议和建议,并评估其可行性

  • 协调所有必要的文档、测试和实验,以确定生成编解码器的规则和工具

  • 最后,发布编解码器的标准供全世界使用

每一个视频编解码器(H.264/AVC、AV1和VP9等)都需要经历这样一个过程。现在你知道编解码器是如何诞生的了吧!

但是,有必要详细解释视频编解码器吗?直接发布软件不行吗?这种标准难道不是在浪费时间和金钱吗?

   明确规范编解码器对行业有何帮助?

好问题!为了更好地理解,让我们回到上面Compresslt的例子。

如果俄罗斯的某位工程师想要为Compresslt编解码器写一个解码器,他需要做的就是拿到一份编解码器的规范并理解它。

在学习Compresslt的过程中,他意识到他需要:

  • 获取传入的数据流或者读取使用CompressIt压缩的文件

  • 读取奇数字节并用它表示字母(比如X)

  • 读取偶数字节(N)并用它表示出现N次字母X

  • 重复这个过程直至文件结束

准确的说,这就是编解码器标准所实现的事——它明确规定了码流的外观和行为,以便所有人都可以为它编写解码器。

它不会告诉你如何创建码流,只会告诉你码流看起来应该是什么样子的。

下面这个现实中的例子充分说明了视频编解码器及其规范的重要性。

假如你在网上看到了这样的新闻:“苹果将在下一个发布的版本中添加对HEVC的支持”,这意味着苹果的技术团队:

  • 下载了一份HEVC规范

  • 阅读规范(一遍又一遍,一遍又一遍——打开规范,你就会明白为什么要这么做)

  • 编写一个程序,可以解码HEVC码流

  • 计划在下一次软件更新时发布该程序

他们为什么能够做到这些?

因为一群工程师聚在一起创建了HEVC视频压缩标准,并发布了一份文件,详细说明了解码的每个步骤和码流的语义,这样世界上的任何人都能为它编写解码器。

   编解码器规范会定义编码器吗?

不会,但是这个问题有些歧义,让我来解释一下。

编解码器规范会告诉你语言中存在哪些工具,编码器的输出应该是什么样子,以及解码器会如何解析它。

但这也意味着你可以以任意一种方式编写编码器——只要编码器产生的码流符合规范的要求。这是我最想强调的重点。

换言之,

  • 如果你正在使用CompressIt 压缩数据,你不能切换奇数字节和偶数字节的含义,这样所有解码器都会将它们混淆。

  • 但是,你可以使用任意技术计数和记录连续的字母,以及它们重复的次数。如果你愿意的话,你还可以用量子计算机!只要你能确保从编码器输出的码流符合规范。

注意:你肯定会因为使用量子计算机而被解雇,但你仍然能编写一个有效的编码器,是不是看到了一线希望?

很好,现在你需要回答一个问题。

当你编写编码器或者解码器的时候,你怎么能知道它会顺利运行呢?换句话说,有没有可以比对代码的黄金标准或者参考编码器/解码器?

   测试模型和参考编码器&解码器

为了满足大家对黄金标准和参考的需求,编解码器委员会和工作组发布了“测试模型”和参考编码器和解码器。

但它们并不会优化速度和性能,仅包含符合规范的编码器和解码器的实现,你可以使用它们来验证编码器实现生成的码流。

此外,委员会经常发布符合标准的编码码流。解码器制造商可以使用这些码流来测试他们的软件或硬件是否遵循编解码器规范。

   结束语

我希望你现在已经理解了什么是视频编解码器、视频编码标准以及它们与编码器和解码器开发之间的关系,在后续的文章中,我们将一起学习视频编解码器中的各类工具是如何工作的。


致谢

本文已获得作者Krishna Rao Vijayanagar授权翻译和发布,特此感谢。

原文链接:https://ottverse.com/what-is-a-video-codec/

延伸阅读:

视频编码完全指南

Easy Tech:什么是I帧、P帧和B帧?

为什么视频压缩如此重要


讲师招募

LiveVideoStackCon 2022 音视频技术大会 上海站,正在面向社会公开招募讲师,无论你所处的公司大小,title高低,老鸟还是菜鸟,只要你的内容对技术人有帮助,其他都是次要的。欢迎通过 speaker@livevideostack.com 提交个人资料及议题描述,我们将会在24小时内给予反馈。

喜欢我们的内容就点个“在看”吧!

如何给小白解释什么是编解码器相关推荐

  1. 小白日志——扫灰、加内存条、装系统自己动手丰衣足食

    2015-4-4 周围女生的笔记本常常用着用着就很卡,卡了也忍着,实在忍不下去了,如我这个小白,就决定给电脑扫扫灰.小白没有经验,只有一颗"勇猛"的心,遂昨天在网上搜罗一筐资料后, ...

  2. php preg_match 只匹配第一个字符_PHP正则表达式核心技术完全详解 第12节知识补充 断言匹配

    作者:极客小俊 一个专注于web技术的80后 你不用拼过聪明人,你只需要拼过那些懒人 你就一定会超越大部分人! PHP正则中的断言匹配 我遇见过很多初学者都不知道什么叫 断言匹配 ,今天就跟小白解释一 ...

  3. Jmeter之http性能测试实战 NON-GUI模式 进行分布式压力测试——干货(十二)(转载)...

    转载自:https://www.cnblogs.com/Lam7/p/6833501.html Apache JMeter Distributed Testing Step-by-step This ...

  4. 实现视频和音频的零延迟是标准的零和博弈

    作为实时音视频行业,我们对为什么不能零延迟推送视频提出很多理由,其中主要集中在网络容量或间歇性,扩展低延迟解决方案的成本,甚至局限性的现成处理器实时处理4K Ultra HD或高动态范围(HDR)内容 ...

  5. 剑英的区块链学习手记(一)

    开篇布拉拉 因为参与了小蚁的c#智能合约编译器的开发,让我第一次近距离接触到区块链技术. 以前我对区块链技术的了解,只知道有一种叫做比特币的玩意儿,以前有同事在几百块一个比特币的时候屯了一批,后来价格 ...

  6. php正则匹配js中变量_PHP正则表达式核心技术完全详解 第12节 [附加知识] 断言匹配...

    作者:极客小俊 一个专注于web技术的80后 我不用拼过聪明人,我只需要拼过那些懒人 我就一定会超越大部分人! 极客小俊@知乎,官方首发原创文章 博客: 极客小俊GeekerJun PHP正则中的断言 ...

  7. 阅读笔记--计算机网络 自顶向下方法

    面试知识点总结 参考: 1.计算机网络太难?了解这一篇就够了 2. 如何跟小白解释路由器和交换机的区别?并且家用路由器充当了路由器和交换机的功能吗? 3.如何生动形象.切中要点地讲解 OSI 七层模型 ...

  8. 费曼技巧在学习中的应用

    1 费曼技巧介绍 1.1 费曼技巧的步骤 1)学习一个概念: 用思维导图法 2)写文章或者向小白解释(使用简化和类比的方法): 3)卡壳回头学习这部分并再次解释. 1.2 费曼技巧学编程 1)学习一个 ...

  9. K2P padavan固件下宽带与IPTV融合

    一.我的需求 坐标江苏小城,原来手机用的99的套餐,可以免费带一个副卡,现在升级了电信129的5G融合套餐,送了一个iTV(一个月10元),但是副卡收费10元,哎,算来算去都没有运营商精明啊. 家里很 ...

最新文章

  1. selenium找不到元素
  2. android gridview显示本地图片大小,在Android上的GridView中调整图像大小
  3. 部署GitLab时, 问题
  4. Pytorch中DNN入门思想及实现
  5. Git之原有基础开发新功能
  6. 关于装配学校计算机教室报告,计算机室工作计划
  7. 【优化算法】水基湍流优化算法(TFWO) 【含Matlab源码 1585期】
  8. 网易和淘宝的rem方案剖析
  9. Linux局域网传输文件
  10. java多线程计算pi_Java多线程——计算1-20阶乘和
  11. 七年未必痒:如何营造亲密关系的新鲜感?
  12. 探讨PHP实现站内搜索引擎的具体方法
  13. 关于修真、法力、法术、武功等的介绍
  14. c语言错误中numeric,LC_NUMERIC
  15. Paper Reading Notes
  16. Google浏览器打开axure产品原型的解决方案
  17. 【MySQL-设置定时任务】
  18. 基础Java练习16:学生喂养动物
  19. 在字符串中查找指定字符
  20. 图像平移 ——MATLAB实现

热门文章

  1. 201105阶段二qt创建简单工程
  2. 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案
  3. 数据中心机房设计及各专业技术平衡
  4. 使用git推送代码到开源中国以及IDEA环境下使用git
  5. InfoComm China 2016“全球新产品发布活动” —— 汇聚众多革新设备及技术
  6. Ubuntu14.04安装和配置Tomcat8.0.12(转)
  7. 关于“无法完成该动作 到Microsoft Exchange的连接不可用”的解决办法
  8. Web Service学习笔记(4)
  9. 增强DropDownList和ListBox控件:保持客户端脚本添加的options
  10. CodeForces - 1323C Unusual Competitions(贪心)