原帖请见tieba.baidu/f?kz=1102144362

Chapter 1视频文件基本原理。
视频文件的起源追溯至图片的起源。大家都知道,光的3原是红绿蓝(Red,Green,Blue),任何一种颜都可以通过三者不同比例调(a,b,c)节后,再控制灰度值(alpha,非必要)达到。储存一个像素需要(a,b,c,alpha)4个数。(题外话:电脑里面图形除了像素还有顶点,顶点用坐标(x,y,z,time)四个数。如果再为某些标量留一个空间,那么比较理想的处理模式是一个周期处理5个浮点数字。这就是为什么AMD的流处理器是5个一组,从R600Turks)。

16bit,按rgba,有5550,5650(人眼对绿最敏感),444424bitrgb每个分量都是8(似乎也有RGBA6666)32bit24bit基础上带有一个alpha通道。24bit基本超过人眼分辨极限,照理说不需要更高的32bit,但是由于计算机2进制不喜欢24更喜欢32,32bit还是被广泛应用。最基础的bmp就是详细纪律每个像素。不过这样很费空间(一个24bit 540pBMP文件要1.48MB,960*540*24/88/1024/1024)。好在很早一种图片格式应运而生并被广泛使用:jp
egjpeg基于24bit存储,但是通过某种算法以及其微小的细节损失为代价极大的压缩图片。在 Photoshop软件中以JPEG格式储存时,提供11级压缩级别,以0—10级表示。其中0级压缩比最高,图像品质最差。即使采用细节几乎无损的10 质量保存时,压缩比也可达 51。经过多次比较,采用第8级压缩为存储空间与图像质量兼得的最佳比例。以BMP格式保存时得到428MB图像文件,在采用JPG格式保存时,其文件仅为178KB,压缩比达到241

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帧预测而来,占用极少的空间,从而使得视频的大小降低。H264RMVB还引入了B帧的概念。B帧不仅参照前面的帧,还能参照后面的帧,B帧要求前后图像差距甚小,压缩效率相对于P帧更为高效。

H264是一种视频标准,实现这种视屏编码的编码器很多,最著名的,也是我们要采用的,就是

在衡量视频质量上面,有两个参数:Quantizer & Quality。以为例,QuantizerQuality都是介于0-61之间的浮点数(以前版本是0-51,Media Coder好像用了0-100
Quantizer更强调体积方面,是用严谨的数学公式推导出来的衡量图片质量的参数。0为无损(每一帧记录一张24bit bmp),61为最压缩(有兴趣可以试试)。一般平均下来21-28)是可以接受的。
Quality更强调质量方面。它是从人类视觉方面考虑,估计图片看上去好与不好。。
。(高智商啊,汗颜)它无法准确表示视频大小,但是却更能体现视频清晰与否。一般18-26是最佳区间。0为无损。61最差。

规格上H264定义了Profile,每个profile下还有更细的level,表示支持什么样的技术。从Baseline ProfileMain Profile再到High Profile(其实还有其他的profile级别,但是不重要),支持的技术越来越多(比如Baseline不支持B王鹤棣女朋友刘艺帧,Main就支持),也对解码器的要求越来越高。电脑上的播放器支持最高规格的High Profile Level 5.1是天经地义,iPhonePSP只支持Main Profile Level 3Apple H264渣啊,真是渣)。所以很多人奇怪为什么电脑上明明能放,拷到移动设备里就囧了,原因很可能就在于你的level太高。顺道得瑟一下,国产机皇M9直接硬解1080p High Profile 5.1毫无压力;Apple iPhone 4M9相似的图形芯片,照理硬件上是支持的,但是苹果就是不愿意升级软件。
到此,视频原理介绍基本结束。
视频中除了H264(常见后缀名:mp4,mkv,264,RMVB(后缀名:rmvb),还有XVID之类的(.avi,.所以不要以后看见mkv直接联想到H264)。请注意,这些文件只有视频,没有音频。也就是你打开一个刚压缩好的视频是不会有声音的。


通过上述的介绍,有些人可能奇怪:这上面完全没讲如何存储声音啊?但是我打开一个MP4文件是有声音的啊。。不要急,以下简述音频:
无损音频,APEFLAC最为常见;但不是什么设备都支持。
有损音频的老牌霸主是MP3,几乎不存在不支持Mp3的移动设备。不过现在AAC更好,前提是。。额。。你用的不是古董级别的东西。

下面就是封装格式登场了。
所谓封装,就是把音频和视频封装在一起。
AVI封装格式:支持后缀名为.avi的视频和多数音频(马天宇微博wav,)以及srt字幕的整合。现在一般来说整合的是DIVX或者XVID视频。生成文件后缀为avi.(这个avi文件打开就有声音了,但是你要知道它其实是把一个avi和一个mp3结合起来的产物)。以前见到过AVI里面封装了H264的,但是。。实话实说我不知道怎么做到的。难道是有了新的技术支持?
MP4封装格式:支持后缀名avi.mp4等(不支持mkv)视频和多数音频以及srt/idx字幕整合。
继续说一句,这货里面装的可能不是h264MP4封装格式兼容性非常好,几乎所有的设备都支持,因此我们主要用它来封装。
MKV封装格式:最高级,支持几乎所有格式的视频+最多两个音频文件+几乎所有格式字幕封装。正是因为它太高级了,不是所有的东西都能完美兼容它的。建议不要在移动设备上使用。同样,光看到.mkv你永远不知道里面装的是H264还是RMVB还是WMV还是其他。。或者根本就不是视频,里面装了个秘密文件。

总结一下:当我们在PC上播放一个电影的时候,虽然并没意识到,实际上我们至少在同时播放一个视频流和一个音频流。由于同时播放两个文件,比如一个MP3音频文件和一个视频文件,是非常不现实的,因此我们把音频和视频打包到一个文件里,这个文件就叫做容器格式文件,与ZIP文件相类似。这种容器格式文件及其相关软件必须提供许多重要功能,比如在播放时保证音视频的时序一致。WinZIP或者WinRAR可以方便地打包多个音视频文件在一起传输,但是它们显然无法解决保证时序播放的问题。目前比较知名的容器格式包括AVI.avi)、MPEG.mpg, .mpeg)、QuickTime.mov)、RealMedia.rm)、MP4.mp4)等等。


这些与压片关联不是很大,但是作为基础知识还是建议大家学习一下。
请期待下期:有关软件介绍+文件分割+音频压制。

有了前两章的基础,下面正式开始介绍用MEGUI压制H264
首先就是将片源写进avs。如果你没看懂上章中关于avs部分的介绍也米啥要紧,你只要记住,比如一个文件名称是a.mkv,你只要写个以avs为后缀名的文本文件,里面写”DirectShowSource(“a.mkv”)”+回车就好。

如果是做BDRIP的,那么原盘也好,iso也好(可以借助虚拟光驱),到盘里面的视频文件(一般就是那种体积最大的,后缀名*.vob,那么就是”DirectShowSource(“*.vob”)”),然后同样写进avs即可。

打开MEGUI主界面,这里如果是64bit Os的,可以在options-settings-external program settings里面把 enable 64bit Mode 勾选。作用是开启

Video Encoding一栏中,在Avisynth Script里载入刚刚写好的avs文件(如果利用MEGUI自己的生成器,那么生成之后默认直接载入)。在encoder settings里面选择任意一个以X264开头的,然后点击config。真正技术含量的东西现在开始。
Encoding mode就是编码方式。如果你是要精确大小,这里可以选automatic 2pass,然后指定你要的码率。不过一般来说Const Quality同码率下又快又好,所以还是建议用CQ

后面选什么数字要看情况。越大表明质量越差,越小文件越大。0是无损。一般18-26是你想要看的,如果是追求很好的质量可以降低到1619-21.5是比较平衡的区间。总的来说选19左右比较好。

Tuning一栏表示片源类型。一般animation是属于动漫(节奏舒缓,较少画面变化特别剧烈,尤其是背景啥的很多都是静止的)。Film就是一般的电影,Grain是动作片了(画面变化很剧烈)。这里我们以动漫为例(如果想压制电影啥的,后面的参数最好变动,欢迎跟帖讨论)。

选好后选Target Playback Device,就是你要在什么上面看。如果就是电脑(或者支持性很强的,比如android平台的moboplayer),可以选Default。苹果系列、Nokia系列、PSPPS3Xbox 360都有对应选项。请注意android G1是古董级别的东西,不要选,现在的an
droid机器普遍高级多了。moboplayer软解原则上能搞定一切,而且只要你的分辨率小于540p960*540),码率不会很大,一般现在的android机器都能软解了。顺道推荐对于手机的分辨率为640*480 或者 640*360。再高没意义了。

选好了之后,上方的AVC Profile & AVC Level都自动设置好了。如果之前选的是Default南京大屠杀是哪一天,AVC Level会是Unrestricted/Autoguess,可以手动设置成5.1方便编码器设置。

随后将Show Advanced Settings选项开启。
标签选到FrameType

H264 Features里面:
Deblocking:对片源开启降噪,默认并建议开启,下面是alpha & beta两个参数,如果前面选了动漫,那么自动设置成(1,1),可以不改,也可以改成默认值(0,0)加强少数时候画面剧烈变化时的画质。

CABAC:默认并开启。

GOP SizeGOP 就是由Key Frame隔开的区间,一般就是一段固定场景。Maximum的设置大约为码率*10-15(我们假设一段场景不超过15s),所以一般是360。不建议低于250

Minimum建议设为1
Open GOP不要选,可能引起兼容性问题。

Slicing不要更改。

B-Frames
设置B帧的参数。这段参数对视频质量和大小影响颇为重要。

Weighted Prediction For B-frames,一般开启。
Number of B-frames:最大允许连续B帧数量。对于动漫可以选择5-7。越舒缓的动漫值越大。不建议超过10。越大的数值一般使得文件大小越小。
B-frame BiasB帧可能指数。默认0。正值倾向于增加B帧,负值倾向于减少B帧。如果B-frams设置的较大,可以改成-1

Adaptive B-frames:选择判断是否插入B帧的方式。默认是1-fast,快速模式,建议选择。如果想要更好的决策方式,可以选2-optimical,但是会使得编码速度变慢。

B-pyramids:选择B帧参考方式。None一般不选,Strict表示只能参考P帧或者I帧,只在B帧数量小于等于2时建议。除了压蓝光,基本都是选择normal几月几号是母亲节?表示不受限制。

Others
Number of Reference Frames:参考帧数量。建议选择3-6BD-Rip级别动漫最好设置成5-6DVDRip建议3-5。越大数值编码越慢,质量也越好。(如果选择了Const Quality则意味着文件越小)

Number of Extra I-framesI帧灵敏度,越高表示越容易插入I帧。I帧因为独立编码所以拥有最好的画质,对于动漫建议从默认值40提高到50以人为增加I帧数量。

下面若干选项无甚重要,默认即可。Rate Control标签卡:
Quantizers:设定量化参数。
MinMax表示最小最大,一般默认069
Delta表示相邻两帧间变化值。默认4,建议拉大到5-6让编码器能更灵活面对不同片源。
Quantizer RatioIPB量化值比例为多少。建议默认。高码率或者Quality设置小于18的可以将P-B设置成1.2提高B帧质量。
余下不甚重要,默认即可。

RateControl
VBV的三个默认即可,前两个也可以设置为常用的50000

Bitrate Variance:允许的比特率偏移值,在平均比特率模式下可以开启。因为我们期望文件随着画面变化不同来调节比特率,所以可以拉大到95表示允许偏离95%.

QuantizerCompression:允许Quantizer偏离值。建议从0.6降至0.5,因为这样配合MB-Tree可以发挥更好的效果。

下面两个选项默认即可。

Adaptive Quantizers
X264倾向于无视某些类似天空、海洋等大面积相似背景的细节,这个选项开启增强处理。对于动漫,倾向于选Variance AQStrength=0.6-0.7

Quantizer Matrice不要更改。

Nb of Frames for Lookahead:为了控制码率预读取的帧数。250最大。越大的数值对码率控制越有效但也越慢,DVD-Rip建议不低于70刘萌萌写真720p建议不低于100。画面党直接拉到250未尝不可,不慢太多。

Use MB-Tree:开启。Analysis标签卡:

Motion Estimation:顾名思义就是对画面中运动物体的编码效果设置区域:

Chorma Me:开启。不然画面惨不忍睹
MerangeMealgorithm分别是对运动物体运动后的搜索半径和搜索方式。
Range与分辨率成正比。一般1080p建议32-64,720p建议24-48,540p/800*600建议16-32360p/480p建议16-24,更低分辨率建议8-16

算法上,速度党建议选Hexagon6边形式搜索),画质党/硬盘吃紧党建议选MultiHexExhausitive 那个时间增长简直是级数级别。。

Macroblocks一般选all
Extra里面建议全部默认(部分选项在选定了片源是animation后自动设置好)。如果片源质量不好需要降噪,在avs里面设置更好,如果没有设置或者想快速降噪,最后一项中noisereduction设置成700左右。
Misc选项卡无需更改。

最后选OK是保存到现有模板。不想覆盖可以选New新建一个。
然后就是回到主界面,enqueue后到queue里执行。北京高考作文

完结后,会有一个新的mp4压出来。再配合音频(如果你认为原视频的音频无需压缩,那么直接分离就好,否则用上章所述方式压一个)就可以装包了。

主界面菜单栏Tools-Muxer里面可以选MKV或者MP4封装,如果是移动设备推荐MP4因为兼容性好,否则也可以选MKV。点开后,界面重上到下分别是视频(Video Input)、音频(Audio Input)、字幕(Subtitle)文件。Output中指定输出名称。依次选择即可,最后送往queue等候处理。

最后封包后就是最终成品了。