问题描述
为什么QP值并不总是遵循我的QPs.hex文件?
LOAD_QP仅适用于I帧,但不适用于我的示例中的P帧和B帧。
例:
根据提供的QPs.hex,I和P帧的预期表格为10 11 12 13 14 15 16 10 11 12 13 14 15 16。
但是,只有I帧遵循LOAD_QP指向的QPs.hex,而P帧不遵循预期的QPs.hex。
使用以下命令时可以看到:
ffprobe -debug qp
LOAD_QP | RELATIVE_QP不适用于I帧,P帧或B帧。
我和P都没有像预期的那样遵循QPs.hex。
使用以下命令时可以看到:
ffprobe -debug qp
解决/修复方法
这是预期的行为。
1)LOAD_QP
这里关注的是ffprobe所示的P和B帧的QP值。 QP值不遵循预期负载模式的原因是该剪辑具有许多静态帧,其中宏块中几乎没有运动。
结果,宏块被标记为类型’skip’或者它们的变换大小为零,这意味着这些宏块的QP值是什么并不重要。
这可能有点令人困惑的原因是’ffprobe -debug qp’没有显示所有这些信息。它仅显示QP值,但您还需要知道宏块类型以及变换大小。
例如,如果宏块被标记为“跳过”,那么QP值是什么并不重要,因为它不会影响结果。
话虽如此,如果用户要查看未标记为跳过的宏块或者没有变换大小为零,您将看到QP值与预期一致。
这在有很多运动的流中更容易看到,因为具有大小或零的宏块较少或者被标记为类型跳过的宏块较少。
使用以下命令时可以看到:
ffprobe -debug qp -debug mb_type
2)LOAD_QP | RELATIVE_QP
在这种情况下,即使对于I帧,序列也永远不会完全遵循QP输入值。这是因为根据定义,最终的QP值仅相对于加载的QP值。
P帧和B帧与上面相同,如果几乎没有运动,那么宏块将被标记为跳过并且QP值无关紧要,然后相对QP值用于没有运动的宏块。变换大小为零或未标记为类型skip。
注意:还有一些其他分析工具,如Elecard StreamEye,允许用户同时查看两者。
没有回复内容