深入解析Intel MediaSDK中的比特率控制方法及其在直播软件中的应用
2024-12-13 18:03:33发布 浏览300次 信息编号:207502
友情提醒:凡是以各种理由向你收取费用,均有骗子嫌疑,请提高警惕,不要轻易支付。
深入解析Intel MediaSDK中的比特率控制方法及其在直播软件中的应用
obs直播软件中qsv的码率控制方式有:CBR、VBR、VCM、CQP、AVBR、ICQ、LA-ICQ、LA,而x264的码率控制方式只有CBR、ABR、VBR、CRF。 Geek Bay也介绍过(),这里是Intel开发者社区一篇文章的粗略翻译(在翻译的基础上做了一些微调,原文地址:)。
英特尔® 中的比特率控制方法 (BRC)
M. 发布于2014年8月19日,更新于2016年5月2日
介绍
想要使用 ® SDK 或英特尔® 中的相同组件提高编码质量吗?主要有两种方式:
编码器算法/参数(包括“宏”算法调整复杂性权衡,例如质量预设/目标使用)比特率控制
Intel Media SDK 提供了多种设置比特率控制的方法来满足您的需求。
可用的比特率控制算法
英特尔编码器包括多种类型的比特率控制,每种都针对不同类型的用例而设计。没有一个通用的选择是所有情况下的最佳选择。选择最能满足您要求的模式(对于 AVC 编解码器):
建议:
难以测量比特率
与未压缩的视频不同,编码比特流的帧大小预计会有很大变化。 IDR 和 I 帧可以比其伴随的 P 和 B 帧大一个数量级或更多。这是视频压缩的核心思想之一:P帧和B帧存储差异,而不需要对整个图像进行编码。 B 帧往往比 P 帧小。内容差异/场景变化可能会导致进一步的变化。此外,还有分层的B帧,它提供了良好的有效压缩效率并限制了错误的传播,并且这些帧在大小上更接近P帧。
HRD/VBV 合规性
假设参考解码器 (HRD),以前称为 mpeg2 时代的视频缓冲区验证器 (VBV),是一种“漏桶”模型,如果比特流符合要求,它会增加任何符合要求的解码器能够接收流的可能性。没有预期的滞后或丢帧。如果编码流的目标受众包括低成本硬件解码器,而没有大多数通用计算机处理器上提供的额外缓冲+错误恢复功能,则这一点尤其必要。
HRD 是一个简化模型,假设数据根据各个帧大小到达,但以给定的比特率退出。目标是保持缓冲区或“桶”不受下溢或溢出的影响。
对于缓冲区较小的硬件解码器,上溢和下溢可能意味着丢帧和其他不良的最终用户体验。然而,维持人力资源开发的一致性可能代价高昂。例如,在某些情况下,必须对帧进行重新编码。它还增加了 BRC 算法的复杂性和性能影响。所以最好先知道什么时候需要它。
BRC算法的类型
专家算法
恒定 QP (CQP) 可提供最大程度的控制和最佳性能。毫无疑问,使用英特尔编解码器可通过 CQP 和自定义内容分析提供最佳编码效率。 CQP 通常还具有显着的性能优势。 CQP 是最接近参考实现的。它是访问编解码器功能和测量编码器参数/算法权衡效果的最直接方法,也是评估其他编解码器算法实现的最清晰方法。
毫无疑问:如果没有额外的开发,这项工作就无法完成。简单地为所有帧设置全局 QP,而不进行内容分析/动态调整,可能会比其他 BRC 替代方案具有较低的比特率和质量。 CQP 的主要缺点是它完全取决于应用程序的量化器选择。由于 QP 和感知质量或生成的比特率之间不存在简单或线性映射,因此必须建立反馈系统来分析内容并使结果适应每个帧大小。
然而,CQP 模式解锁了最复杂的内容分析类型,提供了广泛的创新领域,这些领域利用计算机视觉和跨帧的感知敏感内容分析并使用每 MB QP 调整。缺乏分析意味着 CQP 通常是最快(复杂性最低)的 BRC 方法,尽管应用程序级别所需的额外工作通常比这更重要。由于 CQP 最好留给专家用户,因此本文的其余部分将重点讨论“自动”BRC 算法。
遗留算法
从音频和视频压缩开始的标准/传统算法是CBR和VBR:
恒定比特率(CBR) 在该方法中,当比特流帧的大小小于满足HRD要求所需的大小时,编码器执行填充(在编码帧的末尾添加零)。 CBR 针对恒定数据流进行“优化”,这意味着整体比特率的很大一部分浪费在填充上,而不是编码帧细节上。 CBR的目标是提供恒定的数据流,这主要导致容量未使用。由于历史/遗留原因,可以使用此方法。这是许多 Media SDK 示例中使用的默认 BRC 方法。
它是CBR的一个重要参数。较小意味着帧尺寸变化较小。在缓冲区大小非常小的情况下,维持 HRD 变得越来越困难,但这是减少 CBR 峰值的最佳方法。更大的缓冲区意味着可以在需要时进行更多更改以保持质量。其中一个示例是使用教程更改缓冲区(以 KB 为单位)以查看瞬时比特率变化。
这里使用的比特率(以 Kbps 为单位)表示编码帧周期内的变化。可编码的最小缓冲区大小(目标比特率)为 34KB,低于该大小编码器将抛出错误。瞬时码率从 34KB 变为 .可以看到最小的变化是缓冲区大小等于200KB。但是,如果可以容忍较大的变化,其他 BRC 模式可能更合适。对于不同的输入,该值会不同,并且对于不同的比特率编码,该值也会不同。
可变比特率(VBR) 该方法允许更多的比特率变化来匹配输入的复杂性,即为复杂场景(例如场景变化)分配更高的比特率,为更复杂的场景分配低比特率。它试图实现更小的总体文件大小,但也可能产生不可预测的峰值。此方法通过允许比特率波动更大以及禁用填充来提供整体更好的比特率质量。这是 Media SDK 教程中使用的默认方法。但是,对于需要低延迟且必须保持目标比特率的部分情况,应考虑 VBR。
使用 Media SDK 教程运行比较 VBR 和 CBR 的测试。
前瞻算法
它是 VBR 的扩展,代表了英特尔编解码器自动 BRC 的重大进步。它可以提供显着的质量改进,有时比选择更高的目标使用更大,大约与 CBR/VBR 相同的 FPS/通道容量。它应该被视为许多文件到文件转码方案的默认选择。
提供关键 VBR/CBR 挑战的答案:可以预见大帧尺寸变化(如 I 帧)和场景变化的原因。分析帧缓冲区(可使用前瞻深度参数配置长度)以查找潜在的比特率中断。这允许“预览”或“前瞻”,具有两遍编码的许多优点。实际上,VBR 具有提前通知、更高的可变性和更长的延迟。
它的工作原理是在实际编码之前对数十个帧进行广泛的分析,包括复杂性、相对运动和依赖性。它在帧之间分配可用的比特预算,以产生最佳的编码质量。它在快动作视频和计算机动画上产生良好的效果。此外,SSIM、PSNR 和主观视频质量等客观指标也得到了改进。它适用于任何 GOP 模式,但 B 帧的存在提供了最佳的质量增益。一个副作用是它显着增加了编码延迟和内存消耗。由于延迟增加,它可能不是游戏直播的最佳选择。
,指定前瞻速率控制算法深度的参数。它是编码前分析的帧数。有效值范围为 10 到 100。要指示 SDK 编码器使用默认值,应用程序应将此字段清零。此模式下唯一可用的速率控制参数是 :: 。另外两个参数 和 将被忽略。 Media SDK 必须初始化为使用 API 版本 1.7 或更高版本才能使用 Media SDK 方法。
仅适用于英特尔® 锐炬™ 专业显卡、英特尔® 锐炬™ 显卡和架构上的英特尔® 高清显卡(第四代酷睿版)及更高版本。支持隔行扫描和渐进式内容。
特殊用途算法
ICQ/:这些算法专注于维持目标质量水平(大致相当于 CBR 1-51 量化)。它们允许比 CBR/VBR/ 更大的变化。
QVBR:还可以为可能需要限制可变性的场景(例如游戏/显示流场景)设置目标质量级别、参数和目标比特率。该算法尝试用最少的比特实现主观质量,同时尝试保持比特率恒定并遵守 HRD 合规性。从第四代英特尔® 酷睿处理器(代号)开始支持 QVBR。
VCM:这是一种专门的视频会议模式。在某些视频会议场景中,它可以以较低的比特率提供更高的质量。
注意:对于 AVC 编解码器,Look Ahead (LA)、VCM、QVBR 在软件实现中不可用。有关最新更新和详细信息,请查看发行说明。
其他参数
,指定比特率控制参数乘数的参数。实现更高的比特率很有用。该乘数乘以目标比特率()以达到相当高的比特率(高达并包括已验证的比特率)。请记住,该乘数还会影响 和 。下表显示了使用此参数的场景。
我使用教程(取自 Media 上的教程)对 720p - Park Joy 未压缩视频进行编码,以在有和没有压缩的情况下实现更高的比特率,结果如下:
该表显示,此后,传统方法并未实现更高的比特率。在这些情况下,建议您使用 over 并确保相应地修改 和 。在 Media SDK API 版本 1.3 中引入。
提醒:请联系我时一定说明是从星空网上看到的!