2012-01-31 65 views
0

我试图根据DirectShow SDK中的pushsource示例创建DirectShow源过滤器。我的源过滤器本质上输出一组位图,每个位图通常会持续600毫秒左右。我已经设置了一个过滤器图形,它使用AsyncReader和一个Wave Parser作为音频,我的新过滤器用于推送视频(过滤器是一个CSourceStream,并且我在FillBuffer函数中填充框架)。这些都连接到WMASFWriter输出WMV。使用WMASFWriter生成在每个关键帧间隔处暂停的视频

我发现的是,在相应的关键帧间隔视频暂停一两秒钟。这在高清分辨率下似乎更糟糕,认为这可能是一个红鲱鱼。什么样的事情可能造成这种情况?它与多少次我允许FillBuffer被调用有关(我的帧速率是30fps,所以我最终将重复几帧相同的位图)?

回答

2

甲常识(相对于与所讨论的效果具体经验)提出一个关键帧的该编码消耗太多的带宽,而其余是不足以编码紧跟关键帧段的运动。我假设这是CBR模式,也许VBR模式可以给出更好的编码。

+0

我的确在使用CBR配置文件 - 目前比特率仅为100kbps。我想这对1080p来说可能很低(特别是在查看Windows Live Movie Maker中的配置文件后)?经过一些初步实验后,将比特率提高到1000kbps似乎对这个问题有很大帮助,所以我怀疑我需要找到一个运行良好的配置。 – Andrew 2012-01-31 12:26:54

+0

所以就是这样,用极低比特率CBR配置文件进行编码,编码器无法进一步降低质量,而是开始丢帧。 – 2012-01-31 12:42:01

+0

是的,我现在正在调查我的个人资料设置。你会为CBR配置文件建议什么样的比特率? – Andrew 2012-01-31 12:48:51