0

我试图确定 h264_nvenc 视频编码器的各种 cq(“恒定质量”)值的最终产品质量。

要通过 ffmpeg 并以目标质量使用 h264_nvenc 编码器,我按照Nvidia 文档中的说明,链接锚的最后一段。

我指定了可变比特率控制模式 (rc=vbr_hq) 和目标质量 (cq=<some int>)。这应该足以测试 cq 的各种值。故事应该到此结束。

但是,对于任何 cq 值,它只会输出相同质量的超大尺寸视频。(使用 cq=1、cq=20 和 cq=51 都输出具有相同哈希的文件。)

根据文档,我还可以指定一个 maxBitRate (maxrate=<some size>)。如果我没有指定 maxrate,文档会指出:

如果未指定 maxBitRate,编码器将根据需要使用尽可能多的位来达到目标​​质量。

但这不是我观察到的行为。我看到编码器使用尽可能多的位,而不是需要的位。生成的视频的总比特率约为 100Mb/s。将源视频加倍。

如果我确实设置了最大速率,编码器会观察到它。但是,如果我必须为每个 cq 值正确设置比特率,那么 cq 值的意义何在?我只需设置 cq=1 并测试各种比特率,这将仅适用于特定视频。

是否有一些警告或输出表明比特率不足以达到我没有看到的目标质量?这至少可以让我暴力破解。

还是我误解了这些设置之间的关系?

4

1 回答 1

2

恒定质量正如它所说的那样,它保持恒定的感知质量水平。它将改变压缩量以保持所需的质量。生成的文件大小与此用例无关。

添加最大速率用于避免比特率峰值,例如当您通过网络发送视频时,您通常知道该限制是多少。

如果您想评估视频压缩质量,可以使用诸如VMAF 之类的算法。

更多阅读:

CRF 指南

了解速率控制模式

于 2020-09-24T08:21:14.360 回答