了解更多IOS底层原理知识,关注腾讯课堂八点钟学院IOS高级开发
IOS学习交流群 431449751;
视频转换和刻录要真正达到高水平,需要我们学习和理解的东西很多。有许多朋友和我一样,就是想打造像市场上的一张DVD连续剧。但有许多困惑一张普通DVD为什么能存放30多集电视,它是怎么做成的呢。在今后的日子里飞絮和大家一起学习,慢慢揭开这面面纱。
视频转换刻录之一:视频参数介绍以及各参数之间的关系
分辨率大家应该比较熟悉了,视频文件的用途决定分辨率的大小。大家应该选择合适的分辨率,能有效提高视频编码效率和控制文件大小,并获得最佳观赏效果。
清晰度的高低在于是否能分辨出图像线条间的区别,即图像层次对景物质点的分辨或细微层次质感的精细程度。其分辨率愈高,图像表现得愈细致,清晰度愈高。在视频转换时,清晰度更多的是一个比较主观的感觉。画面锐利、整洁、细致都可以让人产生清晰的感觉。一般来说,在足够编码率的前提下,分辨率越高,画面越清晰。因为分辨率提高后,图像表现就会更细致,图像层次之间也更加分明。但如果编码率不够,即使分辨率比较高,但直接感觉就是画面模糊,也就谈不上高清晰。
如果是动作片等类型的影片,一般画面变化激烈,需要设置较大的编码率。如果是动画片、风景片等类型的影片,画面变动不激烈,可以设置相对较小的编码率即可达到相同的清晰度,以便缩小转换后的文件体积。具体需要自己体会。
转换视频文件的时候,大家最关心的就是转换后的画面是否清晰。经常听到有人说XX软件转换质量好,XX软件转换质量差,很多情况下其实并不是软件不好,而是那些人自己不懂。下面4个例子详细讲解。
注:下面4个例子中都使用相同的视频编码器Xvid,全部使用固定比特编码方式。
例1:下面2个画面取材于同一个影片,都已经使用了足够的编码率。
分辨率176×144
因为编码率足够,因此像素之间界限也算分明(下面的字幕在这种低分辨率的情况下依然能够识别)。但分辨率过低,导致无法识别更多的画面内容,因此清晰度低。
---------------------------------------------------------------------------------------------------
分辨率480×360
在足够的编码率支持下,画面锐利、整洁、清晰,能够获得更多的画面细节,明显给人主观上一种清晰的感觉。事实上片源画面更大,效果更好。
例2:使用固定视频编码率270Kbps,相同的编码格式,不同画面大小的清晰度存在区别。因此必须根据画面大小确定合适的编码率。(因为是动画片,取的编码率就低了一些,一般分辨率320×240的影片建议取320~350Kbps)
分辨率320×240,画面给人感觉清晰度不错。
--------------------------------------------------------------------------------------------------
分辨率640×480,与上图的视频编码率一致为270Kbps,因编码率不够,给人模糊的感觉,甚至出现马赛克的情况。
例3:使用了足够的编码率设置以后,大分辨率画面依然给人清晰的感觉。
此画面分辨率同样是640×480,与例2中使用同样的编码器,但将编码率提高到650Kbps,画面清晰度比例2中的同比例画面高很多。前提是片源有足够的分辨率和清晰度。例4中将讲解片源分辨率不够的情况
例4:强行将小分辨率画面拉大为大分辨率画面,即使编码率足够也不会改善画面质量
。
分辨率176×144,编码率200Kbps
右边画面虽小,但起码看起来画面是锐利的。
将上图的视频文件作为片源,强制重新取样转换为分辨率320×240的视频文件,编码率设置为350Kbps。转换后的文件明显给人一直模糊的感觉。因为编码率足够,因此没有出现马赛克的情况,但并没有因为分辨率变大,就能识别更多的画面细节。下面的字幕都是模糊的,不锐利。
编码率/比特率直接与文件体积有关。且编码率与编码格式配合是否合适,直接关系到视频文件是否清晰。
在视频编码领域,比特率常翻译为编码率,单位是Kbps,例如800Kbps
其中
b为比特(bit)这个就是电脑文件大小的计量单位,1KB=8Kb,区分大小写,B代表字节(Byte)
s为秒(second)
p为每(per)
以800kbps来编码表示经过编码后的数据每秒钟需要用800K比特来表示。
1MB=8Mb=1024KB=8192Kb
Windows系统文件大小经常用B(字节)为单位表示,但网络运营商则用b(比特),也就是为什么512K速度宽带在电脑上显示速度最快只有约64K的原因,网络运营商宣传网速的时候省略了计量单位。
完整的视频文件是由音频流与视频流2个部分组成的,音频和视频分别使用的是不同的编码率,因此一个视频文件的最终技术大小的编码率是音频编码率+视频编码率。例如一个音频编码率为128Kbps,视频编码率为800Kbps的文件,其总编码率为928Kbps,意思是经过编码后的数据每秒钟需要用928K比特来表示。
了解了编码率的含义以后,根据视频播放时间长度,就不难了解和计算出最终文件的大小。编码率越高,视频播放时间越长,文件体积就越大。不是分辨率越大文件就越大,只是一般情况下,为了保证清晰度,较高的分辨率需要较高的编码率配合,所以使人产生分辨率越大的视频文件体积越大的感觉。
计算输出文件大小公式:
((音频编码率(KBit为单位)/8+视频编码率(KBit为单位)/8)×影片总长度(秒为单位))/1024=文件大小(MB为单位)
这样以后大家就能精确的控制输出文件大小了。
例:有一个1.5小时(5400秒)的影片,希望转换后文件大小刚好为700M
计算方法如下:
700×8÷5400×1024≈1061Kbps
意思是只要音频编码率加上视频编码率之和为1061Kb,则1个半小时的影片转换后文件体积大小刚好为700M。
至于音频编码率和视频编码率具体如何设置,就看选择的编码格式和个人喜好了,只要2者之和为1061即可。如可以设置为视频编码格式H264,视频编码率900Kbps,音频编码格式AAC,编码率161Kbps。
与文件体积大小有关的码率是指的平均码率,因此,不论是使用固定比特一次编码方式还是使用二次(多次)动态编码方式,都是可以保证文件大小的。只有使用基于质量编码的方式的时候,文件大小才不可控制。
编码格式有很多种,在技术不断进步的情况下,针对不同的用途,产生了各种编码格式。不同编码格式的压缩率不一样,且有各自的特点,有些在低码率情况下能保持较高的画面质量,但在高码率情况下反而画面质量提示不大,有些适合在高码率情况下保持高清晰度画面,但可能在低码率情况下效果不佳
帧率:要了解帧率就必须了解视频播放的一个基本原理。人眼具有视觉延迟的特点,立即拿开眼睛前的一副图像,大脑中却不是立即反应出来的,大约在0.1秒以后,才会反应画面已经拿开。因此,如果给人眼观看一幅幅连续的画面,且速度超过每秒10幅以上的时候,在人脑中就会产生画面连续的感觉,从而感觉自己看到的不是一幅幅独立的图片,而是一个连续的视频。帧率就是视频文件每秒展示在人眼的画面的数量。24帧/秒的意思就是此视频画面每秒变化24次。因为电影的帧率是24帧/秒,所以一般认为,只要视频文件的帧率达到或超过24帧/秒,就可以理解为画面流畅。帧率太低,则必然导致视觉上感觉画面不流畅,如常见共享网站提供的FLV文件,就经常会感觉画面不流畅,因为帧率只有12帧/秒。对于非智能手机等设备,因为硬件运算能力不高,支持的帧率一般也不高,很多手机都只有15帧/秒播放能力,部分手机能力甚至更低,因此手机视频文件普遍不很流畅。当帧率达到30帧/秒的时候,即使非常激烈的画面变化,人眼也能感受到很流畅。人眼能感知的最高速度是60帧/秒。根据帧率的定义,我们能够了解到,当分辨率一定的时候,假设保持同样的清晰度,帧率越高,画面越流畅,需要的编码率也越高,文件体积也就相应变大。
现在我们已经能了解分辨率、清晰度、编码率、编码格式、文件体积大小、帧率之间的关系了。分辨率越大,清晰度越高,画面越流畅,帧率越高,编码率越高,文件体积越大,但越先进的编码标准,可以用更小的编码率实现同样的效果,从而减小文件的体积。一般来说,越先进的编码标准对硬件的运算能力要求越高。
根据具体使用的环境和片源的情况,确定合适的分辨率。在保持一定画面清晰度和声音质量的前提下,确定需要的编码格式,再根据设置的帧率、编码格式的压缩率特点,确定合适的编码率。
转换视频文件的时候,一般要遵循以下的原则,分辨率可以降低,但不能增加,例如可以将640×480的文件转换为320×240的文件,但不必将320×240的文件转换为640×480。因为320×240转换为640×480并不会带来清晰度的提高,只会增加编码率,使文件体积变大。同样的道理,帧率可以降低,但不能增加,人为将12帧的FLV文件转换为25帧的AVI文件,并不会使你的画面变得更流畅。这种转换只是一种纯粹的浪费。编码率与编码格式联系在一起,由于编码格式有些技术先进些,可用较低编码率实现较高的画面质量。因此如果转换时更改了编码格式,则应该根据实际情况确定编码率。更多的时候是根据使用经验确定。
在实际使用中,如果希望把视频网站提供的FLV文件转换为VCD或者DVD,是不实际的,并不会因为你转换了格式,就画面变得更加清楚、流畅,且这种强行转换可能会带来其他的问题,因为MPEG1、MPEG2编码设计的时候并未考虑到这种极低帧率和极低画面质量的情况。