渣压制参数调整与上传计划

20151218 EDIT:压制总结

级别、帧率、DPB详解:

http://www.cnblogs.com/zyl910/archive/2011/12/08/h264_level.html

关于三星S7562:

三星S7562最新实验结果与之前有异,并非直接照搬PSP的要求。具体为分辨率不超过屏幕分辨率800×480,在此情况下参考帧最大可设为8,超过则系统直接报错拒绝硬解。也就是DPB为(800*480)/(16*16)*8=12000,介于标准3.0的8100到3.1的18000之间。

但是硬解驱动有个bug,若分辨率小于800×480,系统层会以实际的分辨率计算DPB数,检测不超过12000就会进行硬解,而硬解驱动的实现似乎是不管输入分辨率多少,送给芯片的都是800×480,可能是写驱动的人偷懒,直接给分辨率不到800×480的补上黑边扔给芯片了。这造成ref大于8的系统层检测是同意硬解的,但是一旦引用到超过8的ref势必就会花屏。在之前的压制参数里,没有限制ref,但是因为有b-pyramid=0使b帧不能引用,因此实际ref在大部分情况下不会超过8,所以花屏很少出现。

关于b-pyramid=0,即ref不能是b帧,否则播放时会跳帧闪屏。有意思的是MX Player的“硬解码+”功能可以修复这个问题,不知道是如何做到的。同样的其它参数下不能引用b帧会带来不少的压缩率浪费,以前测试基本上在2%的样子,即50M的视频会增加1M大小。而这个参数实在很小众,除了古代的PSP,只有我这个三星会这样,我这几年都没见过专门去设这个参数的片源,实测b站也没设这个参数,因为用这个手机看会出现跳帧的情况。既然MX Player可以修复之,我大概可以放心地在以后压片的时候去掉对这种手机的兼容以节省2%的空间了。

其他的坑:

苹果iPhone4S和iPad2也有个bug,就是不管分辨率多小的视频,ref最大只能是15,和DPB无关。在新的苹果上设16就没问题。

iPhone4目前不在手头,到底支不支持high 4.1稍后再测试(可用参数1280×720 high 4.1 ref 8测试,因为1280×720下level 3.1的ref最大只能是5)。可以知道的是MeGUI的target device设置的参数并不是完全准确的。

今天还遇到了一个非常神奇的坑,对VCD做RIP时,若视频部分x264输出的是raw 264(raw264好处是可以在编码过程中打开预览,而mp4必须有索引所以只能等编码结束),则在iPhone4S/iPad2上播放时,音频没有正常delay导致不同步,在电脑上播放就能正常同步。而编码时x264若输出mp4文件则mux出来在iPhone4S和iPad2上就没有问题。

===========================================================

起因是最近又补了几部漫,收藏后却发现以前的参数压出的片没法在S7562上播,包括以前压好的EVA、School Days等。

用其他参数试验了几次,结合一些网络上的经验参数,结论是该手机硬解只能支持Main 3.0 480P的影片,并且16:9的848×480也超出了分辨率要求,估计是不能超过手机分辨率的800×480。另外,B帧不能作为参考帧使用,即需要设置b-pyramid为0,否则播放时会错误地引用I帧导致画面闪屏。

一种处理方案是将分辨率调整到704×396,但这样又未免太小,在电脑上全屏时很不舒服。所以笔者采用另一种方案,即PSP的480P压制方法,也就是DVD标准的720×480,并指定SAR为32:27以在播放时拉伸到16:9。Main 3.0 720×480下参考帧最大是6。

720×480的缺陷是部分播放器没有正确处理SAR而使用原始比例播放造成画面变形,经测试,电脑上WMP、PotPlayer、Chrome等均能正确还原比例,iPad内置播放器、百度云PC端浏览器Flash播放器也可还原,但S7562、Windows Phone、百度云iOS客户端无法正确还原。不过S7562上可以通过全屏拉伸到800×480来得到近似的还原。

对于720P,Main 3.0肯定无法支持。目前的iOS通吃High 4.1的720P,不过对于iPad 1是只能支持到Main 3.1。1280×720下Main 3.1的参考帧最大是5,这个级别的720P已经非常够用了。综上,综合画质、大小、速度、兼容性四个方面的考虑,Po主的渣压片经验参数调整为如下的傻瓜参数:

480P:
–preset veryslow –profile main –level 3.0 –b-pyramid none

480P 16:9:
–preset veryslow –profile main –level 3.0 –b-pyramid none –vf resize:720,480,32:27

720P:
–preset veryslow –profile main –level 3.1

其中preset=veryslow相当于设置了以下参数:

b-adapt=2, bframes=8, direct=auto, me=umh, merange=24, rc-lookahead=60, ref=16, subme=10, trellis=2

ref在设置profile与level时会被重写为最大支持的数值,subme=10分析比subme=9可以提高7%左右的压缩率,且多消耗的时间并不多。me没有必要设置更高的数值,esa仅能比umh提高1%左右压缩率,但时间会增加一倍,不划算。在High 4.1下进一步提高ref得到的好处也并不多,且会大大增加消耗的时间。crf依旧是默认的23,准高清的画质是完全够看的。

渣成果有空会上传到百度云盘上。话说百度云盘真的是个很YD的地方,可以直接在线或使用pad看别人分享的视频,绝对秒杀youtudou以及当年的115、jshare,许多被萌化大神和谐的片子也能找到(如《Death Note》),妈妈再也不担心我没有动画片看了。

复习一下有关压片

室友让我帮他再RIP一下他第一场音乐会的DVD,以前似乎只做过下半场,做了下节目字幕然后寄出去了,可能是报名青歌赛的说。但是我找遍了整个硬盘发现无论是字幕文件还是AVS文件都不见了,估计是清理硬盘的时候把整个工程文件夹都删了。于是又得重新写脚本。

人呀,老了记性就不行了。脚本又忘了怎么写了,又得重新上网查资料,以及翻硬盘上没删的其他项目的AVS文件。

这次写文总结一下吧。

一、片源

对于DVD原盘,一般用DVD Decrypter分析章节并拷贝到硬盘上。Demux的工作一般也在这步完成。对于已在硬盘上存在的M2V、VOB文件,需要用DGIndex走带,VOB文件可以用DGIndex分离并将音频解压为WAV。用DGIndex分离音频时要指定要分离的音轨。MPEG2输出的DV也要用DGIndex走带,MPEG4的DV可以直接DirectShowSource,也可以用DGAvcIndex走带分析。

二、反交错

处理视频最烦的这一部分,首先请容许我深深地鄙视设定广播电视制式的科学家。

基本上我能遇到的就下面两种。

1、NTSC Film。这种常见于日本动漫DVD。片源为3:2的交错,需要反电影过带还原为24p,使用IT滤镜完成。

LoadPlugin("D:\Programs\AviSynth\plugins\IT.dll")
IT(fps=24, ref="TOP")

场序通过DGIndex走带时确定。

2、NTSC 30i或PAL 25i。这种一般是DV拍摄,张张交错,需要进行反交错,目前我使用Yadif和BlendBob滤镜。

Load_Stdcall_Plugin("D:\Programs\MeGUI\tools\yadif\yadif.dll")
Yadif(mode=1, order=1)
LoadPlugin("D:\Programs\AviSynth\plugins\BlendBob.dll")
BlendBob(badframes=0,forcematch=1)

Yadif的场序同样在走带时确定。

对于有些动画片片尾字幕是30i的这种画面中混合3:2和30i,我一般不例外处理,统统走IT,压个片没必要追求那么完美。

三、切边与拉伸

这点在片源上很混乱,具体片源具体分析,借助AviUtl软件看比较方便。对于动画片,先按保留全部有效画面的方法切看看情况,例如对School Days,是切9个像素然后拉伸到864×480比较好。对于DV我一直比较愤慨,因为我搞不清他到底怎么录的,反正是没有黑边,干脆就不切了,直接拉到1280×720或848×480拉倒。

四、压制参数

个人目前喜欢用x264默认的crf=23。对于480p的出片,其他参数为–level 4.1 –bframes 6 –b-adapt 2 –ref 13 –me umh –subme 9,对于720p的出片,其他参数为–level 4.1 –bframes 6 –b-adapt 2 –ref 9 –me umh –subme 9。720p在level4.1标准下受块缓存限制,参考帧必须降低到9。

音频使用NeroAAC q=0.25,对于注重音频的片子如音乐会用q=0.4。

做了份School Days的DVDRIP,以及再次重新压制了一套EVA

首先吐槽一下我爹这破电脑,五年前的Dell 640m,实测压制848×480的片子速度仅3-4fps,压一集动画片要两个多小时,比i3 530要慢5倍左右。下面正题。

假期宅了几部岛国动画,觉得School Days很不错,遂决定收藏。但HKG字幕组发布的DVDRIP版使用的是24/60变码率封装,不喜欢就此收藏。变码率主要是为了解决片尾滚动字幕导致的24p/30i混合难以进行反交错的问题,但只有mkv支持这种封装,并且由于并不标准,若不进行任何修改直接用作片源转码则必定会出现兼容性问题(目测优酷上的高清版School Days声音与图像不同步完全无法观看就是由于这个原因)。然而找不到更好的片源,遂打算自己做DVDRIP。问卡车同学借了迅雷帐号,挂了8张DVD镜像ISO下来(两张OVA)。在此对卡车同学致以严重的感谢。

另外一个原因是HKG发布的是864×480分辨率,而我习惯使用848×480,所以想看看片源到底是多少乘多少的。事实证明我傻X了,下载下来DVD镜像才知道全天下的DVD都是统一标准的720×480,要进行切边与缩放操作。

DVD的另外一个重要特征就是需要进行30i到24p的反电影过带,亦可以等同为通常所说的反交错(两者并不完全等价,但对于初学者可以相同理解)。本着技术宅实事求是的态度,我系统地学习了DVDRIP的详细原理教程而非傻瓜教程,当然要真正深入地了解则需要学习广播电视相关的专业知识,这个倒可以略过 =-=。对于这块,我尝试了AVIUTL与TMPGEnc,这两者都可以做一定程度的人工反交错,也便于对这块原理的理解。但鉴于压片似乎没必要这么麻烦,最后还是选择了比较原始的AVS,使用最简单的IT滤镜来承担这一重要工作。

片源分离方面,使用DVD decryptor与DGIndex来弄。先用DGIndex打开光盘中的VOB文件预览cell的信息,然后用DVD Decryptor拷下来并分离视频和音频,再用DGIndex打开m2v文件保存为d2v文件留作AVS输入。

切边方面,先是尝试了保留全部画面,School Days的话是左3右4还是左4右3来着,但看到某个月亮突然觉得似乎有点扁,最后还是用了传统的左右各8,这样那个月亮就圆了。结果出片后发现有另外的月亮又扁了,fxxk。。。管他的了,反正人物胖点也没什么大不了的。。。

调色方面,按照教程TV转电脑是应该做色域扩大的,EVA-FANS的EVA2003一套也做了这个,但我实践后发现这样虽然画面色彩好了些,但是会造成亮部与暗部的细节丢失严重,压片时暗部还容易出现色块,最后决定还是不调色。事实上EVA 2.22以及我下的另外一些动画也都没有做调色。

压片依旧出MP4,开始定码率做成了两张CD共1.4G,突然想到要不尝试一下264默认的crf编码方法。就用默认的crf23压了一集,发现小了几乎一半。并且两者看不出什么差别。拿给豆子他说他能看出很明显的差别,豆子麻麻也是,好吧,我承认他家似乎有能听出火电与水电的差别对MP3听歌影响的基因。=-= 但是哥看不出并且豆子也承认并不影响观感,那就果断出crf版的。在用crf23压完全套12集后,计算知如果音频使用q=0.16编码则刚好可以放进一张CD(在此膜拜下MP4标准的制定,想当年一张CD只能放下1个小时的352×288的MP1编码,也就是VCD,现在可以放5个小时的MP4,并且是848×480。当然,这里仅限动画)。但是鉴于如上所述能够听出火电与水电差别的耳朵,我还是老老实实压了q=0.25。。。最终出片是766M,如果加上两部OVA的话就是905M。字幕选用繁体的,因为同样的字体没有简体版,HKG改成黑体不好看。

贴上第12集的AVS脚本(好吧,我承认我有点重口):

LoadPlugin("D:\Programs\DGIndex\DGDecode.dll")
LoadPlugin("D:\Programs\AviSynth\AC3Source.dll")
LoadPlugin("D:\Programs\AviSynth\IT.dll")
LoadPlugin("C:\Program Files\WMZHE\Pure Codec\Codecs\VSFilter.dll")

MPEG2Source("VTS_01_1 – 0xE0 – Video – MPEG-2 – 720×480 (NTSC) – 16~9 – Letterboxed.d2v")
AC3Source("VTS_01_1 – 0x80 – Audio – AC3 – 2ch – 48kHz – DRC – Japanese – DELAY -601ms.ac3")
DelayAudio(-0.601)

IT(fps=24, ref="TOP")
Crop(8,0,-8,0)
LanczosResize(848,480)

Trim(0,5)+Trim(6,0).TextSub("[HKG][School_Days][DVDrip][12][AVC_VFR AAC][864×480][E87F346D].BIG5.ass")

由于字幕与视频有一定的不同步,而ass字幕似乎不能指定整体偏移,就用trim的方法将媒体偏移掉再加字幕。这种方法还是蛮有用的。

在尝试了crf模式编码后,我表示对crf大大地感冒,觉得这样比我自己算码率保持体积要更科学,于是就重新开压EVA。事实证明我在4月给EOE分配的码率过低。crf整部EVA下来总大小比4月版稍小,出片为3.55G,主要是TV的某些集码率分配降低了,而EOE由于其中的故意噪点部分以及真人电影部分,总平均码率达到了1M左右。

其他参数与4月份保持不变。level=4.1,bframes=6,b-adapt=2,ref=13,me=umh,subme=9,merange=24。此参数请大家不要照搬,比如ref要根据level与你的设备的播放能力计算决定,480p可以设置13,但720p原则来讲就不行了,压片的技术要实事求是地学习理论外加积攒经验才行。

有兴趣者可拿硬盘来拷。无脑大文件高清控自觉走人不送,本人小体积性价比控谢谢。

2012年版EVA压制出片

一周前已经预告了要重新压制EVA,第二天其实已经收割了,但是并不满意,因为我发现我是在完全不懂x264的情况下压的,不符合完美主义的压片精神。

于是这些天学习了点相关知识,并参考硬盘上其他视频组的压缩参数,最终于4月25号夜里开始重新压制计划,并于27号凌晨完成。重要参数如下:

视频:x264 High 4.1,umh 24,ref 13,subme 9,bframe 6 optimal。其他参数使用NES压制的新剧场版2.22的参数。TV码率500K,最高10M;两部剧场版700K,最高20M。

音频:Nero AAC HE 64K

最终文件总大小3.69G,可刻录一张D5,或放入一个4G的U盘(3.72G),或刻录6张CD(1-7,8-14,15-20 21 OnAir,22-24 OnAir Death,EOE 25-26,21-24 Video)。

一周前压制版本即日作废,择日清理硬盘时删除。

一年前RMVB版本将刻录至D5存档后删除硬盘存档,替换为此版本。

201204271555

开始重新压制并重温EVA

鉴于今年有关Kichan的事情无论从发生时间还是心情状态都像极了去年同期,所以似乎有认真重温一遍EVA及RE-TAKE的必要。
另由于RMVB不能硬解,在M9上放估计会死的很惨,估计cpu直接会跳闸,就算不跳也会烫死人的。故决定重新压制。
片源还是EVA-FANS出的那套。这次用传说中给力的MediaCoder压。字幕开始有些问题,去年最开始也是这样,但现在忘了当时是怎么弄的了,折腾了一会用Process Explorer发现没有加载VobSub的DLL,原来是完美解码装的时候没有注册,regsvr32后就WMP就可以调用加载VobSub的Halii分离器直接完美播放EVA-FANS的那套mkv了。
此次为第一次测试大规模的H.264压缩,显卡用CUDA编的很快,但不支持2pass,所以还是用CPU压。
参数记录下。视频x264,2pass,avg512kbps(640×480的TV),max10000kbps,high4.1fast,其他没动。
音频neroaac,q=0.18
估算最后出片应该总共在3.6-3.7G之间。这次没按4.37G计算,因为发现4G的U盘似乎比DVD更常用。。。
机子挂着,明早起来收割。。。
ps,今天Live Writer是肿么了,怎么都发不上。。。只得进后台写了。。。