视频的编解码格式

文章目录

  • 视频的编解码格式
    • 概念术语
    • 视频处理流程
    • 视频封装格式
    • 视频编码格式
    • 视频编解码器,视频容器和视频文件格式之间的区别
    • 补充
      • 视频码率
    • 参考资料


视频的编解码格式

概念术语

  • 两大组织主导视频压缩的组织及其联合(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和MEPG的视频编码专家组成,旨在开发高级视频编码规范。主要的工作成果是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为扩展名的视频文件,可能封装了不同编码格式的视频数据。

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

视频文件格式                   Corporation/Organization                   
.WEBMGoogle
.MPG, .MP2, .MPEG, .MPE, .MPVMPEG
.OGGOGGVobis(oggVorbis)
.MP4, .M4P, .M4VMPEG
.AVIMicrosoft
.WMVMicrosoft
.MOV,.QTApple
.FLV, .SWFAdobe
AVCHDSony & Panasonic

视频编码格式

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

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

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

视频编解码格式                   Corporation/Organization                   
MPEG-1MPEG
MPEG-2MPEG
MPEG-4MPEG
H.264JVT
H.265JCT-VC
WMVMicrosoft
MJEPGMJEPG(Motion Joint Photographic Experts Group)/MJPG(缩写)
DivX/XviDMPEG-4的衍生编码标准(后者是免费版)
VP9Google

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

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

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

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

  • 实例说明

    下面使用 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"],
        # show audo codec info                                                                      video_stream_info["codec_long_name"]))
        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即千位每秒。通俗一点的理解就是取样率,单位时间内取样率越大,精度就越高,处理出来的文件就越接近原始文件。

​ 码率计算公式:


码率 = 采样率 × 位深度 × 通道数 码率 = \text{采样率} \times \text{位深度} \times \text{通道数} 码率=采样率×位深度×通道数

码率的单位:

  • bps

    比特率表示每秒的比特(bit)数,单位 b i t / s bit/s bit/sbps是 b i t / s bit/s bit/s的非标准缩写, 其中b代表bit, p表示percent( / / /), s表示second。

    具体的换算公式如下
    1 K b p s = 1000 b p s = 1000 b i t / s 1 M b p s = 1000 K b p s = 1000000 b p s = 1000000 b p s 1 G b p s = 1000 M b p s = 1000000 K b p s = 1000000000 b p s 1Kbps = 1000bps = 1000 bit/s \\ 1Mbps = 1000Kbps = 1000000bps = 1000000bps \\ 1Gbps = 1000Mbps = 1000000Kbps = 1000000000bps 1Kbps=1000bps=1000bit/s1Mbps=1000Kbps=1000000bps=1000000bps1Gbps=1000Mbps=1000000Kbps=1000000000bps
    注意:这里为近似计算,在真实的情况中响应的倍数为1024。

  • Bps

    我们可能还会遇到另一种格式的单位 B p s Bps Bps,表示每秒的字节(Byte)数, 1 字节对应8比特$ Byte = 8bit $, 容易得出
    1 B p s = 1 B / s = 8 b i t / s = 8 b p s 1 Bps = 1 B/s = 8 bit/s = 8bps 1Bps=1B/s=8bit/s=8bps
    同理,也可以换算成对应的单位

  • 实例计算

    对于CD格式音频:使用 44.1 k H z 44.1kHz 44.1kHz的采样率, 每个采样深度为 16 b i t 16bit 16bit,2个信道。

    码率的计算结果如下:
    44100 × 16 × 2 = 1411200 b p s = 1411.2 K b p s = 1.4112 M b p s 44100 \times 16 \times 2 = 1411200bps = 1411.2Kbps = 1.4112Mbps 44100×16×2=1411200bps=1411.2Kbps=1.4112Mbps
    音频数据长度(不包括文件头或其他元数据)的总的大小可以使用以下公式计算:

bits_size = ( sample_rate × bit_depth × channels ) × time \text{bits\_size} = (\text{sample\_rate} \times \text{bit\_depth} \times \text{channels}) \times \text{time} bits_size=(sample_rate×bit_depth×channels)×time

以字节(byte)为单位的大小通过以位(bit)为单位的大小除以8得到:
b y t e _ s i z e = b i t _ s i z e 8 byte\_size = \frac{bit\_size}{8} byte_size=8bit_size

因此对于一个80分钟( 80 × 60 = = 4800 80\times 60 == 4800 80×60==4800)的音频数据,所占的存储空间的大小计算如下:
44 , 100 × 16 × 2 × 4800 8 = 846 , 720 , 000  bytes ≈ 847  MB {\displaystyle {\frac {44,100\times 16\times 2\times 4800}{8}}=846,720,000\ {\text{bytes}}\approx 847\ {\text{MB}}} 844,100×16×2×4800=846,720,000 bytes847 MB

参考资料

  • 参考资料一
  • 参考资料二
  • 参考资料三
  • 参考资料四
  • 参考资料五
  • 参考资料六
  • 参考资料七

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895587.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文翻译 | A Prompt Pattern Catalog to Enhance Prompt Engineering with ChatGPT (下)

I.事实核查表模式 1)意图和上下文:此模式的目的是确保LLM输出一个事实列表,这些事实存在于输出中,并构成输出中语句的重要组成部分。此事实列表有助于告知用户输出所基于的事实(或假设)。然后,用户可以对这…

python将照片集导出成视频

shigen坚持更新文章的博客写手,记录成长,分享认知,留住感动。个人IP:shigen 背景 一个安静的下午,看着电脑里乱七八糟的照片,有大有小,宽高不一,突然想找个方式把他们统一起来&…

求最大公约数(c语言)

先看题👇 我这里介绍的方法:辗转相除法: 最大公约数: 最大公约数是指同时能整除俩个或更多整数的最大正整数。 欧几里得算法就是求最大公约数的算法 求最大公约数涉及到一个数学原理的转换: 俩个数的最大公约数等于其中一个数和…

使用scss生成旋转圆圈

图片 html代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title>…

Windows电脑桌面如何弄个好用的提醒备忘录?

在这个充满挑战的时代&#xff0c;每个人都渴望成为更好的自己。然而&#xff0c;随着生活节奏的加快&#xff0c;我们时常发现自己陷入了各种琐事之中&#xff0c;难以脱身。为了不让重要的事情被遗漏&#xff0c;一款好的提醒备忘录工具就显得尤为关键。那么&#xff0c;Wind…

白嫖正版xshell和XFTP

在哪里可以下载正版免费的xshell和XFTP&#xff0c;并且还能够获得官网免费持久更新 白嫖步骤 首先直接在浏览器搜索xshell官网 点进官网之后直接点击下载 接着点击免费授权页面 进入之后就可以免费下载了 下载安装完成后填写用户名和邮箱并提交&#xff0c;这里就以xshell为…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网&#xff08;WLAN&#xff09;与IEEE 802.11 6.3 蓝牙与无线个域网&#xff08;WPAN&#xff09; 6.4 无线城域网&#xff08;WMAN&#xff09;与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络&#xff08;3G/4G/5G&…

【str_replace替换导致的绕过】

双写绕过 随便输入一个 usernameadmin&passwords 没有回显测试注入点 usernameadmin or 11%23&passwords 回显hello admin测试列数 usernameadmin order by 3%23&passwords测试回显位 usernameadmi union select 1,2,3%23&passwords 没有显示数据&#xff0c;推…

如何保证数据库和缓存双写一致性?

1. 如何保证数据库和缓存双写一致性&#xff1f; 在高并发情况下&#xff0c;如果有大量的请求直接访问到数据库&#xff0c;由于数据库是将数据存储到磁盘当中的&#xff0c;每次访问时需要将数据以页的形式读取到内存当中&#xff0c;并且建立数据库连接、查询数据库中的数据…

个人健康系统|个人健康数据管理系统|基于小程序+java的个人健康数据管理系统设计与实现(源码+数据库+文档)

个人健康数据管理系统 目录 基于小程序java的个人健康数据管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师…

Python基础08

目录 1.Object-Oriented Programming 2.类 2.1类的定义 2.2实例化对象(构造函数) 2.3self 2.4cls 2.5实例变量(也叫属性) 2.6类属性 2.5初始化方法 2.7类方法 2.8静态方法 3.继承 3.1单继承 3.2多继承 3.3覆盖(Override) 1.Object-Oriented Programming 一切皆…

RabbitMQ service is already present - only updating service parameters

Windows下卸载RabbitMQ之后,然后重新注册RabbitMQ服务的时候,报错以下信息: D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin>D:\software\rabbitmq-server-4.0.2\rabbitmq_server-4.0.2\sbin\rabbitmq-service.bat install RabbitMQ service is already …

动态规划-子数组系列——乘积最大子数组

1.题目解析 题目来源&#xff1a;152.乘积最大子数组——力扣 测试用例 2.算法原理 1.状态表示 由于题目给的数组中可以包含负数&#xff0c;因此求最大乘积有两种情况&#xff1a; a.负数乘以最小数得出最大乘积 b.整数乘以最大数得出最大乘积 所以需要两个表分别求出最大最…

MySQL 数据库迁移至达梦 DM8 常见问题

目录 如何让迁移到 DM 的表名大小写和 MySQL 保持一致 MySQL 迁移到 DM 报错&#xff1a;列[NAMES]长度超出定义 MySQL 迁移到 DM 报错&#xff1a;记录超长 索引错误 DM大小写敏感配置 表空间 新建用户 用户与模式的关系 省略模式名的优势 实际操作 如何让迁移到 DM…

【网络原理】——拥塞控制,延时/捎带应答,面向字节流,异常情况

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;拥塞控制&#xff08;重点&#xff09; 1&#xff1a;情境引入 2&#xff1a;解决方案…

【Docker】安装部署项目流程(Pycharm版)

安装部署步骤 1.准备项目 第一步要准备好你所需要部署的项目&#xff0c;确保在工作目录下所以程序.py文件正常调用并能正确运行 如上&#xff0c;main要在工作目录中能跑通&#xff0c;这里有一点需要注意 在IDE src不要标记为源代码根目录&#xff0c;观察一下是否能跑通代…

【计算机网络 - 基础问题】每日 3 题(五十)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

Java最全面试题->Java基础面试题->JavaSE面试题->面向对象面试题

面向对象 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.面向对象和面向过程的区别 面向对象&#xff1a; 优点&#xff1a;易维护&#xff0c;复用&#xff0c;扩展。面向对象…

解决DOTA-v2.0数据集上传结果至官网BUG: No space left on device

时间&#xff1a;2024.10.20 一、DOTA-v2.0数据集上传结果至官网BUG&#xff1a; No space left on device IOError at /evaluation1/ [Errno 28] No space left on device二、解决方法&#xff0c;法一 上传的结果文件太大了&#xff0c;把服务器磁盘占满了。 将结果中精度…

【算法】KMP字符串匹配算法

目录 一、暴力 二、KMP 2.1 思路 2.2 next数组 2.3 实现 2.4 例题 一个人能走的多远不在于他在顺境时能走的多快&#xff0c;而在于他在逆境时多久能找到曾经的自己。 …