将 RGB 编码为 H.264

Posted

技术标签:

【中文标题】将 RGB 编码为 H.264【英文标题】:Encoding RGB to H.264 【发布时间】:2020-01-11 11:46:38 【问题描述】:

我正在做的是尝试在 Windows XP 和 Win7 中记录屏幕。我通过使用 DirectX 的接口 CreateOffscreenPlainSurface 和 GetFrontBufferData 得到了位图。我需要将位图编码为 H.264 格式的视频。问题是捕获的位图格式为 D3DFMT_A8R8G8B8,但 H.264 视频编码器只能支持 MFVideoFormat_I420、MFVideoFormat_IYUV、MFVideoFormat_NV12、MFVideoFormat_YUY2 和 MFVideoFormat_YV12 作为输入。我的问题是我是否需要自己传输格式(我不想)?有没有其他更好的解决方案?

【问题讨论】:

【参考方案1】:

输入格式对应MFVideoFormat_ARGB32

处理转换的库存操作系统组件是Video Processor MFT。我在 MSDN 文章的页脚中看不到可用性信息,但我的印象是,这个 MFT 是 Windows Vista 附带的,就像整个 Media Foundation API 一样。

在 Windows XP 中有一个类似的Color Converter DSP,它提供了非常接近的服务,并公开了一个非常接近的 DirectX 媒体对象 (DMO) 接口。它适用于所有更新的操作系统,但它只是软件,从不利用 GPU 功能进行转换。

这两者都可以为您处理请求的格式转换。

同时作为参考,H.264 Video Encoder 仅在 Windows 7 中引入。

【讨论】:

以上是关于将 RGB 编码为 H.264的主要内容,如果未能解决你的问题,请参考以下文章

视频概念信息像素色彩

使用 FFmpeg 编码 H.264 CBR 视频

如何使用 ffmpeg 对 H.264 中的视频进行编码?

最简单的视频编码器:基于libx264(编码YUV为H.264)

使用 FFmpeg 通过 RTMP 发送 H.264 编码流

YUV420P的像素数据编码为H.264的压缩编码数据