视频的编解码格式
文章目录
- 视频的编解码格式
- 概念术语
- 视频处理流程
- 视频封装格式
- 视频编码格式
- 视频编解码器,视频容器和视频文件格式之间的区别
- 补充
- 视频码率
- 参考资料
视频的编解码格式
概念术语
-
两大组织主导视频压缩的组织及其联合(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 |
---|---|
.WEBM | |
.MPG, .MP2, .MPEG, .MPE, .MPV | MPEG |
.OGG | OGGVobis(oggVorbis) |
.MP4, .M4P, .M4V | MPEG |
.AVI | Microsoft |
.WMV | Microsoft |
.MOV,.QT | Apple |
.FLV, .SWF | Adobe |
AVCHD | Sony & Panasonic |
视频编码格式
视频编码方式就是指通过特定的压缩技术,将某个视频格式的文件转换成另 一种视频格式文件的方式。视频编码格式来源于有关国际组织、民间组织和企业制定的视频编码标准。研究视频编码的主要目的是在保证一定视频清晰度的前提下缩小视频文件的存储空间。
由于视频编码的主要任务是缩小视频文件的存储空间,因此,视频编码又称视频压缩编码或视频压缩,简单地说就是去除视频数据中的冗余信息。可以对视频或音频进行编码(encode)和解码(decode )的程序(或硬件)称为编解码器( codec)。
目前常见的视频编码格式如下
视频编解码格式 | Corporation/Organization |
---|---|
MPEG-1 | MPEG |
MPEG-2 | MPEG |
MPEG-4 | MPEG |
H.264 | JVT |
H.265 | JCT-VC |
WMV | Microsoft |
MJEPG | MJEPG(Motion Joint Photographic Experts Group)/MJPG(缩写) |
DivX/XviD | MPEG-4的衍生编码标准(后者是免费版) |
VP9 |
视频编解码器,视频容器和视频文件格式之间的区别
视频文件由两部分组成:编解码器(codec)和容器( container)。
视频编解码器是用于对视频进行编码和解码的协议(单词编解码器来自“ enCOde / DECode”)。常见的编解码器包括H.264,MPEG-4和DivX。精心设计的编解码器具有很高的效率,或者可以在减小文件大小的同时保持质量。
容器(文件)格式(file format)是文件元数据和数据结构的定义,不包括视频的实际编码方式(编解码器确定)。容器文件保存使用编解码器编码的元数据和压缩视频数据。容器格式通常也称为“格式”,并反映在文件的扩展名中。常见的容器格式括.AVI,.MP4和.MOV。容器格式可以与不同的编解码器配对,这些编解码器会影响文件兼容的设备和程序。
-
实例说明
下面使用 ffmpeg 音视频处理库解析一段包含语音信息的视频片段,并输出相应的编解码和封装格式,完整代码如下
import ffmpeginput_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 infoprint("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) formatprint("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/s。bps是 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 bytes≈847 MB
参考资料
- 参考资料一
- 参考资料二
- 参考资料三
- 参考资料四
- 参考资料五
- 参考资料六
- 参考资料七
相关文章:

视频的编解码格式
文章目录 视频的编解码格式概念术语视频处理流程视频封装格式视频编码格式视频编解码器,视频容器和视频文件格式之间的区别补充视频码率 参考资料 视频的编解码格式 概念术语 两大组织主导视频压缩的组织及其联合(joint)组织 ITU-T(VCEG) ITU-T的中文名称是国际电信…...

网络资源模板--Android Studio 实现简易新闻App
目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易新闻App 二、项目测试环境 三、项目详情 登录页 用户输入: 提供账号和密码输入框,用户可以输入登录信息。支持“记…...

LabVIEW提高开发效率技巧----离线调试
离线调试是LabVIEW开发中一项重要的技巧,通过使用Simulate Signal Express VI生成虚拟数据,开发者能够有效减少对实际硬件的依赖,加速开发过程。这种方法不仅可以提高开发效率,还能降低成本,增强系统的灵活性。 离…...

6N137S1取反电路图
文章目录 一、前言二、6N137S1性能介绍三、应用电路图 一、前言 在硬件电路设计中需要用到隔离电路,但此引脚输出为WS2812的信号,频率有840khz,所以需要使用逻辑光耦,选用6N137S1光耦,速率能达到10Mhz,能满…...

Nullinux:一款针对Linux操作系统的安全检测工具
关于Nullinux Nullinux是一款针对Linux操作系统的安全检测工具,广大研究人员可以利用该工具针对Linux目标设备执行网络侦查和安全检测。 该工具可以通过SMB枚举目标设备的安全状况信息,其中包括操作系统信息、域信息、共享信息、目录信息和用户信息。如…...

学会这 5 个 AI 神器做字体设计,保证让你私单接到爆!
最近我在浏览 AI 绘画的相关内容时,发现不少图像都是与字体相关的,而且其中一些呈现出的艺术特效很是让人眼前一亮。 放在之前,我们需要掌握一些专业技能、并花费大量时间才能设计出精致酷炫的艺术字,但是现在却可以轻松用文本直…...

《Vue3 踩坑》expose 和 defineExpose 暴露属性或方法注意事项
选项式写法 使用 选项式API - 状态选项 - expose 一定要注意: 接下来,进一步看示例说明: 设置 expose 仅显示列出的属性/方法才能被父组件调用;代码第 2 行,父组件可访问属性 a 和 方法 myFunc01,不可访…...

10.13论文阅读
通过联合学习检测和描述关键点增强可变形局部特征 摘要 局部特征提取是计算机视觉中处理图像匹配和检索等关键任务的常用方法。大多数方法的核心理念是图像经历仿射变换,忽略了诸如非刚性形变等更复杂的效果。此外,针对非刚性对应的新兴工作仍然依赖于…...

六西格玛黑带项目:TBX-02无人机飞行稳定性提升——张驰咨询
一、项目背景与问题定义 TBX-02是该公司最新发布的消费级无人机,面向摄影爱好者和户外探险者。产品上市后,通过客户反馈和实际测试数据发现,该无人机在复杂飞行环境中,如强风或快速移动时,存在明显的飞行抖动和稳定性…...

git clone 国内镜像
比如 git clone https://github.com/HKUST-Aerial-Robotics/A-LOAM.git 改成 git clone https://gitclone.com/github.com/HKUST-Aerial-Robotics/A-LOAM.git...
【服务器虚拟化】
服务器虚拟化是一种将一台物理服务器划分为多个虚拟服务器的技术,每个虚拟服务器都可以独立运行操作系统和应用程序。下面是一个详细的教程,以KVM虚拟化为例,介绍了具体的操作步骤和执行命令。 准备工作 a. 确保你的服务器支持虚拟化技术&…...

【RAG】aiops第一名方案-EasyRAG:自动网络运营的高效检索增强生成框架
来看一个RAG比赛方案,提出了一个名为EasyRAG的框架,用于自动化网络操作的检索增强生成。该框架旨在解决网络操作中信息检索和生成效率低、准确性差的问题。研究难点包括:如何在保证准确性的前提下提高检索和生成的效率;如何实现简…...

3款备受好评的电脑数据恢复软件,赶紧收藏以备不时之需
在日常工作和生活中,电脑数据丢失是许多人都会遇到的问题。无论是误删文件、硬盘格式化,还是系统崩溃,都可能导致重要数据的丢失。所以,好用的数据恢复软件必不可少。 但在如今的市场上数据恢复软件琳琅满目,它们在恢复…...
.net core 实现多线程方式有哪些
在 .NET Core 中,有多种方式可以实现多线程编程。这些方式包括使用 Thread 类、Task 和 Parallel 类库。每种方法都有其适用场景和优缺点。下面我将通过代码示例来展示这些不同的多线程实现方式。 1. 使用 Thread 类 Thread 类是 .NET 中最基本的多线程实现方式。…...

《Linux从小白到高手》综合应用篇:深入理解Linux磁盘及IO优化
1. 前言 其实磁盘优化和IO优化,我在前面的其他Linux调优博文中已经讲述过或者涉及过了,但是太过零碎,所以本篇就来集中深入讨论下Linux磁盘和IO调优。 2.磁盘调优 结合我多年的经验,本人认为磁盘调优最重要的是读写性能的提升和…...

【Linux】内存文件系统的I/O、重定向
文章目录 1. 系统中的文件2. 回顾C中的文件接口3. 文件类的系统调用3.1 open3.2 文件描述符 4. IO的基本过程5.重定向5.1 引入重定向5.2 系统中的重定向接口 6. 缓冲区问题7. 简单版shell的实现 1. 系统中的文件 在学习完Linux权限后,我们清楚的知道:文…...
力扣10.18
1463. 摘樱桃 II 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。 你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。 请你按照如下规则…...

cs木马图形化界面出现问题处理
一个月多月没用cs木马了,发现打开客户端之后显示不出图形化界面,且出现下面这样的报错。 、 最后发现是java版本的问题,kali的java自动更新了。把原来的openjdk11改到了openjdk23。 解决方法: 输入: sudo update-…...

数据结构与算法 - 树 #数的概念 #二叉树 #堆 - 堆的实现/堆排序/TOP-K问题
文章目录 前言 一、树 (一)、概念 1、树的定义 (二)、树的定义 1、树为什么是递归定义的? 2、如何定义树(如何表达一棵树) 解决方案一:假设我们得知该树的度 解决方案二:顺序表 解决方案三:左孩子右兄弟表示法 二、二叉…...

Git推送被拒
今天开发完成一个新的需求,将自己的分支合并到test分支后,推送到远程仓库,结果显示推送被拒: 原因是因为有人更新了test分支的代码,我在合并之前没有拉取最新的test分支代码,所以他提示我“推送前需要合并…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...
Mobile ALOHA全身模仿学习
一、题目 Mobile ALOHA:通过低成本全身远程操作学习双手移动操作 传统模仿学习(Imitation Learning)缺点:聚焦与桌面操作,缺乏通用任务所需的移动性和灵活性 本论文优点:(1)在ALOHA…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
MySQL 主从同步异常处理
阅读原文:https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主,遇到的这个错误: Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一,通常表示ÿ…...
41道Django高频题整理(附答案背诵版)
解释一下 Django 和 Tornado 的关系? Django和Tornado都是Python的web框架,但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架,鼓励快速开发和干净、实用的设计。它遵循MVC设计,并强调代码复用。Django有…...
算法250609 高精度
加法 #include<stdio.h> #include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char input1[205]; char input2[205]; int main(){while(scanf("%s%s",input1,input2)!EOF){int a[205]…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...

【电路笔记】-变压器电压调节
变压器电压调节 文章目录 变压器电压调节1、概述2、变压器电压调节3、变压器电压调节示例14、变压器电压调节示例25、变压器电压调节示例36、总结变压器电压调节是变压器输出端电压因连接负载电流的变化而从其空载值向上或向下变化的比率或百分比值。 1、概述 电压调节是衡量变…...