上次向业内一个专业人士提问,如何得到一个无损的压缩后的码流。被告知可以通过设置QP为4并且关闭deblock来实现。
我使用jm和x264两种编码器分别尝试了下。发现编码后的ssim都是小于1的。证明不是真的无损。使用elecard查看码流,是否qp恒定为4并且disable_deblocking_filter_idc 为 1。确定了这些都正常后,我开始查找原因。
查看《新一代视频压缩编码标准H.264》后,发现H.264把DCT变化的系数放到量化那一步了,好处是DCT变化是一个整数变化。
坏处就是在量化时要乘以这个系数。其中系数a= ,b=
。round()是取整函数。所以在量化过程中存在取整带来的损失,导致编码不是无损。