从图像创建 MPEG4 视频时的解决问题 (Windows Media Foundation)

Posted

技术标签:

【中文标题】从图像创建 MPEG4 视频时的解决问题 (Windows Media Foundation)【英文标题】:Resolution Issue when creating an MPEG4 video from images (Windows Media Foundation) 【发布时间】:2015-03-09 15:31:26 【问题描述】:

目前我正在使用 Media Foundation SDK 将图像转换为 H.264 视频,使用 Microsoft 的以下示例。

https://msdn.microsoft.com/en-us/library/windows/desktop/ff819477(v=vs.85).aspx

我在调整用于输入的媒体类型对象的 MF_MT_FRAME_SIZE 时遇到了一个问题,似乎如果分辨率更高则监视器连接到对 IMFSinkWriter 对象的 SetInputMediaType 的调用返回 HRESULT 错误代码0xc00d36b4 这意味着无效的 MediaType,这让我想知道您创建的任何 MediaType 是否受分辨率限制?我的代码与示例的不同之处在于顶部定义的以下常量。

const UINT32 VIDEO_WIDTH = 2048;
const UINT32 VIDEO_HEIGHT = 1088;
const GUID   VIDEO_ENCODING_FORMAT = MFVideoFormat_H264;

【问题讨论】:

0xc00d36b4 是 MF_E_INVALIDMEDIATYPE。但我不了解 MF,所以无法进一步帮助您。 感谢您识别 HRESULT 代码。 我的猜测是它超过了支持的最大分辨率 1920×1088 分辨率(2048 > 1920)。 MSDN 让我们猜测,因为 Microsoft 保留在可能安装的多个编码器中自行选择“正确”编码器的权利。因此,限制可能会有所不同,即使您可能对收件箱系统编码器感兴趣。 【参考方案1】:

我很确定 Windows H.264 编码器的最大分辨率取决于您的 Windows 版本。尝试编码为 1920 x 1080。

H.264 编码器的最大分辨率可能与屏幕分辨率无关。

【讨论】:

在查看了 Media Foundation 的更多文档后,我看到仅在 H.264 视频解码器下列出了它在 Windows 7 上的最大分辨率限制为 1920 × 1088。所以我认为这可能是编码器的情况也是如此。

以上是关于从图像创建 MPEG4 视频时的解决问题 (Windows Media Foundation)的主要内容,如果未能解决你的问题,请参考以下文章

配置 MPEG4MediaSink

psp视频格式中: mpeg4(Divx)与mpeg4(Xvid)的区别!!!

来自 MPEG4 流的运动矢量和 DC 系数

如何编程实现视频转码? 用C/C++实现将MPEG4标准的视频转化为H.264标准的视频

使用 AVAssetWriter 将大量图像写入视频文件时的高峰值内存使用率

MPEG4Extractor分析