(1)帧
为了更好地说明帧的概念,我们先来看看电影播放的基本原理:
在放映电影的过程中,画面被一幅幅地放映在银幕上。画幅移开时,光线就被遮住,幕上便出现短暂的黑暗;
每放映一个画幅后,幕上就黑暗一次。但这一次次极短暂的黑暗,被人的视觉生理现象“视觉暂留”所弥补。人
眼在观察景物时,光信号传入大脑神经需经过一段短暂时间,光的作用结束时,视觉也不立即消失。视觉的这
一现象称为“视觉暂留”。当电影画面换幅频率达到每秒15幅~30幅时,观众便见不到黑暗的间隔了,这时人“看到”
的就是运动的事物,这就是电影的基本原理。这里的一幅画面就是电影的一帧,实际上就是电影胶片中的一格。
帧——就是影像动画中最小单位的单幅影像画面。 一帧就是一副静止的画面,连续的帧就形成动画,如
电视图象等。 我们通常说帧数,简单地说,就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器
每秒钟能够刷新几次,通常用FPS(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示
帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就
会愈流畅。
关键帧——任何动画要表现运动或变化,至少前后要给出两个不同的关键状态,而中间状态的变化和衔接
电脑可以自动完成,在Flash中,表示关键状态的帧叫做关键帧。
过渡帧——在两个关键帧之间,电脑自动完成过渡画面的帧叫做过渡帧。
两者关系:
两个关键帧的中间可以没有过渡帧(如逐帧动画),但过渡帧前后肯定有关键帧,因为过渡帧附属于关键帧;
关键帧可以修改该帧的内容,但过渡帧无法修改该帧内容。
关键帧中可以包含形状、剪辑、组等多种类型的元素或诸多元素,但过渡帧中对象只能是剪辑(影片剪辑、图形剪
辑、按钮)或独立形状。
影片是由一张张连续的图片组成的,每幅图片就是一帧,电影一般采用24帧的画面频率;电视根据制式的不同
以及交流电造成的扫描场频影响,帧率是每秒25帧(PAL制式)或每秒30帧(NTSC制式)。
目前最新的电影摄制技术,已经可以从每秒24帧提高到每秒48帧,比如彼得·杰克逊的《霍比特人》(The Hobbit)
片断,亮相美国电影界的盛会--CinemaCon电影产业博览会时,这段采用每秒48帧画面频率拍摄的电影片段,
预示着电影拍摄技术的又一次突破,传达出一个信息:高帧率电影正在登上舞台;同时越来越多的影院已具备播放
每秒48帧及以上的高帧率电影的能力,越来越多的影片也在进入高帧率的阵营。
P、B、I三种帧
为了提高压缩比例,降低视频文件的大小,在针对连续动态图像编码时,一般会将连续若干幅图像编码为P、B、I
三种帧类型。在编码的过程中,部分视频帧序列压缩成为I帧,部分压缩成P帧,还有部分压缩成B帧。
I帧又称为内部画面,通常是一组连续画面的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成
图像。I帧采用帧内压缩法,这种压缩与静态图像的压缩算法类似。I帧是靠尽可能去除图像空间冗余信息来压缩的。
P帧是通过充分降低与图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧。
P帧由在它前面的P帧或者I帧预测而来,它根据本帧与邻近的前一帧或几帧的不同点来压缩本帧数据。采取
P帧和I帧联合压缩的方法可达到更高的压缩且无明显的压缩痕迹。P帧属于前向预测的帧间编码。它只参考前面
靠近它的I帧或P帧。
B帧也叫双向预测帧,当把一帧压缩成B帧时,它根据邻近的前几帧、本帧以及后几帧数据的不同点来压缩本帧,
也即仅记录本帧与前后帧的差值。只有采用B帧压缩才能达到超高的压缩比。一般地,I帧压缩效率最低,P帧较高,
B帧最高。(来源:百度百科)
也就是说,一个 I 帧可以不依赖其他帧就解码出一幅完整的图像,而 P 帧、B 帧不行。P 帧需要依赖视频流中排在
它前面的帧才能解码出图像。B 帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。
三种帧的说明
1、I帧
I帧:帧内编码帧 ,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
I帧特点:
1) 它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2) 解码时仅用I帧的数据就可重构完整图像;
3) I帧描述了图像背景和运动主体的详情;
4) I帧不需要参考其他画面而生成;
5) I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6) I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7) I帧不需要考虑运动矢量;
8) I帧所占数据的信息量比较大。
2、P帧
P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上
本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。
在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到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帧的压缩比较高。
3、B帧
B帧:双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,
但我这样说简单些),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧
数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
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帧不是参考帧,不会造成解码错误的扩散。
(2)帧数
帧数(Frames)为帧生成数量的简称。由于口语习惯上的原因,我们通常将帧数与帧率混淆。每一帧都是静止的图象,
快速连续地显示帧便形成了运动的假象,因此高的帧率可以得到更流畅、更逼真的动画。
帧数与帧率的区别编辑
我们知道,速率(Speed)=距离(Distance)/时间(Time),单位为米每秒(m/s, meterspersecond, ops);
同理,帧率(Frame rate)=帧数(Frames)/时间(Time),单位为帧每秒(f/s, frames per second, fps)。
也就是说,如果一个动画的帧率恒定为60帧每秒(fps),那么它在一秒钟内的帧数为60帧,两秒钟内的帧数为120帧
录制视频编辑
对于手机来说,因为涉及机器处理图片能力和存储能力的影响,大多数手机的视频拍摄能力无论是720P还是1080P都只有30帧每秒。
但是随着手机的硬件不断刷新,现在市面上也出现很多能够高速录像的手机,例如:
iPhone 6s在使用4k格式拍摄下,甚至可以使用135帧每秒的超高速拍摄功能。
Find5 也因其高强的硬件,在通过降低到480P之后甚至可以录制120帧每秒的视频。
当然,其实在手机上使用的高速录像并不成熟,因为受限于硬件和储存设备写入速度等等,拍摄效果总是不够理想。
不过这是个好的开始,起码厂商开始重视人们对高速录像的需求,虽然这个需求量不是很大,但起码有……
你们可能以为高速录像除了让视频看上去更顺畅之外就没有作用了。其实现在我们看到很多的慢速播放视频都是
由高速录像拍摄下来,然后再通过软件调慢帧数播放,就能表现出慢动作视频了。
肉眼在看超过24帧每秒的静态图片就会认为是连续动态视频,所以你能拍摄到60帧每秒的视频,然后
通过软件把每秒帧数调节到24帧左右,那么你在一秒钟内拍摄到的图像就能通过慢速播放成两秒钟,而且是连续的、
不会卡顿的。如果你能拍摄90帧每秒的视频,那么你起码能把一秒钟拖慢到三秒的慢动作播放,以此类推。
高速录像能拍摄到很多我们容易忽略的细节和精采的瞬间,通过慢动作播放视频,也会让视频更好玩有趣,这
就是为什么越来越多厂商开始注重高速录像这个功能的原因。
(3)码流(码率)
码流(Data Rate)是指视频文件在单位时间内使用的数据流量,也叫码率或码流率,通俗一点的理解就是取样率,
是视频编码中画面质量控制中最重要的部分,一般我们用的单位是kb/s或者Mb/s。一般来说同样分辨率下,视频
文件的码流越大,压缩比就越小,画面质量就越高。码流越大,说明单位时间内取样率越大,数据流,精度就越高,
处理出来的文件就越接近原始文件,图像质量越好,画质越清晰,要求播放设备的解码能力也越高。当然,码流越大,
文件体积也越大,其计算公式是文件体积=时间X码率/8。
(4)采样率
采样率(也称为采样速度或者采样频率)定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)
来表示。采样率是指将模拟信号转换成数字信号时的采样频率,也就是单位时间内采样多少点。一个采样点数据
有多少个比特。比特率是指每秒传送的比特(bit)数。单位为 bps(Bit Per Second),比特率越高,传送的数据越大,
音质越好.比特率 =采样率 x 采用位数 x声道数.
(5)比特率
比特率是指每秒传送的比特(bit)数。单位为bps(BitPer Second),比特率越高,传送的数据越大。在视频领域,
比特率常翻译为码率!!! 比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特
就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,
音、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。比特率是指将数字声音、
视频由模拟格式转化成数字格式的采样率,采样率越高,还原后的音质、画质就越好。
(6)帧速率
帧速率也称为FPS(Frames PerSecond)的缩写——帧/秒。FPS是指每秒钟刷新的图片的帧数,也可以理解为图形处理
器每秒钟能够刷新几次。越高的帧速率可以得到更流畅、更逼真的动画。每秒钟帧数(FPS)越多,所显示的动作就会越流畅。
(7)GOP
GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。
一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,
GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;
Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。需要说明的是,通过提高GOP值来提
高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值
被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个
GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。同时,
由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会
影响Seek操作的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P
或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。
(8)DTS、PTS 的概念
DTS、PTS 的概念如下所述:
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。
当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。
比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中
的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,
PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:
PTS: 1 4 2 3
DTS: 1 2 3 4
Stream: I P B B
(9)常见编码模式:
VBR(Variable Bitrate)动态比特率 也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么
比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式;
ABR(Average Bitrate)平均比特率是VBR的一种插值参数。LAME针对CBR不佳的文件体积比和VBR生成文件大小
不定的特点独创了这种编码模式。ABR在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率
使用相对低的流量,高频和大动态表现时使用高流量,可以做为VBR和CBR的一种折衷选择。
CBR(Constant Bitrate),常数比特率 指文件从头到尾都是一种位速率。相对于VBR和ABR来讲,它压缩出来的
文件体积很大,而且音质相对于VBR和ABR不会有明显的提高。
(10)音视频的同步
上面说了视频帧、DTS、PTS 相关的概念。我们都知道在一个媒体流中,除了视频以外,通常还包括音频。音频的播放,
也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。
音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。在音视频一起播放的时候,我们通常需要面临一个问题:
怎么去同步它们,以免出现画不对声的情况。
要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上
的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。
这里的说的时间戳就是我们前面说的 PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。