帧
——
就是影像动画中最小单位的单幅影像画面,相当于电影胶片上的每一格镜头。而在实际压缩时,会采取各种
算法减少数据的容量,其中
IPB
就是最常见的。
1
、基本概念
I frame
:帧内编码帧 又称
intra picture
,
I
帧通常是每个
GOP
(
MPEG
所使用的一种视频压缩技术)的第一个帧,
经过适度地压缩,做为随机访问的参考点,可以当成图象。
I
帧可以看成是一个图像经过压缩后的产物。
P frame:
前
向预测编码帧 又称
predictive-frame
,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量
的编码图像,也叫预测帧;
B frame:
双向预测内插编码帧 又称
bi-directional interpolated prediction frame
,既考虑与源图像序列前面已编码帧,
也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩传输数据量的编码图像,也叫双向预测帧;
PTS
:
Presentation Time Stamp
。
PTS
主要用于度量解码后的视频帧什么时候被显示出来
DTS
:
Decode Time Stamp
。
DTS
主要是标识读入内存中的bit流在什么时候开始送入解码器中进行解码。
ps:
在没有
B
帧存在的情况下
DTS
的顺序和
PTS
的顺序应该是一样的。
2
、
I
、
B
、
P
的特点
I
帧特点
:
1.
它是一个全帧压缩编码帧。它将全帧图像信息进行
JPEG
压缩编码及传输
;
2.
解码时仅用
I
帧的数据就可重构完整图像
;
3.I
帧描述了图像背景和运动主体的详情
;
4.I
帧不需要参考其他画面而生成
;
5.I
帧是
P
帧和
B
帧的参考帧
(
其质量直接影响到同组中以后各帧的质量
);
6.I
帧是帧组
GOP
的基础帧
(
第一帧
),
在一组中只有一个
I
帧
;
7.I
帧不需要考虑运动矢量
;
8.I
帧所占数据的信息量比较大。
P
帧
:
前向预测编码帧。
P
帧的预测与重构
:P
帧是以
I
帧为参考帧
,
在
I
帧中找出
P
帧
“
某点
”
的预测值和运动矢量
,
取预测差值和运动矢量一起传送。在接收端根据运动矢量从
I
帧中找出
P
帧
“
某点
”
的预测
《
FFmpeg
基础库编程开发》
----czc1009
29
值并与差值相加以得到
P
帧
“
某点
”
样值
,
从而可得到完整的
P
帧。
P
帧特点
:
1.P
帧是
I
帧后面相隔
1~2
帧的编码帧
;
2.P
帧采用运动补偿的方法传送它与前面的
I
或
P
帧的差值及运动矢量
(
预测误差
);
3.
解码时必须将
I
帧中的预测值与预测误差求和后才能重构完整的
P
帧图像
;
4.P
帧属于前向预测的帧间编码。它只参考前面最靠近它的
I
帧或
P
帧
;
5.P
帧可以是其后面
P
帧的参考帧
,
也可以是其前后的
B
帧的参考帧
;
6.
由于
P
帧是参考帧
,
它可能造成解码错误的扩散
;
7.
由于是差值传送
,P
帧的压缩比较高。
B
帧
:
双向预测内插编码帧。
B
帧的预测与重构
B
帧以前面的
I
或
P
帧和后面的
P
帧为参考帧
,“
找出
”B
帧
“
某点
”
的预测值和两个运动矢
量
,
并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中
“
找出
(
算出
)”
预测
值并与差值求和
,
得到
B
帧
“
某点
”
样值
,
从而可得到完整的
B
帧。
B
帧特点
1.B
帧是由前面的
I
或
P
帧和后面的
P
帧来进行预测的
;
2.B
帧传送的是它与前面的
I
或
P
帧和后面的
P
帧之间的预测误差及运动矢量
;
3.B
帧是双向预测编码帧
;
4.B
帧压缩比最高
,
因为它只反映丙参考帧间运动主体的变化情况
,
预测比较准确
;
5.B
帧不是参考帧
,
不会造成解码错误的扩散。
注
:I
、
B
、
P
各帧是根据压缩算法的需要
,
是人为定义的
,
它们都是实实在在的物理帧
,
至于图像
中的哪一帧是
I
帧
,
是随机的
,
一但确定了
I
帧
,
以后的各帧就严格按规定顺序排列
从上面的解释看,我们知道
I
和
P
的解码算法比较简单,资源占用也比较少,
I
只要自己完成就行了,
P
呢,也
只需要解码器把前一个画面缓存一下,遇到
P
时就使用之前缓存的画面就好了,如果视频流只有
I
和
P
,解码器可
以不管后面的数据,边读边解码,线性前进,大家很舒服。
但网络上的电影很多都采用了
B
帧,因为
B
帧记录的是前后帧的差别,比
P
帧能节约更多的空间,但这样一来,
文件小了,解码器就麻烦了,因为在解码时,不仅要用之前缓存的画面,还要知道下一个
I
或者
P
的画面(也就是
说要预读预解码),而且,
B
帧不能简单地丢掉,因为
B
帧其实也包含了画面信息,如果简单丢掉,并用之前的画
面简单重复,就会造成画面卡(其实就是丢帧了),并且由于网络上的电影为了节约空间,往往使用相当多的
B
帧,
B
帧用的多,对不支持
B
帧的播放器就造成更大的困扰,画面也就越卡。
一般平均来说,
I
的压缩率是
7
(跟
JPG
差不多),
P
是
20
,
B
可以达到
50
,可见使用
B
帧能节省大量空间,节
省出来的空间可以用来保存多一些
I
帧,这样在相同码率下,可以提供更好的画质。
3
、
GOP
GOP
:
Group of Pictures
画面组
GOP
(
Group of Pictures
)策略影响编码质量:所谓
GOP
,意思是画面组,一个
GOP
就是一组连续的画面。
MPEG
编码将画面(即帧)分为
I
、
P
、
B
三种,
I
是内部编码帧,
P
是前向预测帧,
B
是双向内插帧。简单地讲,
I
帧是一
个完整的画面,而
P
帧和
B
帧记录的是相对于
I
帧的变化。没有
I
帧,
P
帧和
B
帧就无法解码,这就是
MPEG
格式
难以精确剪辑的原因,也是我们之所以要微调头和尾的原因。
MPEG-2
帧结构
MPEG-2
压缩的帧结构有两个参数,一个是
GOP
(
Group Of Picture
)图像组的长度,一般可按编码方式从
1
-
15
;
另一个是
I
帧和
P
帧之间
B
帧的数量,一般是
1
-
2
个。前者在理论上记录为
N
,即多少帧里面出现一次
I
帧;后者
描述为多少帧里出现一次
P
帧,记录为
M
。
下面举例说明:
在如上图中,
GOP (Group of Pictures)
长度为
13
,
S0~S7
表示
8
个视点,
T0~T12
为
GOP
的
13
个时刻。每个
GOP
包含帧数为视点数
GOP
长度的乘积。在该图中一个
GOP
中,包含
94
个
B
帧。
B
帧占一个
GOP
总帧数的
90.38%
。
GOP 越长,B
帧所占比例更高,编码的率失真性能越高。下图测试序列
Race1
在不同
GOP
下的率失真
性能对比。
1.7.4
分辨率
这里有
2
个概念, 分别是:
a.
物理分辨率
,
即手机屏幕能显示的像素数,用
W x H
个像素表示。常见的手机屏幕分辨率为
320x240(QVGA),
随
着大屏幕手机的普及, 更高的分辨率也开始出现
.
例如
: 480x320(iphone),640x360(nHD,
诺基亚触屏系列常
见
),640x480(VGA,
多普达系列常见
),
甚至高达
852x480(
夏普高端手机常见
).
b.
视频文件的分辨率, 这个是指视频画面的实际分辨率
,
如,
320x240, 480x272, 640x480
等等。
一般来说,大部分手机的解码芯片不支持超过其屏幕物理分辨率的视频
,
部分可以支持超过其屏幕物理分辨率的视
频, 例如
,
虽然
iphone
的屏幕物理分辨率为
480x320,
但它支持
640x480
的视频, 此时播放的画面实际是把原视
频缩小的
.
《
FFmpeg
基础库编程开发》
----czc1009
32
1.7.5
码率
一般用多少
kbps(
千比特
/
秒
)
或者
mbps
(
兆比特
/
秒
)
来表示。 手机解码芯片所支持的码率一般都在
1Mbps
以下
.
1.7.6
帧率
(FPS,
帧
/
秒
),
就是视频画面刷新的速度, 作为参考
,
国内电视机一般是
25FPS,
电影标准为
24FPS.
手机芯片, 最
高支持
30FPS,
早期型号最大只能
15fps
。
1.7.7 RGB
和
YUV
RGB
指的是红绿蓝,应用还是很广泛的,比如显示器显示,
bmp
文件格式中的像素值等;而
yuv
主要指亮度和
两个色差信号,被称为
luminance
和
chrominance
他们的转化关系可以自己去查一下,我们视频里面基本上都是用
yuv
格式。
YUV
文件格式又分很多种,如果算上存储格式,就更多了,比如
yuv444
、
yuv422
、
yuv411
、
yuv420
等等,视
频压缩用到的是
420
格式,这是 因为人眼对亮度更敏感些,对色度相对要差些。另外要注意几个英文单词的意思,
比如:
packet
、
planar
、
interlace
、
progressive
等。
一些远程桌面监控是通过编码成JPEG之后发送的,或者是其他的压缩方式,这样就会造成数据量太大的问题。但是使用H264直播就会需要缓存数据帧的问题。
提到M-JPEG和H264两个网络视频格式,就要谈及MPEG4,H264是MPEG4的一部分。
JPEG/M-JPEG
1、JPEG是一种静止图像的压缩标准,是一种标准的帧内压缩编码方式。当硬件处理速度足够快时,JPEG就能用于实时动图像的视频压缩。在画面变动较小时能提供不错的图像质量,传输速度快,缺点是数据量较大。
2、M-JPEG源于JPEG压缩技术,是一种简单的帧内JPEG压缩,压缩图像质量较好,在画面变动情况下无马赛克,但由于压缩技术本身限制,压缩比例小(录像时每小时约1-2GB空间,网络传输时需要2M带宽)。不符合长时间连续录像,不适用视频图像的网络传输。
MPEG-4
MPEG-4是为移动通信设备在Internet上实时传输视音频信号而制定的低速率、高压缩比的视音频编码标准。MPEG-4是面向对象的压缩方式,不像MPEG-1和MPEG-2简单将图像分为像块,而是根据图像的内容,把其中的对象(物体、人物、背景)分离出来,分别进行帧内、帧间编码,并允许在不同的对象之间灵活分配码率.,对重要的对象分配较多的字节,对次要的对象分配较少的字节,而提高压缩比,在较低的码率下获得较好的视频效果。
MPEG-4的优势:
1、具有很好的兼容性;
2、MPEG-4比其他算法提供更好的压缩比,最高达 200:1;
3、MPEG-4在提供高压缩比的同时,对数据的损失很小。
综上,MPEG-4大幅度的降低录像存储容量,获得较高的录像清晰度,适用于长时间实时录像的需求,具备在低带宽网络上优良的传输能力。
H.264
H.264是 ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的数字视频编码标准,既是ITU-T的H.264,又是ISO/IEC的MPEG-4的第10 部分。
H.264和前几个H.26X的标准一样,也用DPCM加变换编码的混合编码模式。但采用“回归基本”的简洁设计,获得比H.263++好很多的压缩性能;加强了对各种信道的适应能力,采用“网络友好”的结构和语法,有利于对误码和丢包的处理;应用目标范围较宽,以满足不同速率、不同解析度以及不同传输(存储)场合的需求。
如果从单个画面清晰度比较,MPEG4有优势;从动作连贯性上的清晰度,H.264有优势。H.264的优越性能代价是计算复杂度的增加
所以,相比之下:
M-JPEG优点是图像清晰度好,支持第三方工具打开,对图像计算处理要求低,缺点是数据量大,储存空间,网络带宽要求高;
H264优点是数据量小,储存空间,网络要求低,缺点是图像稍差,专用格式很少第三方工具支持,对图像计算处理硬件要求高。