使用 gstreamer 将原始视频编码为 h264

Encoding raw video into h264 using gstreamer

我正在使用 nvh264enc 将原始视频编码为 h264。

原始视频是使用具有以下功能的 dxgiscreencapsrc 制作的

video/x-raw:
         format: BGRA
          width: [ 1, 2147483647 ]
         height: [ 1, 2147483647 ]
      framerate: [ 0/1, 2147483647/1 ]

因此它会生成 BGRA 格式的原始视频。

NVH264ENC 支持这种压缩格式,但也支持多种其他格式

它支持的格式列表是NV12、YV12、I420、BGRA、RGBA、Y444、VUYA。

现在我很困惑哪种格式最适合压缩到 H264。

我应该将其保留为 BGRA,还是应该将 BGRA 转换为不同的格式,例如 I420(使用 gstreamer 视频转换),然后以这种方式压缩为 h264。

每种原始视频格式的 upsides/downsides 是什么,转换会使 h264 变得更糟等等

Should I keep it as BGRA, or should I convert the BGRA to a different format such as I420

如果您拥有的像素格式已受支持,请坚持使用。否则,您只会浪费无用的 CPU 周期来从一种像素格式转换为另一种像素格式(特别是考虑到编码器元素可能能够在 GPU 中更有效地完成此操作)。

What are the upsides/downsides of each of these raw video formats, will converting make the h264 worse better etc

这里没有upsides/downsides。所有这些格式都指定了原始视频数据的结构方式。唯一需要注意的是,如果您要使用像 NV12/YV12/I420 这样的格式,因为它们使用 subsampling,所以这将是一个有损转换。通常,基于 YUV 的格式需要较少处理的可能性很小(因为这是您的编码器可能会在内部使用的),但如前一点所述,您不妨让编码器元素为您完成一种更有效的方法。