音视频基础——视频基础知识
感情中特能折腾的人,很多都是之前恋情里受过创伤的人。人总有一种“补偿情结”,希望把之前吃过的亏在日后一股脑儿地补回来。那些陈年旧帐就这样算到了新人头上。殊不知,成熟的爱,是伤口处开出的玫瑰。容得下委屈的,才留得住真爱。——苏芩
文章目录
- 一、视频格式
- 二、视频协议
- 三、视频流
- 1. 颜色空间
- 2. 采样率
- 3、编码/存储格式
- 四、视频编解码
- 1、视频编码方式
- 2、帧率(FPS)
- 3、分辨率(Resolution)
- 4、码率(BPS)
- 参考
一、视频格式
我们经常在各大视频网站上(如哔哩哔哩、腾讯视频)观看视频,我们也经常在电影天堂上下载电影,我们偶尔会把他们保存到本地,我们会看到我们保存的文件格式都是.avi、.mp4、.mkv之类的文件,我们在网络直接观看就是观看的视频流,保存到本地的文件都是各种视频文件
本地视频文件常见有MP4、MKV、AVI等,这些都是什么?有什么区别?
我们在解答这个问题之前,我们需要引入一个名词:视频封装格式,简称 视频格式,我们有时候也叫容器
常见的视频格式如下:
视频文件格式 | 视频封装格式 |
---|---|
.avi | AVI(Audio Video Interleaved) |
.wmv、.asf | WMV(Windows Media Video) |
.mpg、.mpeg、.vob、.dat、.3gp、.mp4 | MPEG(Moving Picture Experts Group) |
.mkv | Matroska |
.rm、.rmvb | Real Video |
.mov | QuickTime File Format |
.flv | Flash Video |
二、视频协议
在腾讯视频、哔哩哔哩网上看的视频,与本地播放的MP4、MKV、AVI文件,有什么区别?
在回答这个问题,我们需要解释视频协议
『视频协议』是针对网络流媒体而言的,也就是只有在有网络时通过浏览器或者移动端APP才能看到的视频,目前常见的协议有RTSP、RTMP、HLS、HTTP等。笔者短暂地接触过GStreamer开发,在连接到RSTP视频时,发现除了视音频流和metadata之外,还携带了播放的信令。
而剥开视频协议的外壳之后我们后面会介绍视频流本身
三、视频流
就视频流而言,相信大家平时一定经常听到类似“h264码流”、“yuv流”、“编码流”、“解码流”,“原始流”、“裸流”,“压缩后的流”或者“未压缩的流”等等。归纳而言,提到『视频流』的时候,一定只有两种形式:
- 经过压缩算法压缩的流数据,称为『编码流』,又因为目前压缩/编码算法以H264为主,因此也常常称为『H264码流』。
- 未经压缩的流数据,是解码后的流数据,称为『原始流』,可以想象视频是由一幅一幅在时间上连续的“图像”组成的,而因为视频内部的“图像”是『YUV』(后文将介绍),因此也常常称为『YUV流』。
我们这里会引入一个概念叫做帧,『帧』是视频流媒体领域的核心
『帧』,可以联想成我们平时看到的一幅幅“图像”,只不过我们平时接触的图片是『RGB』格式的,而视频帧通常是『YUV』格式的。既然提到了『RGB』和『YUV』,那么就来了解下帧的格式『YUV』,
- 在达到最大压缩率的情况下,能够保证对人眼感知的失真度最小。『YUV』的三通道中,其中"Y"表示明亮度(Lumina nce或Luma),也就是灰阶值;而"U"和"V"表示的则是色度(Chrominance或Chroma)。有一堆科学家研究发现,人眼对UV的敏感度最低,因此可以极大比例地压缩UV两个通道的数值。见视频编解码学习一 yuv格式。
- 为了向前兼容黑白电视。这个就涉及历史原因了,非常推荐零基础入门音视频开发。历史上在制定视频帧格式时,是有人提出过用RGB的,最终决定用YUV
1. 颜色空间
“Y”表示明亮度(Luminance、Luma),“U”和“V”则是色度(Chrominance)、浓度(Chroma)。这里表示的是色彩空间的基,即类似XYZ坐标系的一种色标表示基准,也就是说每一种颜色可以通过三维向量<yi,ui,vi>来表示。与其类似的还有RGB颜色空间、HSV颜色空间等。下图来自How does the YUV color coding work?
随着通信行业的发展,实际应用之多之复杂,导致『YUV』衍生出了一个大家族。接触视频领域的一定听说过YCbCr,甚至还有YPbPr、YIQ等。它们有的已经被时代淘汰,有的现在还在使用。之所以出现『YUV』大家族,完全是因为实际电路系统之间的差异,导致要从『YUV』转到『RGB』空间,实际对应的转化系数是有些许差异的,于是各个部门开始制定各种规范,才有了我们现在看到的『YUV』大家族。
YCbCr是专门针对数字电路而诞生的;YPbPr则是模拟电路。但是,现在是数字时代,所以为了模拟电路而生的YPbPr已经逐渐被淘汰了,而YCbCr还一直发挥着作用。因此现在,YCbCr有时也会被简单地称为/认为『YUV』。
2. 采样率
读者可能听说过“YUV444”,“YUV422”,“YUV420”,到这里可能会纳闷:“YUV不是颜色空间吗?为什么后面还会跟着一串数字?” 因为当你看到YUV后面跟着一串数字的时候,『YUV』已经不再是颜色空间的基的含义了,而是意味着在原始『YUV流』上的采样。
在以前流媒体刚刚兴起时,还没有什么4G/5G,当时为了减小网络传输的带宽的压力,可谓做了种种努力。除了编码/压缩之外,YUV采样率也是一种。
444,422和420是三种『YUV』(在数字电路中指代YCbCr)的采样,三位数分别代表Y\U\V(数字电路中为Y\Cb\Cr,本段后同)通道的抽样比。所以可以理解,444是全采样;而422是对Y进行全采样,对U\V分别进行1/2均匀采样。有趣的问题来了,420难道是完全丢弃了V通道/分量数据嘛?答案是否定的。
首先,必须要搞明白一个问题,一帧图像是由一个个像素组成的矩形,譬如4x4的尺寸的图像,就是由16个像素点组成的。在平时接触的『RGB』图像中,每个像素必然至少由R\G\B这三个通道组成的(有的图像还有\alpha分量),每个分量的取值一般都是[0,255],也就是[20,28],因此经常说一个像素占用3字节(如果还有其他分量,比如RGBA,就另当别论)。『YUV』图像同理,它的每个像素是由Y\U\V组成的。
接下来,从整张图像宏观考虑采样问题。还是以4X4的图像为例,444的如下图2-1,这个是形象化成图像的样子,实际在机器内存储并不是这样,具体可以参见博客《图像原始格式一探究竟》。422和420分别如下图2-2和2-3。
图2-1. YUV444采样示意图
图2-1对应YUV444采样,即全采样,图示中可以看出每个像素中的Y\U\V通道都保留下来了,一般来说YUV444太大了,因此很少使用。
图2-2. YUV422采样示意图
图2-2对应YUV422采样,这种采样方式是:每个扫描线或者说每行相邻2个像素,只取1个像素的U\V分量。此外,可以计算出来,每个像素占用的大小为原来的2/3,因此说YUV422是YUV444的2/3大小。
这个时候就有一个问题,在『YUV』转『RGB』时,被抽走了U\V分量的像素要怎么办呢?做法很简单,就是相邻2个像素的Y分量公用保留着的U\V分量。
图2-2. YUV420采样示意图
图2-3对应YUV420采样,这种采样方式是:隔行进行YUV422每行采样的办法,即相邻2个像素只取1个像素的U\V分量;下一行丢弃所有的U\V分量。此外,可以计算出来,每个像素占用的大小为原来的1/2,因此说YUV420是YUV444的1/2大小。恢复U\V分量的办法同YUV422,只不过这里是2X2的矩阵共享保留着的U\V分量。
这种设计办法真的很巧妙!前文提到的**“人眼对UV的敏感度最低,因此可以极大比例地压缩UV两个通道的数值”**,且对于图像而言,相邻的区域像素的色彩、饱和度一般非常接近,因此这种以2X2矩阵为基本单位,只保留1组U\V分量合情合理。
3、编码/存储格式
大家肯定还听说过YV12、YU12、NV12、NV21吧,看到这里是不是又纳闷:“后面的数字怎么变成2个了?而且前面的英文字母还变了?”
以上统称为『视频的存储格式』,也就是说,计算机是如何存储一帧视频的。
首先,『视频的存储格式』总分为两大类:『打包格式(packed)』和『平面格式(planar)』。前者又被称作『紧凑格式(packed)』。其实除此之外还有『半平面模式(Semi-Planar)』,估计是使用的比较少,因此在很多文章中常被忽略。
笔者很感兴趣,为什么会出现『打包格式』和『平面格式』两大派系,网上搜了很多资料也没找到原因,博客【音视频基础】:I420、YV12、NV12、NV21等常见的YUV420存储格式提到了需要约定存储格式,但也没提到为什么会分成这两种。要么就是派系之争,类似贝叶斯学派和频率学派;要么就是实际应用中逐渐衍生出这两大格式。时至今日,这两个格式还在被使用,因此对于多媒体开发者们都有必要了解。
『打包格式』是把Y\U\V分量交叉存储,『平面格式』则是把Y\U\V严格分开存储,『半平面模式』介于两者之间,Y分量分开存储,U\V交叉存储。
以下图为例说明『打包格式』、『平面格式』和『半平面模式』应该是非常清楚的,图摘自博客YUV格式初探:
图3-1. YUV420P存储示意图
图3-2. YUV420SP存储示意图
图3-3. YUV420Packet存储示意图
四、视频编解码
1、视频编码方式
- 视频编码的作用: 将视频像素数据(RGB,YUV 等)压缩成视频码流,从而降低视频的数据量。
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 |
H.264 | MPEG/ITU-T | 2003 | 各个领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
常见的帧名词
2、帧率(FPS)
『帧率』,FPS,全称Frames Per Second。指每秒传输的帧数,或者每秒显示的帧数,一般来说,『帧率』影响画面流畅度,且成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。一个较权威的说法:
当视频帧率不低于24fps时,人眼才会觉得视频时连贯的,称为“视觉暂留”现象。
因此,才有说法:尽管『帧率』越高越流畅,但在很多实际应用场景中24fps就可以了。
3、分辨率(Resolution)
『分辨率』,也常被俗称为『图像的尺寸』或者『图像的大小』。指一帧图像包含的像素的多少,常见有1280x720(720P),1920X1080(1080P)等规格。『分辨率』影响图像大小,且与之成正比:『分辨率』越高,图像越大;反之,图像越小。
4、码率(BPS)
『码率』,BPS,全称Bits Per Second。指每秒传送的数据位数,常见单位KBPS(千位每秒)和MBPS(兆位每秒)。笔者认为这个概念真正要理解起来还是需要好好说明的,网上一说:“『码率』与体积成正比:码率越大,体积越大;码率越小,体积越小”;另一说:“『码率』越大,说明单位时间内取样率越大,数据流精度就越高,这样表现出来的的效果就是:视频画面更清晰画质更高”;还有说法是:”『码率』就是『失真度』“。但是笔者有一段时间就是不理解,每秒传输的数据越大,为什么必然就对应画面更清晰?还有体积怎么理解呢?且看下文”三者之间的关系“。
『帧率』『分辨率』和『码率』三者之间的关系
最理想的情况是画面越清晰、越流畅是最好的。但在实际应用中,还需要结合硬件的处理能力、实际带宽条件选择。高『帧率』高『分辨率』,也就意味着高『码率』,也意味着需要高带宽和强大的硬件能力进行编解码和图像处理。所以『帧率』和『分辨率』应该视情况而定。
要说三者之间的关系,其实就是对于『码率』的理解。在**码率(BPS)**概念中提到了几段摘自网上的说法,说的都太模糊了,笔者直到阅读了文章Video Bitrate Vs. Frame Rate,才真的理解了『码率』。
参考
https://zhuanlan.zhihu.com/p/61747783
音视频基础——视频基础知识相关推荐
- 音视频开发入门基础知识(视频入门篇)
RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 一.前言 二.视频采集和显示 三.视频常见的格式 四.RGB转YUV和YUV转R ...
- 音视频开发入门基础知识(音频入门篇)
RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 前言 音频的采集和播放 音频常见的格式 音频的编码 前言 在音视频开发入门基础知 ...
- 【音视频开发】基础知识:视频简介
在学习了⾳频的相关概念之后,现在开始讨论视频,视频是由⼀幅幅图像组成的,所以要学习视频还得从图像学习开始. 与⾳频的学习⽅法类似,视频的学习依然是从图像的物理现象开始回顾,这⾥需要回顾⼀下⼩学做过 ...
- 视频相关的理论知识与基础概念
本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下: 视频 分辨率 比特率 采样率 帧率 视频编码 编码标准 视频封装格式 视频解码 视频播放原理 视频与流媒体 1.视频 根据人眼视觉暂留 ...
- 音视频面试必备:一文搞懂视频相关的基础概念
1.引言 随着移动互联网的普及,实时音视频技术已经在越来越多的场景下发挥重要作用,已经不再局限于IM中的实时视频聊天.实时视频会议这种功能,在远程医疗.远程教育.智能家居等等场景也司空见惯. 虽然实时 ...
- Android音视频开发---0基础入门准备篇
文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...
- Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片
Android 音视频开发 上一篇文章:使用 imageview绘制一张图片 任务一 SurfaceView绘制一张图片 文章目录 Android 音视频开发 前言 一.surfaceview是什么? ...
- 音视频开发-视频基础
1 视频产生 视频本质就是一组连续播放的图像,所以研究视频离不开对于图像的研究.而图像又是由众多的色彩构成,这里就会涉及到图像的最小单元一个像素点的构成,像素点一般是由RGB三种颜色组成. 1.1 R ...
- 视频编码零基础入门(1):视频编解码之理论概述
1.前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关 ...
最新文章
- sqlite数据库实现字符串查找的方法(instr,substring,charindex替代方案)
- Grid布局和Flex布局
- bzoj4788: [CERC2016]Bipartite Blanket
- 心理学专业转用户体验_用心理学设计奇妙的用户体验
- 50-00-040-配置-Flink Configuration简介
- python token flask_flask 实现token机制
- python语言程序设计实践教程答案上海交通大学_Python推荐书籍从入门到进阶(珍藏版)...
- java 使用的钩子_Java 钩子程序
- windows环境下布置定时任务
- 配流06—frank_wolfe配流算法
- Linux的cd ~/.什么意思?
- 4234最小差值生成树
- 高亮蓝光油溶性ZnCdS/ZnS量子点(硫化锌镉/硫化锌)
- 计算机技术员自我介绍,技术员的自我介绍范文
- 写一个GAMEBOY的模拟器
- 解决: Error Code: 2013. Lost connection to MySQL server during query
- 计算机视觉最新进展概览(2021年8月1日到2021年8月7日)
- 如何用Yii2编程:ActiveRecord
- 【OpenVINO】OpenVINO 2022.1 安装教程(Windows)
- BBEdit—HTML文本编辑器
热门文章
- SFR算法详解(一)——基础理论
- Nginx反向代理服务器(请求转发)
- 利用keytools 生成keystore
- modprobe vboxsf failed问题修复
- 电子档案归档,如何做到“来源可靠、程序规范、要素合规”
- 文本框时间为日历格式
- 3【源码】数据可视化:基于 Echarts +Java SpringBoot 实现的动态实时大屏范例-物联网
- hdu2066 一个人的旅行 floyd
- 常用命令_LINUX三剑客之文本处理(一):分别利用awk和sed命令添加列文本
- UnityAPI.WheelCollider轮碰撞器(Yanlz+API+WheelCollider+motorTorque+brakeTorque+steerAngle+GetWorldPose+)