视频的编解码格式

概念术语

  • 两大组织主导视频压缩的组织及其联合(joint)组织
  • ITU-T(VCEG)
    ITU-T的中文名称是国际电信联盟远程通信标准化组织(ITU-T for ITU Telecommunication Standardization Sector), 它是国际电信联盟管理下的专门制定远程通信相关国际标准的组织。ITU-T下属的第16研究组( ITU-T Study Group 16),又称为VCEG(Video Coding Experts Group )。它制定的标准有H.261、H.263、H.263+等,对于目前流行最广的,影响也是最大的H.264和H.265也有部分贡献。
  • ISO/IEC(MPEG)
    国际标准化组织(ISO)是由各国标准化团体(ISO成员团体)组成的世界性的联合会,负责各种标准的制定。ISO/IEC下属的ISO/IEC JTC 1 SC 29 / WG 11组织,又称为MPEG(Moving Picture Experts Group)。它制定的关于视频编码方面标准有MPEG-1、MPEG-2、MPEG-4等。并且已经制定出来了最新的MPEG-7,并且计划公布MPEG-21。
  • JVT
    联合视频小组JVT( Joint Video Team )成立于2001年,由来组VCEG和MPEG的视频编码专家组成,旨在开发高级视频编码规范。主要的工作成果是ITU-T Rec. H.264 | ISO/IEC 14496-10,即H.264/AVC/MPEG-4 part 10。
  • JCT-VC
    视频编码联合协作团队JVT-VC(Joint Collaborative Team on Video Coding),是由VCEG和MPEG于2010年成立的视频编码专家组,旨在开发HEVC(High Efficiency Video Coding )标准。HEVC标准与当时最先进的AVC标准相比,新一代视频编码标准将进一步降低高质量视频编码所需的数据速率的50%。主要成果是H.265/HEVP part 2

视频的编解码格式
  • JPEG

1986 年, ISO 和 CCITT 成立了联合图像专家组(Joint(ITU+ISO) Photographic Experts Group , JPEG),研究连续色调静止图像压缩算法国际标准, 1992 年 7 月通过了 JPEG 标准。

  • MPEG

1988 年 ISO/IEC 信息技术联合委员会成立了活动图像专家组(MPEG, Moving Picture Expert Group)。 1991 年公布了 MPEG-1 视频编码标准, 1994 年 11 月,公布了 MPEG-2 标准 。

  • H.263

1995 年, ITU-T 推出 H.263 标准,用于低于 64 Kbps 的低码率视频传输 。

  • MPEG-4

1999 年 12 月份, ISO/IEC 通过了”视听对象的编码标准”——MPEG-4,它除了定义视频压缩编码标准外,还强调了多媒体通信的交互性和灵活性。

  • H.264/AVC

2003 年 3 月, JVT正式公布了 H.264/AVC(Advanced Video Coding)视频压缩标准,H.264/AVC/MEPG-10 part 10是MPEG-4标准的一部分(MPEG-4 part10)。H.264能够在低码率情况下提供高质量的视频图像,在较低带宽上提供高质量的图像传输;H.264可以根据不同的环境使用不同的传输和播放速率,并且提供了丰富的错误处理工具,可以很好的控制或消除丢包和误码。

  • H.265/HEVC

2013年6月和11月, ITU-T 和 ISO/IEC 分别正式公布了新一代视频压缩标准H.265/HEVC(High Efficiency Video Coding)/MPEG-H part 2,H.265旨在在有限带宽下传输更高质量的网络视频,与H.264相比,同样的视觉质量的视频只占用一半的空间,仅需原先的一半带宽即可播放相同质量的视频,或者具有相同文件大小和比特率的视频可能看起来更好。

视频处理流程

视频的编解码格式

视频处理流程

​ 一 个基本的视频处理和通信系统通常包括采集、预处理、视频编码、通信、图像处理以及显示等几个步骤。

视频封装格式

视频文件格式(或者视频封装格式)是一种用于在计算机系统上存储数字视频数据的文件格式。视频格式实质是视频文件的编码方式,几乎都会使用有损压缩的方式来存储视频,以减小文件的大小。

​ 一个视频文件通常由包含视频编码格式(如VP9)的视频数据和音频编码格式(如Opus)的音频数据的容器(例如Matroska格式)组成。容器还可以包含同步信息、字幕和元数据(如标题)等。视频文件容器内的编码(encode)的视频和音频称为本质(essence)。

​ 视频封装格式就是将已经编码处理的视频数据音频数据以及字幕数据按照一定的方式放到一个文件中。我们现在看到的大部分视频文件,除了视频数据以外,还包括音频、字幕等数据,为了将这些信息有机地组合在一起,就需要一个容器进行封装,这个容器就是封装格式。严格意义上说,我们通常所说的是视频格式,指的就是视频封装格式

​ 编码格式与封装格式的名称有时是一致的,例如MPEG、WMV、DivX、XviD、RM、RMVB等格式,既是编码格式,也是封装格式;有时却不一致,例如MKV是一种能容纳多种不同类型编码的视频、音频及字幕流的”万能”视频封装格式,同样以mkv为扩展名的视频文件,可能封装了不同编码格式的视频数据。

​ 目前常见的视频封装格式如下:

视频的编解码格式

视频编码格式

​ 视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另 一种视频格式文件的方式。视频编码格式来源于有关国际组织、民间组织和企业制定的视频编码标准。研究视频编码的主要目的是在保证一定视频清晰度的前提下缩小视频文件的存储空间。

​ 由于视频编码的主要任务是缩小视频文件的存储空间,因此,视频编码又称视频压缩编码或视频压缩,简单地说就是去除视频数据中的冗余信息。可以对视频或音频进行编码(encode)和解码(decode )的程序(或硬件)称为编解码器( codec)。

​ 目前常见的视频编解码格式如下

视频的编解码格式

视频编解码器,视频容器和视频文件格式之间的区别

​ 视频文件由两部分组成:编解码器(codec)和容器( container)。

​ 视频编解码器是用于对视频进行编码和解码的协议(单词编解码器来自” enCOde / DECode”)。常见的编解码器包括H.264,MPEG-4和DivX。精心设计的编解码器具有很高的效率,或者可以在减小文件大小的同时保持质量。

​ 容器(文件)格式(file format)是文件元数据和数据结构的定义,不包括视频的实际编码方式(编解码器确定)。容器文件保存使用编解码器编码的元数据和压缩视频数据。容器格式通常也称为”格式”,并反映在文件的扩展名中。常见的容器格式括.AVI,.MP4和.MOV。容器格式可以与不同的编解码器配对,这些编解码器会影响文件兼容的设备和程序。

视频的编解码格式

容器格式(container format)与编解码格式(codec format)

  • 实例说明

下面使用 ffmpeg 音视频处理库解析一段包含语音信息的视频片段,并输出相应的编解码和封装格式,完整代码如下

import ffmpeg

input_video = './data/rafting.avi'

if __name__ == "__main__":

    probe = ffmpeg.probe(input_video)

    video_stream_info = probe["streams"][0]
    audio_stream_info = probe["streams"][1]
    format_info = probe["format"]
    # show video codec info
    print("codec_type: {0} | codec_name: {1}| codec_long_name: {2}".format(video_stream_info["codec_type"],
                                                                           video_stream_info["codec_name"],
                                                                           video_stream_info["codec_long_name"]))
    # show audo codec info
    print("codec_type: {0} | codec_name: {1}| codec_long_name: {2}".format(audio_stream_info["codec_type"],
                                                                           audio_stream_info["codec_name"],
                                                                           audio_stream_info["codec_long_name"]))
    # show container(encapsulation) format
    print("filename:{0} | format_name: {1} | format_long_name: {2}".format(format_info["filename"],
                                                                           format_info["format_name"],
                                                                           format_info["format_long_name"]))

输出结果

codec_type: video | codec_name: mpeg4| codec_long_name: MPEG-4 part 2
codec_type: audio | codec_name: mp3| codec_long_name: MP3 (MPEG audio layer 3)
filename:./data/rafting.avi | format_name: avi | format_long_name: AVI (Audio Video Interleaved)

容易得到,文件的的视频流编解码格式为 MPEG-4 part 2;文件的的音频流编解码格式为 MP3 (MPEG audio layer 3),文件的的(封装)格式为 AVI (Audio Video Interleaved)。

补充

视频码率

​ 视频码率(bit rate)就是数据传输时单位时间传送的数据位数,一般我们用的单位是kbps即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。

码率计算公式:

视频的编解码格式

码率的单位:

  • bps
    比特率表示每秒的比特(bit)数,单位视频的编解码格式 。bps是视频的编解码格式的非标准缩写, 其中b代表bit, p表示percent(视频的编解码格式 ), s表示second。具体的换算公式如下

视频的编解码格式

注意:这里为近似计算,在真实的情况中响应的倍数为1024。

  • Bps
    我们可能还会遇到另一种格式的单位$Bps$,表示每秒的字节(Byte)数, 1 字节对应8比特视频的编解码格式 , 容易得出

视频的编解码格式

同理,也可以换算成对应的单位

  • 实例计算

对于CD格式音频:使用

视频的编解码格式 的采样率, 每个采样深度为 视频的编解码格式 ,2个信道。

码率的计算结果如下:

视频的编解码格式

音频数据长度(不包括文件头或其他元数据)的总的大小可以使用以下公式计算:

视频的编解码格式

以字节(byte)为单位的大小通过以位(bit)为单位的大小除以8得到:

视频的编解码格式

因此对于一个80分钟(

视频的编解码格式 )的音频数据,所占的存储空间的大小计算如下:

视频的编解码格式

参考资料

Original: https://www.cnblogs.com/sddai/p/15762778.html
Author: stardsd
Title: 视频的编解码格式

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/547543/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • docker学习:docker三要素

    镜像 docker 镜像(image)就是一个 只读的模板。镜像可以用来创建docker容器,一个镜像可以创建很多容器 容器 docker 利用容器(Container)独立运行的…

    技术杂谈 2023年7月10日
    077
  • Java-泛型

    泛型出现的原因 Java的泛型是在JDK1.5开始才加上的。在此之前的Java是没有泛型的。没有泛型的Java使用起来给人感觉非常的笨重,为了体会泛型带来的好处,来看看如果没有泛型…

    技术杂谈 2023年7月11日
    063
  • 阿里云 EMAS Serverless 重磅发布

    EMAS Serverless 是阿里云提供的基于Serverless技术的一站式后端开发平台,为开发者提供高可用、弹性伸缩的云开发服务,包含云函数、云数据库、云存储、静态网站托管…

    技术杂谈 2023年7月11日
    076
  • MySQL学习-下载jar包

    https://blog.csdn.net/Milan__Kundera/article/details/81182757 这个链接复制到浏览器查看 Original: https…

    技术杂谈 2023年6月21日
    075
  • 一些代码规则

    一些关于底层的代码问题 进制换算的代码 进制(在数字前加对应字母):二进制0b十进制无八进制0十六进制0x 调试 可以进行对单一代码进行运算确认是否有bug 最好完全避免使用浮点数…

    技术杂谈 2023年6月21日
    097
  • Mysql的知识梳理

    数据准备: –建表 create table customer_jia(CID int(4), Cname varchar(20), Csex varchar(2), …

    技术杂谈 2023年7月25日
    067
  • 【转】iOS AVPlayer的那些坑

    这次主要是总结和记录下视频播放遇到的坑,视频播放采用的是AVPlayer这个控件,语法大致如下: 一般说来,这里要监听AVPlayerItem的status属性: 如果是AVPla…

    技术杂谈 2023年6月1日
    096
  • 京准发布,PTP1588(NTP卫星授时服务器)使用说明书

    京准发布,PTP1588(NTP卫星授时服务器)使用说明书 京准发布,PTP1588(NTP卫星授时服务器)使用说明书 安徽京准电子科技官微——ahjzsz 1、装置简介 卫星时间…

    技术杂谈 2023年6月21日
    089
  • 老杜带你学Ajax,轻松掌握ajax底层实现原理

    课程导读 原生的ajax虽然在实际开发中很少编写,但如果想将js高级框架底层学明白,那ajax的原理是必须要求精通的。 本套ajax视频对ajax底层实现原理讲解非常透彻,对aja…

    技术杂谈 2023年7月25日
    081
  • 哈夫曼编码解码(数据结构实验)

    哈夫曼树 定义 定义:带权路径长度WPL最小的二叉树称作哈夫曼树,又叫最优二叉树 节点的带权路径长度为:从该节点到树根之间的路径长度与节点上的权的乘积 树的带权路径长度为:所有叶子…

    技术杂谈 2023年7月11日
    0104
  • Netty源码分析之ChannelPipeline(四)—出站事件的传播

    上篇文章中我们梳理了ChannelPipeline中入站事件的传播,这篇文章中我们看下出站事件的传播,也就是ChannelOutboundHandler接口的实现。 1、出站事件的…

    技术杂谈 2023年7月25日
    070
  • vue添加项目路径

    使用vue开发的项目,有的时候可能会需要添加项目路径,比如需要将vue项目作为子系统挂接在别的系统下,这时候就需要一个约定好的项目路径,才能使当前vue项目的所有资源路径能被正确识…

    技术杂谈 2023年6月1日
    099
  • Linux 配置Java环境变量

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 注:目前在官网下载的时候需要登陆,这边分享一个账号,方便下载 账号:2696671285@qq.com密码:Ora…

    技术杂谈 2023年7月11日
    076
  • Host-Only模式下虚拟机无法联网问题

    环境: 镜像:Linux CentOS7——————————…

    技术杂谈 2023年6月21日
    098
  • 用实例讲解RSA加密算法(精)

    RSA是第一个比较完善的 公开密钥算法,它既能用于加密,也能用于数字签名。RSA以它的三个发明者Ron Rivest, Adi Shamir, Leonard Adleman的名字…

    技术杂谈 2023年5月31日
    079
  • 使用 async-await 实现一个请求失败自动重新请求的函数

    在项目开发中, 需要拉取 GA 数据放到自己的数据库中, 用于做更定制化的数据分析和图表等. 但是因为数据较多, GA 一次性只能取得 10w 条数据, 所以需要多次请求才能获取到…

    技术杂谈 2023年6月21日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球