VCB-Studio教程11编码器参数研发方法
编码器的参数,特别是类似x264/x265这种,对成品画质的影响是很大的,哪怕同样码率下,不同的设置可能有极大的区别。而且编码器参数的选取,对于不同类型的片源,又有不同的侧重点。一般来说参数的选取有三种选择:信官方,信高人,自己测。本篇教程讲述如何系统性的研发测试编码器的参数。
1.参数分类
一般来说,编码器都有document来描述有哪些参数供你设置,这些参数大概是做什么的。测试的第一步就是先阅读doc,根据你的经验,把参数分为这三类:
编码规范/specification,这类参数一般是规定编码一些格式规范、编码器工作的。比如x264/x265中--profile--level--matrix,--display-window--sar等等。这些参数一般无需测试,该怎样就怎样。一般这些参数的调整也不会显著影响编码速度和编码画质。
取舍性/tradeoff,这类参数一般是时间换画质的,比如x264/x265中--ref--bframes--me--subme--merange--rect--amp等。这些参数对画质的影响往往是通用性的,不随片源类型、码率高低变化太多。
码率控制/ratecontrol,这类参数决定码率的分配,分配的多少,怎么个分配法。比如x264/x265中--crf--qcomp--aq--psy等等。这些参数对画质的影响往往体现在目视效果上,跑分并不能很好的体现,且不同类型片源、码率表现很不一样。
参数组合的效果,随着参数数量的增加,是指数级别的。所以参数测试第一步是选取测试价值最大的。历史经验表明,这类参数一般在ratecontrol分类中,ratecontrol类型的参数可以在不增加编码运算量前提下极大地优化码率分配和目视效果。进一步你需要找出哪些参数是重中之重,一般来说无非这几类:
1.--crf/-q,最直接影响画质和码率的;
2.--qcomp/mbtree,影响码率的时间分配
3.--aq/psy,影响码率的空间分配
其他一些影响较少的包括--scenecut/--b-bias/--ipratio/--pbratio这种ipb帧设定的,--sao/--deblock这种内置filter的。甚至在HEVC上,过大的blocksize都可能影响画质(x265中的--ctu--max-tu-size)
其他的参数,我们一般选择默认,或者用官方推荐的。比如说tradeoff相关的,我们就一般采用官方给定的--preset。为了保证tradeoff相关的那些不会对画质构成瓶颈,我们一般基于接近官方的--presetslower/veryslow来进行测试。
2.片源选择
下一步骤是选择一个具有代表性的片源。一般来说选源遵循以下几个原则:
(1).和你需要测试的画风一致。如果你要测试重噪点电影,那就剪一段重噪点电影;如果你是测试一般性新番动漫蓝光,那么就选一段各方面均衡,噪点适中,亮场暗场都有,静态动态均衡的新番蓝光。
(2).你可以用avs/vs对片源做预处理,来使得它更符合要求;只不过如果你的处理比较复杂,测试的规模又大,建议先压一个YUV无损视频。
(3).片源的长度适中。太长则压制时间长,需要的电量增加;太短有两个缺点:第一个场景少而集中,测试的普适性不高;第二个难以估算码率。一般片源我们选择半集到一集的长度。
3.测试所用遗传算法简介
我们假设你选定的片源是环境(草原,湖泊,森林……)
编码器编码出来的视频是一个种群(咸鱼,蛤蟆,猫娘……)
每一个编码器参数是一段基因,编码器参数组合就是基因汇总,决定了种群里每一个单体的性状。
物竞天择,适者生存,这个“天”,就是来评价成品好坏的标准,可以是客观跑分(psnr/ssim),也可以是你的眼睛。
测试参数的过程,就是让种群在环境中进化的过程,让基因自由的变异,然后挑选出这一轮变异最成功的个体存活,存活的个体进一步进化。
如何理解呢?假如说我们已经选择了片源(环境),准备测试x265,现在一开始我们有个个体:
--crf28--psy-rd0.3--aq-strength0.3--qcomp0.4
可以想象,这个参数编码出来的视频体积很小,画质很差,表现为个体很弱小。我们现在让它进化。它有4个方向可以进化:
降低crf,比如--crf27
提高psy-rd,比如--psy-rd0.8
提高aq,比如--aq-strength0.6
提高qcomp,比如--qcomp0.5
单独设置这四个参数,画质和体积相比进化前都会有提升,那么哪一种进化方向最有效呢?这时候我们就可以先调节参数改变的幅度,使得4个