视频解码基础
一、封裝格式
我们播放的视频文件一般都是用一种封装格式封装起来的,封装格式的作用是什么呢?一般视频文件里不光有视频,还有音频,封装格式的作用就是把视频和音频打包起来。 所以我们先要解封装格式,看有哪些视频流和哪些音频流,此时的音频流和视频流都还是压缩数据,不能直接用于显示的,这就需要解码。下面是播放一个视频文件时的流程图。
FFmpeg 视频文件 是一个容器 (视频流(H264) 音频流(aac))
二、视频文件封装格式
封装格式(也叫容器),就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中,也就是说仅仅是一个外壳,或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点,视频轨相当于饭,而音频轨相当于菜,封装格式就是一个碗,或者一个锅,用来盛放饭菜的容器。 下面是几种常用的 视频文件后缀类型 与其相对应的 封装格式。
视频文件格式 | 视频封装格式 |
---|---|
.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 |
三、 音视频编码方式简介
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 | 微软平台 |
四, 音频编码方式
音频编码的作用: 将音频采样数据(PCM 等)压缩成音频码流,从而降低音频的数据量。 常用的音频编码方式有以下几种:
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域(新) |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMV | Microsoft Inc. | 1999 | 微软平台 |
AC-3 | Dolby Inc. | 1992 | 电影 |
一、视频封装格式
我们常见的视频封装格式有:.mov、.avi、.mpg、.vob、.mkv、.rm、.rmvb
等等。为什么会有这么多种不同的文件格式?那是因为它们通过不同的方式实现了视频这件事情,至于这个不同在哪里,那就需要了解一下接下来要说的**「视频封装格式」**这个概念了。
1.1 视频封装格式
视频封装格式,简称视频格式,相当于一种存放视频信息的容器
,它里面包含了视频信息
、音频信息
和相关的配置信息
(例如:视频和音频的关联信息、如何解码等)。视频封装格式最直接的反映就是视频文件格式,如下表 👇
视频文件格式 | 视频封装格式 | 释义 |
---|---|---|
.avi | AVI(Audio Video Interleave) | 图像质量好,但体积过于庞大,压缩标准不统一,存在高低版本兼容问题。 |
.wmv | WMV(Windows Media Video) | 可边下载边播放,很适合网上播放和传输 |
.mpg .mpeg .mpe .dat .vob .asf .3gp .mp4 | MPEG(Moving Picture Experts Group) | 由运动图像专家组制定的视频格式,有三个压缩标准,分别是 MPEG-1、MPEG-2、和 MPEG-4,它为了播放流式媒体的高质量视频而专门设计的,以求使用最少的数据获得最佳的图像质量。 |
.mkv | Matroska | 一种新的视频封装格式,它可将多种不同编码的视频及 16 条以上不同格式的音频和不同语言的字幕流封装到一个 Matroska Media 文件当中。 |
.rm、.rmvb | Real Video | Real Networks 公司所制定的音频视频压缩规范称为 Real Media。用户可以使用 RealPlayer 根据不同的网络传输速率制定出不同的压缩比率,从而实现在低速率的网络上进行影像数据实时传送和播放。 |
.mov | QuickTime File Format | Apple 公司开发的一种视频格式,默认的播放器是苹果的 QuickTime。这种封装格式具有较高的压缩比率和较完美的视频清晰度等特点,并可以保存 alpha 通道。 |
.flv | Flash Video | 由 Adobe Flash 延伸出来的一种网络视频封装格式。这种格式被很多视频网站所采用。 |
1.2 容器
将已经编码压缩好
的视频数据和音频数据
按照一定的格式
放到一个文件
中,这个文件可以称为容器
。当然可以理解为这只是一个外壳
。
通常,除了音频数据和视频数据外,还会存放一些视频同步的元数据
:例如字幕,这种多数据会给不同的程序来处理,但是在传输和存储的时候,又是被绑定在一起的。
二、常用视频和音频编码格式介绍
2.1 视频编解码
视频编解码的过程–>对数字视频进行压缩或解压缩
的过程。
2.2 常见的视频编解码方式
.H26x
系列 由国际电传视讯联盟远程通信标准化组织(ITU-T)主导,包括H.261、H.262、H.263、H.264、H.265
。.H261
用于老的视频会议或视频电话系统,之后的所有标准都基于它设计的。.H262
等同于 MPEG-2 第二部分,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。.H263
主要用于视频会议、视频电话和网络视频相关产品。比它之前的视频编码标准在性能上有了较大的提升。尤其是在低码率端,它可以在保证一定质量的前提下大大的节约码率。.H264
等同于 MPEG-4 第十部分,也被称为高级视频编码(Advanced Video Coding,简称 AVC),是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。该标准引入了一系列新的能够大大提高压缩性能的技术,并能够同时在高码率端和低码率端大大超越以前的诸标准。.H265
高效率视频编码(High Efficiency Video Coding,简称 HEVC)是一种视频压缩标准,是 H.264 的继任者。HEVC 被认为不仅提升图像质量,同时也能达到 H.264 两倍的压缩率(等同于同样画面质量下比特率减少了 50%),可支持 4K 分辨率甚至到超高画质电视,最高分辨率可达到 8192×4320(8K 分辨率),这是目前发展的趋势。
MPEG
系列 由国际标准组织机构(ISO)下属的运动图象专家组(MPEG)开发。MPEG-1
第二部分,主要使用在 VCD 上,有些在线视频也使用这种格式。该编解码器的质量大致上和原有的 VHS 录像带相当。MPEG-2
第二部分,等同于H.262
,使用在 DVD、SVCD 和大多数数字视频广播系统和有线分布系统中。MPEG-4
第二部分,可以使用在网络传输、广播和媒体存储上。比起MPEG-2
第二部分和第一版的H.263
,它的压缩性能有所提高。MPEG-4
第十部分,等同于H.264
,是这两个编码组织合作诞生的标准。
不选择H265的原因
iOS11.0
之后才支持H265
。- 相对于
H264
,H265
对CPU造成的负荷更大,当然CPU发热更严重。
2.3「编解码方式」和「封装格式」的关系
「视频封装格式」= 视频 + 音频 +视频编解码方式 等信息的容器。
一种「视频封装格式」可以支持多种「视频编解码方式」。比如:QuickTime File Format(.MOV) 支持几乎所有的「视频编解码方式」,MPEG(.MP4) 也支持相当广的「视频编解码方式」。
比较专业的说法可能是以 A/B 这种方式,A 是「视频编解码方式」,B 是「视频封装格式」。比如:一个 H.264/MOV 的视频文件,它的封装方式就是 QuickTime File Format,编码方式是 H.264。
2.4 音频编解码方式
经常使用的音频编码方式有👇🏻
AAC
,英文全称Advanced Audio Coding
,是由 Fraunhofer IIS、杜比实验室、AT&T、Sony等公司共同开发,在 1997 年推出的基于 MPEG-2 的音频编码技术。2000 年,MPEG-4 标准出现后,AAC 重新集成了其特性,加入了 SBR 技术和 PS 技术,为了区别于传统的 MPEG-2 AAC 又称为 MPEG-4 AAC。MP3
,英文全称MPEG-1 or MPEG-2 Audio Layer III
,是当曾经非常流行的一种数字音频编码和有损压缩格式,它被设计来大幅降低音频数据量。它是在 1991 年,由位于德国埃尔朗根的研究组织 Fraunhofer-Gesellschaft 的一组工程师发明和标准化的。MP3 的普及,曾对音乐产业造成极大的冲击与影响。WMA
,英文全称Windows Media Audio
,由微软公司开发的一种数字音频压缩格式,本身包括有损和无损压缩格式。
2.5 直播/小视频中的编码格式
-
视频编码格式–>
H264
,低码率,高质量图像,容错能力强,网络适应强,具有很高的数据压缩比,能达到惊人的102:1 -
音频编码格式–> AAC,目前比较热门的有损压缩编码技术,在
小于128Kbit/s 的码率下表现优异,并且多用于视频中的音频编码。并且衍生了
LC-AAC,HE-AAC,HE-AAC v2三种主要编码格式.
- LC-AAC 是比较传统的AAC,主要应用于中
高码率
的场景编码(>= 80Kbit/s
) - HE-AAC 主要应用于
低码率
场景的编码(<= 48Kbit/s
)
- LC-AAC 是比较传统的AAC,主要应用于中
2.6 RGB & YUV
通常我们采用RGB模型
来表示颜色
,RGB模型中,每种颜色需要3个数字分别表示R、G、B
,每个数字占用1个bit字节
,这样总共需要24bits
。
那么有没有更高效
的颜色模型用更少的bit
来表示颜色呢?–>YUV,Y表示亮度,也是灰阶值,U和V表示色度分量。
现在我们假设我们定义一个 「亮度(Luminance)」 的概念来表示颜色的亮度,那它就可以用含 R、G、B 的表达式表示为👇
Y = kr*R + kg*G + kb*B
Y 即「亮度」,kr、kg、kb 即 R、G、B 的权重值。
这时,我们可以定义一个 「色度(Chrominance)」 的概念来表示颜色的差异👇
Cr = R – Y
Cg = G – Y
Cb = B – Y
Cr、Cg、Cb 分别表示在 R、G、B 上的色度分量。上述模型就是 YCbCr
颜色模型基本原理。
YCbCr
是属于 YUV
家族的一员,是在计算机系统中应用最为广泛的颜色模型,就比如在本文所讲的视频领域。
在 YUV 中 Y 表示的是「亮度」,也就是灰阶值,U 和 V 则是表示「色度」。
YUV 的关键是在于它的亮度信号 Y
和色度信号 U、V
是分离
的,那就是说即使只有 Y 信号分量而没有 U、V 分量,我们仍然可以表示出图像,只不过图像是黑白灰度
图像。在YCbCr 中 Y 是指亮度分量,Cb 指蓝色色度分量,而 Cr 指红色色度分量。
现在我们从 ITU-R BT.601-7 标准
中拿到推荐的相关系数,就可以得到 YCbCr 与 RGB 相互转换的公式 👇
Y = 0.299R + 0.587G + 0.114B
Cb = 0.564(B - Y)
Cr = 0.713(R - Y)
R = Y + 1.402Cr
G = Y - 0.344Cb - 0.714Cr
B = Y + 1.772Cb
至此,我们对 YCbCr
这个颜色模型我们就有个初步认识了,但是细心的你会发现,这里 YCbCr
也仍然用了 3 个数字
来表示颜色啊,有节省 bit
吗?请看下图 👇🏻
- 假设图片有如下像素组成
- 一副图片就是一个像素阵列.每个像素的 3 个分量的信息是完整的,
YCbCr 4:4:4
。
- 下图中,对于每个像素点都保留「亮度」值,但是省略每行中偶素位像素点的「色度」值,从而节省了 bit。
YCbCr4:2:2
- 下图,做了更多的省略,但是对图片质量的影响却不会太大.
YCbCr4:2:0
所以,目前90%以上的直播啊,小视频啊都采用的这种YCbCr4:2:0
。