帧内和帧间压缩有损在哪里?

来源:10-6 H264无损压缩及编解码处理流程

慕妹3585395

2024-04-06

老师说10-4 帧内压缩技术 和 10-5 帧间压缩技术是有损的。但是通过视频内容,没看明白有损在哪里。

下面是综合了一下网上的其他资料:

在H.264编码过程中,完整的视频编码流程包含了以下几个核心环节:

 1 宏块分割与预测: (无损)
	 - 对于I帧(帧内预测),编码器对图像进行宏块分割,并对每个宏块采用不同的帧内预测模式进行预测。 
	 - 对于P帧和B帧(帧间预测),首先进行运动估计,计算每个宏块相对于参考帧的运动矢量+残差值。
 2 计算残差值:(无损)
	 - 宏块预测+残差值:预测宏块与原始宏块相减,得到的是帧内预测的残差值,这个过程是差分运算来实现的,理论上是无损的。
	 - 运动矢量+残差值: 预测宏块与原始宏块相减,得到的是帧间预测的残差值,这个过程是差分运算来实现的,理论上是无损的。
 3 变换编码:(有损)
	 - DCT变换: 接下来,对计算得到的残差值进行离散余弦变换(DCT变换)或整数变换,将残差信号从空间域转换至频域
	 - DCT变换本身是无损的,但是DCT系数采用了量化处理,所以会对数据进行粗略化处理。
 4 量化:(有损)
	 - 量化: 变换后的系数经过量化处理,即将高频系数近似取整,以降低数据精度和数量。这个步骤是为了显著减少数据量,但它同时也是整个编码过程中最主要的有损来源,因为量化过程会导致部分图像细节的丢失。
 5 熵编码:(无损)
	 - 熵编码: 量化后的系数按特定规则重新排列(如熵编码前的符号编码或Zigzag扫描等),随后使用霍夫曼编码或算术编码等熵编码技术,对数据进行高效压缩。熵编码根据数据的统计特性进行无损压缩,解码时能完全恢复原始量化系数,故此过程视为无损。

所以总结一下:在H.264编码过程中,宏块预测、计算残差值和熵编码这三个步骤在理想情况下被认为是无损的,而DCT变换后的量化环节则为有损处理,它直接影响了编码压缩率及最终重建图像的质量。

我知道这个资料和老师说的不一样,请老师可以具体再指出一下细节吗?还是我对视频教程中的部分内容有误解。

写回答

1回答

李超

2024-04-06

1. 宏块分割与预测是有损的,因为宏块的划分是近似值,当进行宏块划分时,就注定了会将宏块内部分一些细节丢掉,比如忽略了图像中细节的曲线和不规则边界;2. 计算残差值本身是无损的,但在量化时是有损的,也就是说计算出的残差数据在进行编码时,为了提高压缩率,并不是将残差全部保留下来,而是丢掉了很多数据,当进行解码时,会将丢了很多数据的残差补回去,这样就与原来的帧不一样了;3.后面的 DCT和量化是有损的这个没问题,对应视频中H264编码流程中的T(DCT)和Q(量化),这块的描述确实是有问题;4. 再后面的reorder和entropy encode指的是VLC/CABAC,这块是无损的, 也就是你上边的第5点,它们是熵编码。

1
1
慕妹3585395
明白了,感谢感谢。
2024-04-07
共1条回复

音视频小白系统入门课 音视频基础+ffmpeg原理

掌握音视频采集、编解码、RTMP传输协议等核心基础

2318 学习 · 813 问题

查看课程