x264压制笔记(v0.3,20100112)
前言
很多都是个人理解,参照了hdbits、x264wiki的一些文章。斜线为自己的理解,可能有问题哦。
视频处理部分,MeGui,x264等等
首先是写AVS
AVS中
Crop (0,0,-0,-0)
分别代表左上右下。顺时针。
如果是奇数,那么就需要用
spline36resize(1920,816,0,131,0,-133)
也就是把resize和crop写到了一起。但是可能会造成质量损失。
mod16和mod4?不是很明白...
OAR,Original Aspect Ratio
让切片接近OAR
OAR=(高/宽)*1280
MeGUI的使用
MeGUI的参数以及Tips
- subme,subpixel refinement=9。
- M.E.Range,24 for movie,64 for anime。
- 不要选择Tubro参数,虽然速度慢了,但是效果好。
- 计算Bitrate,使用Bitrate calculator
- 使用AVSCutter,可以方便的切片段。
一行行的来解释。有些可能megui里面并没有列出。
Main
Profile
- 一般都是High,除非你的播放器不支持。比如,HighLevel 4.1。
- 其他参数,有baseline,main以及high。
Presents
新的x264(r1177)里面加入的。和速度有关系,建议值是你能容忍的最慢的值。
Tune
会在presents之后,其他所有参数之前被应用。根据你的源来确定,如果不确定你的源,那就不指定(default)。
可能参数:file,animation,grain,psnr,ssim,fastdecode,zerolatency,touhou..
Slow-firstpass
在结尾加上--pass 1自动加上了特定的一些参数。在最慢的么present下无效。参见wiki。
Frame-Type栏
Frame-Type Option
keyint(貌似megui里面没有?)
设置x264输出中, IDR-frame之间的最大间隔。
什么是IDR-frame?IDR-frame就是该帧的另一边没有可参照的帧。IDR-Frame需要I-Frame,但是不是所有的I-Frame都是IDR-Frame。大多数情况x264会把场景的第一个帧做为IDR-Frame。
建议值:
Blu-Ray设置为framerate的10被,其他设置为5~10倍。
min-keyint
IDR-frame之间的最短长度。
建议及默认值:
默认25,建议默认或者1xframerate。
no-scenecut
默认以及建议值
未设置。作用完全禁止adaptive I-frame decsion
scenecut
设定I/IDR帧放置的阀值。x264会计算每个帧和前面帧的不同,如果不同值低于“scenecut”,那么就确定为是一个scenecut,如果同时又少于min-keyint帧数,那么就随后放置一个I-frame,否则会放置一个IDR-frame。这个值越高,增加scenecut被侦测的几率。
默认值40
Bframes
默认3。设定x264最多能同时使用多少个b-frame。
如果没有b-frame,那么x264的帧类型如下:IPPPPP...PI,如果--bframe 2,那么就最多两个连续的P可以被替换为B,比如IBPBBPBPPPB..PI
B-frame和P-frame的区别在于B可以对将来的帧使用动态预测(motion prediction)。可以显著的提高压缩率。平均质量通过pbratio参数控制。如果可能的话,用b-adapt来强制x264使用固定的B-frames。
默认以及建议值
如果是--b-adapt 2,--bframes越高会显著的降低压缩速度,但是没有太多的好处。一般设置为2~5。Blu-Ray限制了最大B-frames到3。
如果不是--b-adapt 2,那么使用--bframes 16(怎么这么拗口...:lol),也就是最大值。这是最合适以及最快的压制参数。
即:--b-adapt影响到--b-frame的选择。
更多信息关于B-Frame
B帧可以/也不可以参照另一个B帧,假设后面的B帧是另一个B帧的参考帧。这就是B-frame的两种形式,比方叫做"B"和"b"。
要确定压制的时候使用多少个B-frame,参考x264 log中的'consecutive B-frames',
b-adapt
设定B-frame放置决定算法。控制x264如何决定是放置一个B还是一个P帧。多pass下时,该参数仅对Pass1有效,因为在pass1中frame types就决定了。
- 0,禁用。始终选择B-frames。等同与 --no-b-adapt参数。
- 1,老式算法。更快,在高--b-frames的情况下略微提高速度。
- 2,新算法。速度慢,高--b-frames下时略微减慢速度。
建议参数
2,如果你不怕耽误时间的话。
b-bias
控制代替P-frames的B-frames的可能性。大于0的数值增加B-frames的权重,小于0的相反。不是数值型的,只是主观的度量。数值从-100~+100,100并不代表保证所有的P-frame会被替代--使用--badapt 0效果更好。
建议参数
0,除非你认为你比x264更好的控制。
b-pyramid
允许用B-frame作为其他帧的参考帧。如果没有这个设定那么只能用I/P帧。虽然I/P用起来效果更好(IP的画质好),但是B-frame同样可用。
作为参考帧的B-frame会得到P-frame以及正常B-frame的一般quantizer(容器,编码器?)。在b-pyramid工作前,至少需要2歌B-frame。
参数有3种,
- none,不使用B-frame作为参考帧。
- strict,使用一个B-frame作为参考帧,是Blu-Ray规范制定的。(allow one B-frame per minigop to be used as reference,什么是minigop...)
- normal,允许多个B-frame作为参考帧。
默认以及建议参数
设置为Normal。如果是Blu-Ray,使用None或者Strict。
no-cbac
关闭cbac并且使用老式的cavlc。降低效率。
- CBAC=Context Adaptive Binary Arithmetic Coder
- CAVLC=Context Adaptive Variable Length Coder
默认以及建议值
未设定。建议使用CBAC。
ref
控制DPB(Decoded Picture Buffer)的大小。从0~16。这个值代表每个P-frame可以用来作为参考帧的个数。根据B-frames本身是否被用作参考帧,它用到的会少1~2个。最小值为1。
需要注意的是ITU-T(国际电信联盟)标准限制了DPB以及每个level的ref数目。如果遵守Level 4.1标准的话,1080p和720p的大小分别是9以及4。如果视频高度非标准高度,应该使用高一点的ref值。Blu-Ray和HD-DVD用到的就是Level 4.1标准,并且是众多播放器比如xbox,ps3所支持的最高标准。这也是为什么设置错误的ref会造成无法硬解的原因。
公式:
- maximum ref = MaxDPB * 1024 / ( width * height * 1.5)
- or
- 8388608/(宽x高)
建议及参考值
4~6。增加会造成质量降低以及速度损失。非常大的ref并不有效,但是16的ref在动画,视频游戏捕获,CGI记忆其他场合比较有效。
有个列表
- 1280x544,12
- 1280x720,9
- 1920x800,5
- 1920x816,5
- 1920x1080,4
no-deblock以及deblock
- no-deblock关闭掉loop filter。当然,很没有必要。
- deblock,控制loop filter,又称为inloop deblocker,是H.264标准的一部分。
Deblocking
两种Deblocking,称为Deblocking strength以及Deblocking threshold,分别对应Alpha Deblocking以及Beta Deblocking(官方名称)。
- Alpha Deblocking,越高越有效,但是会摧毁细节,将图像变得平滑。默认0。一般在-3~3之间。当使用cqm时,建议使用默认值,不能超过+/-2。
- Beta Deblocking,决定在块中的东西是否是细节(detail),当Deblocking应用在他上面时。我估计这玩意是用来判断哪些画面属于block的。原文看后面。一般来说这个值不用修改。
- 一般来说,-3:-3比较流行。如果是动画的话, 高一点比较好。
Lower values of Beta Deblocking apply less deblocking to more flat blocks with details present (but more deblocking to blocks without details), while Higher values cause more deblocking to be applied to less flat blocks with details present.
interlaced(交错)
默认没有设置。x264的interlaced encoding比progressive encoding效率更低。所以最好在压制前反交错一个源,而不是使用interlaced模式。
slice,slice-max-size,slice-max-mbs
设定每个帧中的片。并且枪支直角slices。如果设定了slice-max-size或者slice-max-mbs则会覆盖掉slice。
后面两个,设定最大的slice大小(单位字节),包含estimated NAL overhead,以及设定macroblocks中最大的slice大小。两者都和interlaced不兼容。
建议值:
不要使用slice,除非是blu-ray。用4。
contrained-intra
默认没有设置。允许constrained intra预测。用于base layer of SVC encodes。
Rate-Control
Subpixel Refinement
一般称为subme。建议值:8~10。
Adaptive Quantizers
aq 0.7~1.5。很复杂,后面继续写。
Threads
--thread auto即可。但是四合的话,最好是--threads 6....不是很明白。
Bitrate
1080p,8000~14000k
720p,4000~6000k
Crf,Constand Rate Factor
crf,18~21用于1080p,越低,质量越高。720p,crf18最佳。
x264的quants(不适用于psy-rdo patch)
首先抄一段hdbits wiki的例子
avis [info]: 1920x800 @ 23.98 fps (225877 frames)
x264 [info]: using cpu capabilities: MMX MMXEXT SSE SSE2 SSSE3
x264 [info]: slice I:19020 Avg QP:14.99 size:135578
x264 [info]: slice P:104481 Avg QP:16.42 size: 63445
x264 [info]: slice B:102376 Avg QP:18.27 size: 25097
x264 [info]: mb I I16..4: 10.3% 61.9% 27.8%
x264 [info]: mb P I16..4: 1.3% 16.4% 5.2% P16..4: 44.0% 21.7% 4.9% 0.2% 0.1% skip: 6.1%
x264 [info]: mb B I16..4: 0.1% 1.3% 0.3% B16..8: 32.7% 2.0% 3.6% direct: 9.0% skip:51.1%
x264 [info]: 8x8 transform intra:67.7% inter:48.0%
x264 [info]: direct mvs spatial:89.3% temporal:10.7%
x264 [info]: ref P 66.7% 17.7% 9.1% 3.8% 2.8%
x264 [info]: ref B 81.9% 12.0% 3.7% 1.4% 0.9%
x264 [info]: kb/s:10000.5
这是MeGUI压制完成后的log。
我们关注3~5行(黑色部分)。Average Quantizer代表Transparency to the source,其中0代表1:1,也就是和源一摸一样。
好的数值:
- 小于16,17,浪费了空间,文件太大了。可以降低码率。
- 大于25,26,码率太低了,杀掉了太多的细节。尝试提升码率。
- 因此试图让AQ大小控制在18~24之间。当然,如果源就是一个shit,那么只不过拷贝了一个shit...哈哈。
- 2pass会降低AQ 1.5~2个点。如果运行的是一个Tubro 1st pass,
x264在卡通、动画以及CGI下的特殊设定
对于Cartoon的特殊设定
- Reference Frames,1080p可以用到10,但是注意,超过5之后就不是L4.1兼容了。
- Psy-rdo可以使用,但是要低一点,因为会产生artifacts。
- Trellis 0和2之间测试,因为会破坏图像质量。
- 降低或者关闭AQ,
对于Animated(CGI)的特殊设定
- psy-rdo降低,低于1.0。
- Trellis一般0~2。
- aq低值,0.5~0.9。
- 禁用dct-decimate,如果源非常锐(sharp/detailed source),但是需要提升一点比特率。
- reference frames增加,但是注意兼容性。
- 禁用Weighted Prediction帮助提升细节--通过将--weightb去除掉。
命令行运行x264
如果想将x264运行于低优先级,那么写好bat之后,使用
start /b /low x264.exe
即可。如果已经使用了/b /low,那么就没必要在bat里面再让x264.exe使用地优先级了。
AVSP比较图片
比较的简单。注意如果两个片源老是自动同步帧---而其实根本不是同一帧---我们可以将第一个视频Trim (1,1000),然后再和第二个对比,这样就不会自动同步了。
音频处理部分
eac3to
可用于demuxing,DTS encoding等等。这个似乎可说的不多。eac3to也可以用于合并m2ts,evo,或者解音频,字幕等。不过一般用的都是TSMuxer。
其他(视频文件处理如Demux,字幕)
啊啊
最后
Thanks to "GrandDK's x264 Reencode Guide - HDWiki"in hdbits.
高级设定(切音轨,段落等)
段落的设定
使用xml完成。待完成。不多写了。