原帖请见/f?kz=1102144362Chapter 1:视频文件基本原理。
视频文件的起源追溯至图片的起源。
大家都知道,光的3原色是红绿蓝(Red,Green,Blue),任何一种颜色都可以通过三者不同比例调(a,b,c)节后,再控制灰度值(alpha,非必要)达到。
储存一个像素需要(a,b,c,alpha)4个数。
(题外话:电脑里面图形除了像素还有顶点,顶点用坐标(x,y,z,time)四个数。
如果再为某些标量留一个空间,那么比较理想的处理模式是一个周期处理5个浮点数字。
这就是为什么AMD的流处理器是5个一组,从R600到Turks)。
16bit,按rgba,有5550,5650(人眼对绿色最敏感),4444。
24bit即rgb每个分量都是8位(似乎也有RGBA各6666)。
32bit在24bit基础上带有一个alpha通道。
24bit基本超过人眼分辨极限,照理说不需要更高的32bit,但是由于计算机2进制不喜欢24更喜欢32,32bit还是被广泛应用。
最基础的bmp就是详细纪律每个像素。
不过这样很费空间(一个24bit 540p的BMP文件要1.48MB,960*540*24/88/1024/1024)。
好在很早一种图片格式应运而生并被广泛使用:jpeg。
jpeg基于24bit存储,但是通过某种算法以及其微小的细节损失为代价极大的压缩图片。
在Photoshop软件中以JPEG格式储存时,提供11级压缩级别,以0—10级表示。
其中0级压缩比最高,图像品质最差。
即使采用细节几乎无损的10 级质量保存时,压缩比也可达5:1。
经过多次比较,采用第8级压缩为存储空间与图像质量兼得的最佳比例。
以BMP格式保存时得到4.28MB图像文件,在采用JPG格式保存时,其文件仅为178KB,压缩比达到24:1。
jpeg的诞生使得图片存储变成小case,接下来就是视频技术了。
最早的视频就是对于每一帧的图片记录一个jpeg。
不过这样做的弊端显而易见:文件太大了。
以上文中178KB为例,假如一部100分钟的电影,24fps(24帧,即每秒钟24张图片),平均每张图片178KB,那么需要的空间是:100*60*60*24*1788/1024/1024/1024=14.4TB。
不解释了。
一个很明显的优化思路就是:一般前后两帧的图片相差无几,可不可以对于场景变化时,先用一个完整的帧记录开始的情况,然后后续几帧只几率和开始帧不同的地方呢?答案是肯定的。
于是对于每一小段场景类似的地方(这一段术语上叫做GOP),第一帧就叫做I帧,后续记录与I帧不同的地方的帧就叫做P帧。
P帧由在它前面的P帧或者I帧预测而来,占用极少的空间,从而使得视频的大小降低。
H264和RMVB还引入了B帧的概念。
B帧不仅参照前面的帧,还能参照后面的帧,B帧要求前后图像差距甚小,压缩效率相对于P帧更为高效。
H264是一种视频标准,实现这种视屏编码的编码器很多,最著名的,也是我们要采用的,就是X264.exeX264.exe在衡量视频质量上面,有两个参数:Quantizer & Quality。
以x264.exe为例,Quantizer 和Quality都是介于0-61之间的浮点数(以前版本是0-51,Media Coder好像用了0-100)Quantizer更强调体积方面,是用严谨的数学公式推导出来的衡量图片质量的参数。
0为无损(每一帧记录一张24bit bmp),61为最压缩(有兴趣可以试试)。
一般平均下来21-28)是可以接受的。
Quality更强调质量方面。
它是X264.exe从人类视觉方面考虑,估计图片看上去好与不好。
(高智商啊,汗颜)它无法准确表示视频大小,但是却更能体现视频清晰与否。
一般18-26是最佳区间。
0为无损。
61最差。
规格上H264定义了Profile,每个profile下还有更细的level,表示支持什么样的技术。
从Baseline Profile到Main Profile再到High Profile(其实还有其他的profile级别,但是不重要),支持的技术越来越多(比如Baseline不支持B帧,Main就支持),也对解码器的要求越来越高。
电脑上的播放器支持最高规格的High Profile Level 5.1是天经地义,iPhone、PSP只支持Main Profile Level 3(Apple H264渣啊,真是渣)。
所以很多人奇怪为什么电脑上明明能放,拷到移动设备里就囧了,原因很可能就在于你的level太高。
顺道得瑟一下,国产机皇M9直接硬解1080p High Profile 5.1毫无压力;Apple iPhone 4和M9相似的图形芯片,照理硬件上是支持的,但是苹果就是不愿意升级软件。
到此,视频原理介绍基本结束。
视频中除了H264(常见后缀名:mp4,mkv,264),RMVB(后缀名:rmvb),还有XVID之类的(.avi,.mkv...所以不要以后看见mkv直接联想到H264)。
请注意,这些文件只有视频,没有音频。
也就是你打开一个刚压缩好的视频是不会有声音的。
通过上述的介绍,有些人可能奇怪:这上面完全没讲如何存储声音啊?但是我打开一个MP 4文件是有声音的啊。
不要急,以下简述音频:无损音频,APE和FLAC最为常见;但不是什么设备都支持。
有损音频的老牌霸主是MP3,几乎不存在不支持Mp3的移动设备。
不过现在AAC更好,前提是。
额。
你用的不是古董级别的东西。
下面就是封装格式登场了。
所谓封装,就是把音频和视频封装在一起。
AVI封装格式:支持后缀名为.avi的视频和多数音频(wav,mp3,aac...)以及srt字幕的整合。
现在一般来说整合的是DIVX或者XVID视频。
生成文件后缀为avi.(这个avi文件打开就有声音了,但是你要知道它其实是把一个avi和一个mp3结合起来的产物)。
以前见到过A VI里面封装了H264的,但是。
实话实说我不知道怎么做到的。
难道是有了新的技术支持?MP4封装格式:支持后缀名avi.mp4等(不支持mkv)视频和多数音频以及srt/idx字幕整合。
继续说一句,这货里面装的可能不是h264。
MP4封装格式兼容性非常好,几乎所有的设备都支持,因此我们主要用它来封装。
MKV封装格式:最高级,支持几乎所有格式的视频+最多两个音频文件+几乎所有格式字幕封装。
正是因为它太高级了,不是所有的东西都能完美兼容它的。
建议不要在移动设备上使用。
同样,光看到.mkv你永远不知道里面装的是H264还是RMVB还是WMV还是其他。
或者根本就不是视频,里面装了个秘密文件。
总结一下:当我们在PC上播放一个电影的时候,虽然并没意识到,实际上我们至少在同时播放一个视频流和一个音频流。
由于同时播放两个文件,比如一个MP3音频文件和一个视频文件,是非常不现实的,因此我们把音频和视频打包到一个文件里,这个文件就叫做容器格式文件,与ZIP文件相类似。
这种容器格式文件及其相关软件必须提供许多重要功能,比如在播放时保证音视频的时序一致。
WinZIP或者WinRAR可以方便地打包多个音视频文件在一起传输,但是它们显然无法解决保证时序播放的问题。
目前比较知名的容器格式包括A VI(.avi)、MPEG(.mpg, .mpeg)、QuickTime(.mov)、RealMedia(.rm)、MP4(.mp 4)等等。
这些与压片关联不是很大,但是作为基础知识还是建议大家学习一下。
请期待下期:有关软件介绍+文件分割+音频压制。
有了前两章的基础,下面正式开始介绍用MEGUI压制H264。
首先就是将片源写进avs。
如果你没看懂上章中关于avs部分的介绍也米啥要紧,你只要记住,比如一个文件名称是a.mkv,你只要写个以avs为后缀名的文本文件,里面写”DirectSh owSource(“a.mkv”)”+回车就好。
如果是做BDRIP的,那么原盘也好,iso也好(可以借助虚拟光驱),找到盘里面的视频文件(一般就是那种体积最大的,后缀名*.vob,那么就是”DirectShowSource(“*.vob”)”),然后同样写进avs即可。
打开MEGUI主界面,这里如果是64bit Os的,可以在options-settings-external program set tings里面把enable 64bit Mode 勾选。
作用是开启64bit X264.exe在Video Encoding一栏中,在Avisynth Script里载入刚刚写好的avs文件(如果利用MEG UI自己的生成器,那么生成之后默认直接载入)。
在encoder settings里面选择任意一个以X264开头的,然后点击config。
真正技术含量的东西现在开始。
Encoding mode就是编码方式。
如果你是要精确大小,这里可以选automatic 2pass,然后指定你要的码率。
不过一般来说Const Quality同码率下又快又好,所以还是建议用CQ。
后面选什么数字要看情况。
越大表明质量越差,越小文件越大。
0是无损。
一般18-26是你想要看的,如果是追求很好的质量可以降低到16。
19-21.5是比较平衡的区间。
总的来说选19左右比较好。
Tuning一栏表示片源类型。
一般animation是属于动漫(节奏舒缓,较少画面变化特别剧烈,尤其是背景啥的很多都是静止的)。
Film就是一般的电影,Grain是动作片了(画面变化很剧烈)。
这里我们以动漫为例(如果想压制电影啥的,后面的参数最好变动,欢迎跟帖讨论)。
选好后选Target Playback Device,就是你要在什么上面看。
如果就是电脑(或者支持性很强的,比如android平台的moboplayer),可以选Default。
苹果系列、Nokia系列、PSP、PS3、Xbox 360都有对应选项。
请注意android G1是古董级别的东西,不要选,现在的android机器普遍高级多了。
moboplayer软解原则上能搞定一切,而且只要你的分辨率小于540p (960*540),码率不会很大,一般现在的android机器都能软解了。
顺道推荐对于手机的分辨率为640*480 或者640*360。
再高没意义了。
选好了之后,上方的A VC Profile & A VC Level都自动设置好了。
如果之前选的是Default,A VC Level会是Unrestricted/Autoguess,可以手动设置成5.1方便编码器设置。
随后将Show Advanced Settings选项开启。
标签选到FrameType:H264 Features里面:Deblocking:对片源开启降噪,默认并建议开启,下面是alpha & beta两个参数,如果前面选了动漫,那么自动设置成(1,1),可以不改,也可以改成默认值(0,0)加强少数时候画面剧烈变化时的画质。