Directshow 使用WMASFWriter生成在每个关键帧间隔暂停的视频

Directshow 使用WMASFWriter生成在每个关键帧间隔暂停的视频,directshow,wmv,keyframe,Directshow,Wmv,Keyframe,我正在尝试基于DirectShowSDK中的pushsource示例创建DirectShow源代码过滤器。我的源过滤器本质上是向视频输出一组位图,每个位图通常持续约600毫秒。我已经建立了一个过滤器图,它使用Async_reader和一个用于音频的波形分析器以及我的新过滤器来推送视频(过滤器是一个CSourceStream,我在FillBuffer函数中填充我的帧)。它们都连接到WMASFWriter以输出WMV 我发现,在与关键帧间隔相对应的时间,视频会暂停一两秒钟。这在高清分辨率下似乎更糟,

我正在尝试基于DirectShowSDK中的pushsource示例创建DirectShow源代码过滤器。我的源过滤器本质上是向视频输出一组位图,每个位图通常持续约600毫秒。我已经建立了一个过滤器图,它使用Async_reader和一个用于音频的波形分析器以及我的新过滤器来推送视频(过滤器是一个CSourceStream,我在FillBuffer函数中填充我的帧)。它们都连接到WMASFWriter以输出WMV


我发现,在与关键帧间隔相对应的时间,视频会暂停一两秒钟。这在高清分辨率下似乎更糟,认为这可能是一种转移注意力的手段。可能是什么原因造成的?它是否与我允许调用FillBuffer的频率有关(我的帧速率是30fps,因此我最终会在几个帧中重复使用相同的位图)?

一个常识(与有影响的特定经验相反)表明,关键帧的编码消耗了太多的带宽,剩余部分不足以编码紧跟关键帧的片段的移动。我假设这是CBR模式,也许VBR模式可以提供更好的编码。

我确实在使用CBR配置文件-目前比特率仅为100kbps。我猜1080p的价格可能相当低(尤其是在看了Windows Live影音制作中的个人资料之后)?经过一些初步实验,将比特率提高到1000kbps似乎对问题有很大帮助,因此我怀疑我需要找到一种工作良好的配置。就是这样,使用极低比特率CBR模式进行编码,编码器无法进一步降低质量,反而开始丢弃帧。是的,我现在正在调查我的个人资料设置。对于CBR配置文件,您建议采用哪种比特率?请查看“建议的VC1 WMV比特率”: