一帧视频可以编码成一个或多个片slice,每个slice包含有一个或多个宏块MB(最多时一个slice包含整帧的宏块)。具体来说有三种关系:
-
每个编码图像一个切片,这是许多H.264编码应用程序的常见做法。
-
每个图片有N个切片,每个切片包含M个宏块,N和M个整数。每个编码切片中的字节数将根据图像区域的运动量和细节而变化。
-
每个图片有N个切片,包含不同数量的宏块,选择这些切片来保持每个切片的字节数大致不变。例如,如果将每个片映射到固定大小的网络包,这可能很有用。
设置slice的目的是为了限制误码的扩散和传输(编码的片之间有最小的数据依赖关系,这有助于限制错误在片之间的传播。怪不得搞编码速度/性能的paper大都不考虑多个slice,只考虑一帧只有一个slice,因为这些paper不会考虑出现误码的情况),使得每个slice之间是相互独立的,不能互相作为预测时的参考。
slice的结构如下图所示:

slice头用于确定slice的类型、slice的参考帧以及slice属于哪帧图像
slice数据包含一系列宏块,每个宏块里包含当前块的预测模式、参考图像索引、编码残差等数据
slice这东西再细分有这么几种,下面的三种都被基础/扩展的profile支持:
1. Redundant Slices
标记为redundant的slice包含部分或全部的编码帧的冗余表示。
在正常的流程里,解码器只会通过non-redundant的slice来重建frame,不会管redundant slice的东西。如果流程不正常,比如primary decoded frame因

本文详细解读H.264视频编码中的slice概念,包括其作用、不同类型(如冗余、ASO和FMO)、以及它们在误码恢复中的关键作用。还介绍了slice结构和不常见的高级特性。
最低0.47元/天 解锁文章
1702

被折叠的 条评论
为什么被折叠?



