我对此感到困惑,我真的希望有人能指出我正确的方向。
我目前正在 Windows Mobile 中捕获视频并使用 WMV 9 DMO (CLSID_CWMV9EncMediaObject) 对其进行编码。这一切都很好,但输出视频的比特率太高,导致视频文件太大而无法满足我的需求。
最终,我的目标是从我的 C++ 代码中模仿 Microsoft 的相机捕捉对话框以“消息”质量模式 (64kbps) 输出的视频设置。 目前,我的代码正在输出比特率为 352kbps 的 WMV 文件。
我能找到的使用 WMV9 DMO 指定捕获比特率的唯一示例是这个。该代码中的想法基本上是使用属性包将比特率写入 DMO 的属性。
更新: 在 Windows Mobile 中,我能找到的最接近比特率的编解码器属性是“g_wszWMVCVBRQuality”。微软关于这个属性的文档让我非常困惑:它基本上似乎说更高的数字等同于更高的质量,但它绝对没有解释每个数字的细节。当我尝试通过 WMV9 DMO 的属性包将此属性设置为类似“1”的值时,我遇到了 -2147467259(未知)错误。
总结一下:在 windows 移动平台上指定通过 directshow (wmv9) 捕获的视频的比特率/质量的基本策略是什么? 我听说过(或想知道)以下方法:
- 使用属性包更改编码器 DMO 对应比特率/质量的属性(当前失败)
- 创建您自己的自定义转码器/编码器来指定它。这似乎没有必要,因为 WMV 编码器工作得很好——它的比特率太高了。
- VIDEOINFOHEADER 有一个比特率属性,但我怀疑在这里指定新设置不会改变实际的编码过程,因为我认为文件属性在编码之后才会发挥作用。
有什么建议么?
PS:我会发布特定的源代码,但在这一点上,它可能会造成混淆,而不是帮助,因为我在如何做到这一点上苦苦挣扎。在这一点上,我只是想验证一般策略。
谢谢!