www.kernel.org
分类: LINUX
2014-04-02 22:17:58
我们都知道,视频本质上源于电影。2014年冯导的《私人订制》里葛大爷对“全球最俗大导”说了那么一番话,印象比较深刻:“经过考证,电影是大众娱乐,起源于走马灯。本身就是一俗艺术,和雅压根儿就不沾边。”而当代科学史研究者们大都依据文学家范成大(1126—1193)的诗文记载,认为南宋时才有走马灯。走马灯的两个主要特点分别是:
一、利用热气流作动力;
二、以涡轮装置带动灯上画面转动。
以这两点继续追溯可以到北宋年间,著名北宋诗人吴潜观灯有感,写下:“半勺兰膏暖焰生,恍疑赤壁夜鏖兵。骑乘猛燎奔驰疾,人运长枪转战轻。旗影静移云母帐,剑铓微掣水晶营。何人幻此圆机妙,独向元宵策美名。”从内容到形式详述走马灯闪亮登场的过程。也就是说走马灯距今已有将近1300多年的历史了。然而,在当代电影起源发展史上走马灯却很少被人提起。
关于电影的起源,美国人会告诉你说是爱迪生发明的;法国人会说是卢米埃尔兄弟发明的。其实电影是建立在一种名为“视觉暂留原理”的基础上。人脑保留视像的时间会比眼睛真正记录它的时间略长一点。如果不是这样,我们对世界的视觉感知就会不断被眨眼的动作打断。但实际上,在双眼闭上的那一刹那,大脑会“保存”视像。类似地,当静止的图像以最短的间隔从人眼前闪过时,大脑也会发挥保存图像的作用。电影不是真的在动,而是一组以每秒24格的速度放映的静止画面,这样的速度使人觉得动作是连续的。
该原理是比利时著名物理学家约瑟夫普拉多于1829年发现。随后,普拉多依据此原理于1832年发明了“诡盘”。“诡盘”能使被描画在锯齿形的硬纸盘上的画片因运动而活动起来,而且能使视觉上产生的活动画面分解为各种不同的形象。“诡盘”的出现,标志着电影的发明进入到了科学实验阶段。随后的美国人霍尔纳、奥地利的冯乌却迪奥斯、法国的W尼埃普斯、美国旧金山摄影师爱德华幕布里奇、法国生理学家马莱都为随后电影业的发展做出过巨大的贡献。
这里我们来看一下电影中“帧”的概念。根据“视觉残留原理”24帧/秒是可以给人带来基本流畅、感觉不到卡顿的基本体验的最低播放频率。传统的电影都是用连续长胶片拍摄,主要在银幕上播放。另外还有一点,就是电影在放映时胶片是连续的。例如,前面一个胶片离放映窗还有2/3的距离时,下一张胶片的1/3就已经进入放映窗了。这样一来老式电影播放时会经常出现时快时慢,无连续感等现象。所以在放映电影时通常都会给放映窗口增加一个遮光器,即放映窗有个电机带动着一个黑色的扇叶不停的转动,将每格胶片遮挡两次,这样就将每秒24帧的频率提升一倍到48Hz(注意:早期电影的拍摄和放映仍旧是以24帧/秒的帧率进行的),这样一来我们的眼睛就会觉得图像更加连贯和流畅了。
当模拟电视出现后,出现了一对名词“隔行扫描”和“逐行扫描”,以及PAL制和NTSC制两个概念。为了不冲淡主题,关于这两个知识点大家可以如果想进一步了解,可以点击“这里”。简而言之,在隔行扫描的显示设备中,每一帧图像被分割为两场画面交替显示。第一场(奇数场)电子枪只扫一帧图像的所有描奇数行,依次扫描1、3、5…行,而第二场(偶数场)电子枪只扫描偶数行,依次扫描2、4、6…行等等。逐行扫描显示一帧图像时,电子枪只要一行接着一行扫,不用区分奇偶场,扫完所有行就OK了。关于PAL制和NTSC制区别记住下述两点:
PAL制电视机供电频率50Hz,场频50场/秒,帧频率25帧/秒,扫描线625行。代表国家中国、德国、新加坡等;
NTSC制电视机供电频率60Hz,场频60场/秒,帧频30帧/秒,扫描线525行。代表地区美国日本等。
当然,不管是通过无线电还是互联网来传输电影或者视频,都避不开数字化的话题。现在的数字摄像机已不像传统的胶片摄像机那样简陋,数字摄像机在拍摄的时候我们只要设置好我们需要的参数就可以了。那么在数字视频中,帧的概念已经不同于传统胶卷上一个图像的意义了。之前我们计算过,一部1024×768分辨率,采用aRGB色彩空间存储,8位深度,时常90分钟的视频,需要占用的带宽是3Mbps,占用的存储空间是15.83GB左右。
所以,对于数字图像,我们一般有两方面的压缩。一是帧内压缩,就是采用YUV色彩空间,然后配合各种压缩算法(例如H.264,mpeg4等等)在不影响用户视觉体验的前提下,最大限度的降低图像本身所占用的空间;二是帧间压缩,因为通常情况下,相邻两帧图像之间其实有很多重复,相似信息,可以采用帧间自适应、行程编码、预测编码、运动补偿等方式。
采用压缩算法时,在制作或者转换视频时一般将几帧图像分为一个组GOP,为了防止运动变化,帧数不宜过多。在用ffmpeg转换视频时有一个参数可以设置这个GOP。数字视频里每个帧都被归成三类:关键帧I,非关键帧P或者B。一个GOP就是一个I帧、数个P、B帧的分组。
I帧:表示关键帧,是一帧画面的完整的所有信息;解码时只需要本帧数据就可以显示画面;
P帧:表示前向预测帧,表示的是这一帧跟之前的一个关键帧I(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面;
B帧:是双向预测帧,即B帧是本帧与前后帧的差别。B帧一般需要参考其前向的I帧或者P帧,以及后一个P帧的数据才能完整解码一帧图像数据。
所以说,只有关键帧才可以独立的完整复原图像,P帧和B帧都是图像的相对信息差量,他们单独存在时并不能完整解码视频文件的一帧图像信息。
说的云里雾里的,让我们看个实际的例子。那就是本周五即将上映的《美国队长2》的宣传片:
这个文件的帧编码信息是,红色为I帧,蓝色为P帧,绿色为B帧,其帧编码顺序是:
IPPPPPPPPPPPPPPPPPPPBBPBBPBBPBBBPBBPBPBPBBP…
但是显示设备解码显示时却不能按照这样的顺序进行,为什么?因为解码B帧时需要参考其前面的I帧或者P帧,以及后面的P帧才可以完整解码B帧的画面。下面我们将用表格分析一下帧的显示顺序和编码顺序的区别:(为了画表格方便,我将I帧后面紧挨着的19个P帧缩减为3个,但这并不影响分析效果)。修改后的编码顺序为: