DirectShow过滤器图形使用WMASFWriter创建视频太短
DirectShow filter graph using WMASFWriter creates video which is too short
我试图基于DirectShow SDK的推送源示例创建一个DirectShow源过滤器。这实际上是向视频输出一组位图。我已经设置了一个过滤器图,它使用Async_reader和Wave Parser用于音频和我的新过滤器来推送视频(过滤器是CSourceStream,我在FillBuffer函数中填充我的帧)。它们都连接到WMASFWriter以输出WMV。
每个位图可以持续几秒钟,所以在FillBuffer函数中,我在传入的IMediaSample上调用SetTime,开始和结束时间相隔几秒钟。这在渲染到屏幕上时工作得很好,但写入磁盘会导致持续时间过短的文件。在编写WMV时,最后一个位图似乎被忽略了(它在视频结束时显示,而不是持续预期的持续时间)。这是我的滤波器和修改的推源滤波器的情况(其中帧长度已增加)。
我已经看到了额外的奇怪的行为,这是不可能有一个视频,不是10秒的倍数在一个点上,而我正试图使这个工作。我不确定这是什么,但我想我应该提一下,如果它是相关的。
我认为结束时间完全被忽略了。通常视频样本只有一个开始时间,因为它们是一个时间点。如果视频中有动作,那么动作是流畅的,尽管视频只是时间点。
我认为解决办法很简单。因为视频在接收到下一帧之前保持不变,所以您可以在视频结束时添加一个虚拟帧。您可以简单地重复前一帧。相关文章:
- 使用 OpenCV C++ 每 1 分钟创建新的视频文件
- 创建可用的H.264视频文件
- OPENCV从Yuyv Pixelformat视频框架创建YUV420或灰度垫子对象
- 使用最新的 ffmpeg API (2017) 创建视频
- 使用C++创建带有“自定义”捕获器的WebRTC视频轨道
- 如何使用AvConv创建灰度视频
- 如何使用avcodec从OpenCV::Mat类型的jpeg图像创建视频
- 开放框架,从两个视频采集卡创建视频纹理
- 使用 QT 创建器在 c++ 中播放视频
- 使用ffmpeg创建视频
- Qml视频创建从C++的图像流
- 从多个视频部分创建单个视频文件
- 从帧创建视频
- 使用QT Creator-C++中的QPixmap序列创建视频文件
- DirectShow过滤器图形使用WMASFWriter创建视频太短
- 如何从磁盘加载Jpeg图像并创建视频文件?Avi等),而无需在c++中使用opencv
- Qt创建视频/AVI文件从小部件
- OpenCV从文本文件创建视频
- 使用 Qt 5.0 以编程方式创建视频
- 使用VideoCapture (OpenCV)从图像创建视频