感情中特能折腾的人,很多都是之前恋情里受过创伤的人。人总有一种“补偿情结”,希望把之前吃过的亏在日后一股脑儿地补回来。那些陈年旧帐就这样算到了新人头上。殊不知,成熟的爱,是伤口处开出的玫瑰。容得下委屈的,才留得住真爱。——苏芩

文章目录

  • 一、视频格式
  • 二、视频协议
  • 三、视频流
    • 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才能看到的视频,目前常见的协议有RTSPRTMPHLSHTTP等。笔者短暂地接触过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采样率也是一种。
444422420是三种『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,这个是形象化成图像的样子,实际在机器内存储并不是这样,具体可以参见博客《图像原始格式一探究竟》。422420分别如下图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,因此说YUV422YUV444的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,因此说YUV420YUV444的1/2大小。恢复U\V分量的办法同YUV422,只不过这里是2X2的矩阵共享保留着的U\V分量。

这种设计办法真的很巧妙!前文提到的**“人眼对UV的敏感度最低,因此可以极大比例地压缩UV两个通道的数值”**,且对于图像而言,相邻的区域像素的色彩、饱和度一般非常接近,因此这种以2X2矩阵为基本单位,只保留1组U\V分量合情合理。

3、编码/存储格式

大家肯定还听说过YV12YU12NV12NV21吧,看到这里是不是又纳闷:“后面的数字怎么变成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 Google 2013 研发中
VP8 Google 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

音视频基础——视频基础知识相关推荐

  1. 音视频开发入门基础知识(视频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 一.前言 二.视频采集和显示 三.视频常见的格式 四.RGB转YUV和YUV转R ...

  2. 音视频开发入门基础知识(音频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 前言 音频的采集和播放 音频常见的格式 音频的编码 前言 在音视频开发入门基础知 ...

  3. 【音视频开发】基础知识:视频简介

     在学习了⾳频的相关概念之后,现在开始讨论视频,视频是由⼀幅幅图像组成的,所以要学习视频还得从图像学习开始.  与⾳频的学习⽅法类似,视频的学习依然是从图像的物理现象开始回顾,这⾥需要回顾⼀下⼩学做过 ...

  4. 视频相关的理论知识与基础概念

    本文将视频相关的理论知识与基础概念划分为 11 个知识点,如下: 视频 分辨率 比特率 采样率 帧率 视频编码 编码标准 视频封装格式 视频解码 视频播放原理 视频与流媒体 1.视频 根据人眼视觉暂留 ...

  5. 音视频面试必备:一文搞懂视频相关的基础概念

    1.引言 随着移动互联网的普及,实时音视频技术已经在越来越多的场景下发挥重要作用,已经不再局限于IM中的实时视频聊天.实时视频会议这种功能,在远程医疗.远程教育.智能家居等等场景也司空见惯. 虽然实时 ...

  6. Android音视频开发---0基础入门准备篇

    文章目录 0,题记 1,学习路线 2,学习目标 任务列表 基础知识 FFmpeg 3,开始音视频开发必备的技能 1,C语言. 2,Linux. 3,基本的Linux编译执行命令,以及vim操作. 4, ...

  7. Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片

    Android 音视频开发 上一篇文章:使用 imageview绘制一张图片 任务一 SurfaceView绘制一张图片 文章目录 Android 音视频开发 前言 一.surfaceview是什么? ...

  8. 音视频开发-视频基础

    1 视频产生 视频本质就是一组连续播放的图像,所以研究视频离不开对于图像的研究.而图像又是由众多的色彩构成,这里就会涉及到图像的最小单元一个像素点的构成,像素点一般是由RGB三种颜色组成. 1.1 R ...

  9. 视频编码零基础入门(1):视频编解码之理论概述

    1.前言 即时通讯应用中的实时音视频技术,几乎是IM开发中的最后一道高墙.原因在于:实时音视频技术 = 音视频处理技术 + 网络传输技术 的横向技术应用集合体,而公共互联网不是为了实时通信设计的.有关 ...

最新文章

  1. sqlite数据库实现字符串查找的方法(instr,substring,charindex替代方案)
  2. Grid布局和Flex布局
  3. bzoj4788: [CERC2016]Bipartite Blanket
  4. 心理学专业转用户体验_用心理学设计奇妙的用户体验
  5. 50-00-040-配置-Flink Configuration简介
  6. python token flask_flask 实现token机制
  7. python语言程序设计实践教程答案上海交通大学_Python推荐书籍从入门到进阶(珍藏版)...
  8. java 使用的钩子_Java 钩子程序
  9. windows环境下布置定时任务
  10. 配流06—frank_wolfe配流算法
  11. Linux的cd ~/.什么意思?
  12. 4234最小差值生成树
  13. 高亮蓝光油溶性ZnCdS/ZnS量子点(硫化锌镉/硫化锌)
  14. 计算机技术员自我介绍,技术员的自我介绍范文
  15. 写一个GAMEBOY的模拟器
  16. 解决: Error Code: 2013. Lost connection to MySQL server during query
  17. 计算机视觉最新进展概览(2021年8月1日到2021年8月7日)
  18. 如何用Yii2编程:ActiveRecord
  19. 【OpenVINO】OpenVINO 2022.1 安装教程(Windows)
  20. BBEdit—HTML文本编辑器

热门文章

  1. SFR算法详解(一)——基础理论
  2. Nginx反向代理服务器(请求转发)
  3. 利用keytools 生成keystore
  4. modprobe vboxsf failed问题修复
  5. 电子档案归档,如何做到“来源可靠、程序规范、要素合规”
  6. 文本框时间为日历格式
  7. 3【源码】数据可视化:基于 Echarts +Java SpringBoot 实现的动态实时大屏范例-物联网
  8. hdu2066 一个人的旅行 floyd
  9. 常用命令_LINUX三剑客之文本处理(一):分别利用awk和sed命令添加列文本
  10. UnityAPI.WheelCollider轮碰撞器(Yanlz+API+WheelCollider+motorTorque+brakeTorque+steerAngle+GetWorldPose+)