1、背景:
调试一个新项目,要求视频帧率为20fps、码率1.5m下,和竞品机对比效果。发现动态场景下的效果比竞品机差距比较明显(做的是安防类的监控相机,比较关注视频的效果),比如对着运动的车流时,出现模糊/马赛克的范围比较大、运动模糊的收敛速度慢、运动模糊/马赛克的形态显眼难看,如下图所示:
2、ISP 方面的调试总结:
从上图中明显可以知道是和编码相关的图像问题,编码会导致的图像质量问题具体可看这篇:Encoder 相关的图像质量问题
编码器同事那边的建议是让先基本对齐ISP的效果后,再去谈优化编码。他解释决定编码效果的就是压缩率,当画面内容复杂度高,为控制码率就会导致画质损失明显。
分析竞品机的画质,有如下表现:
a、画面背景有细节,但边界锐化比较低。
b、整体对比度比较高、暗处偏黑、细节少 。
c、画面亮度均匀,平坦区很少有过曝/过暗的地方。
d、AE 收敛稳定,无震荡。
e、白平衡判断准确,无偏色。
如上竞品机的表现,也应该就是后续效果的调试需求,从调试结果来看,画面的细节、锐化是对编码影响比较大的,增加锐化,会使更多的边界被描出来,也可能使更多的噪声被描出来,增大编码的处理压力,使得画面失真。但后续 b、c、d、e项是我以前没考虑过的。
对比度的影响分两种,若调的对比度较低,画面中的暗部就不会过暗,亮部也不会过曝,会有更多的细节出来,也就是画面内容变多了,增大了编码压力。
但若是对比度调的很高,画面亮暗部分的反差较大,可能会使画面平坦区的亮度过渡不均匀(比如白墙),虽说过暗或过曝的地方会掩盖掉更多的细节,但也增加了平坦区域的内容。
AE 的不稳定,有震荡,相当于画面整体都有运动,另外 ISP pipeline 中后续很多模块都要基于 AE 的统计信息来做的,如锐化、降噪模块等。ae 变化会使得画面会有清晰,模糊的收敛过程,这都会使后续编码的处理有影响。
当白平衡偏了,就会有整体的偏色,会使编码导致的色飘更严重,使得编码后的马赛克形态显眼难看,如下图所示。
综上,因为产品的低码率应用需求,所以大面积动态场景下肯定会有较明显的马赛克/模糊现象,但如何减弱这种现象,或者做到看起来不那么显眼,这是 Tuning 效果时要考虑的。但编码是ISP 之后处理的,一般可以通过抓取yuv,或者提高码率(如400万分辨率,码率设8M时,基本上可以认为编码不会导致画质损失),来排查到底是ISP ,还是编码器的问题。
3、Encoder 方面的调试总结:
a、帧率的配置要注意,sensor 的输出帧率和编码帧率,要配置成一致。之前我只将sensor 输出帧率改成了20fps,但编码帧率默认是30fps。录像下来看编码也确实是按 20fps 来编的(因为他只有20fps的输出,也不可能变多,所以之前也一直认为没什么问题)。但编码那边解释,码率是按帧率来分配的,默认编码这边帧率30fps, 码率1.5M,但实际帧率是20fps,也就是还有1/3的码率是分配给了后面10fps用了,所以编码效果差了很多。
b、运动马赛克收敛速度的问题,一般都是经过一个I帧后会完全收敛,I帧间隔是通过GOP来控制,和竞品机配置的GOP都是60,也就是3s一个I帧,所以收敛速度就要看运气了。但也可以通过中间插I帧,或者调整I帧P帧的码率比例来改善。
c、还有就是通过调节I帧、P帧 最大最小的qp值来控制画质(qp是代表画质的量化参数,qp值越小,画面失真则越小),也就是控制码率与画质的平衡。
d、而对于失真出现的各种现象(马赛克、模糊等等),编码那边解释是硬件模块所决定的,没太多办法去做调整,这个也有待后面进一步学习后确认了。