Windows-Mobile Directshow:指定WMV视频捕捉的比特率/质量
我对此很沮丧,我真的希望有人能指引我朝着正确的方向前进。Windows-Mobile Directshow:指定WMV视频捕捉的比特率/质量
我目前在Windows Mobile中捕获视频并使用WMV 9 DMO(CLSID_CWMV9EncMediaObject)对其进行编码。这一切都运行良好,但输出视频的比特率太高,导致视频文件太大,我的需要。
最终,我的目标是,以模仿视频设置,微软的相机捕捉对话框输出中的“消息”质量模式从我的C(64kbps的)++代码。目前,我的代码输出一个352kbps比特率的WMV文件。
我能找到的指定WMV9 DMO捕获比特率的唯一例子是this。该代码中的想法基本上是使用一个属性包来为DMO的属性写一个比特率。
更新:在windows mobile中,我能找到的最接近的编解码器属性似乎等于比特率是“g_wszWMVCVBRQuality”。微软的documentation这个属性对我来说是非常困惑的:它基本上似乎认为更高的数字相当于更高的质量,但它绝对没有解释每个数字的细节。当我尝试通过WMV9 DMO的属性设置此属性值为“1”时,我遇到-2147467259(未知)错误。
总结:在windows mobile平台上,指定通过directshow(wmv9)捕获的视频的比特率/质量的基本策略是什么? 我听说(或想知道)以下方法:
- 使用,以更改编码DMO的财产属性包对应比特率/质量(目前不及格)
- 创建自己的自定义代码转换器/编码器指定它。这似乎没有必要,因为WMV编码器工作得很好 - 它只是比特率太高。
- VIDEOINFOHEADER具有比特率属性,但我怀疑在这里指定新的设置将不会改变实际的编码过程,因为我不认为文件属性会在编码之后才起作用。
有什么建议吗?
PS: 我会发布具体的源代码,但在这一点上可能会混淆超过它可以帮助因为我挣扎于如何做到这一点这么多。在这一点上,我只是试图验证一般策略。
谢谢!
好吧,我在设置propertybag值(方法1)时遇到了错误,现在我可以通过编程方式无视事件地设置视频“质量”。
我正在做的事情不合时宜。您可以按照我描述(并链接到)的方式成功更改设置将WMV9 DMO编码器添加到图形中,但在之前调用renderstream。使用一个属性包和VARIANT一起对DMO进行更改(同样,我正在使用CLSID_DMOWrapperFilter)g_wszWMVCVBRQuality属性。对于Windows Mobile,在Windows Mobile 6 SDK的wmcodecstrs.h文件中定义了该全局。
基本上,您设置的数字越低,质量越差。就像MS文档所说的那样; )
例如,将其设置为1会产生看起来非常糟糕的视频。
在附注中,我的dshow代码视频和CCD生成的视频之间的大小差异不是由于视频馈送的比特率,而是由于已经接入视频文件的音频流。根据VLC媒体播放器,CCD的视频在8000hz时是8位音频,而我的代码视频在22050hz时有16位音频。大尺寸差异!现在我刚刚弄清楚如何降低音频设置... >:(
你能发布一些代码,你目前有 – 2010-02-09 12:01:26