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》),妈妈再也不担心我没有动画片看了。