Video DirectShow记录问题-fps
我只是创建了一个简单的图形来从源过滤器录制视频:Video DirectShow记录问题-fps,video,directshow,video-capture,directshow.net,Video,Directshow,Video Capture,Directshow.net,我只是创建了一个简单的图形来从源过滤器录制视频: SourceFilter ---> Muxer ---> FileWriter 我可以将来自SourceFilter的视频保存到本地磁盘 But when i try to play the recorded video, it play in "slow motion" :-). 可以确定存在fps(帧每秒)问题。我怎样才能修好它?有什么想法吗 附言: 要检查我的SourceFilter是否提供righ fps,我只需创建另一个
SourceFilter ---> Muxer ---> FileWriter
我可以将来自SourceFilter的视频保存到本地磁盘
But when i try to play the recorded video, it play in "slow motion" :-).
可以确定存在fps(帧每秒)问题。我怎样才能修好它?有什么想法吗
附言:
要检查我的SourceFilter是否提供righ fps,我只需创建另一个图形:
SourceFilter ---> Video Decoder ---> Video Renderer
它以正确的速度(fps)播放
更多详细信息:
SourceFilter(*.mp4 file format) ---> Avi Mux Filter ---> File writer Filter
此记录的fps错误
当我尝试gdclmp4mux()时,我成功地获得了正确的fps
SourceFilter(*.mp4 file format) ---> GDCL MPEG 4 Mux Filter ---> File writer Filter
另一种情况
SourceFilter( *.h264 file format) ---> Avi Mux Filter ---> File writer Filter
SourceFilter( *.h264 file format) ---> GDCL MPEG 4 Mux Filter---> File writer Filter
它录制,但录制的文件不播放
事实上,我不想解码任何东西…只需将原始编码的视频帧(mp4、h264)写入文件。而且我可能不需要syn音频和视频…为什么需要Mux
我的理想过滤器应如下所示:
SourceFilter(whatever format) ---> File writer
拉尔夫的评论可能是正确的。AVI文件格式没有每帧时间戳,只有平均帧速率。因此,当一帧到达时,mux必须决定是将该帧放置在下一个“插槽”中,还是插入一个“丢弃的帧”标记,然后将该帧放置在下一个“插槽”中。如果源过滤器的时间戳与媒体类型的帧速率不匹配,则您将获得此效果
您可以将视频基本流保存到文件中,但使用转储过滤器示例,而不是文件编写器。文件编写器有一个特殊的协议,允许多路复用器随机访问文件(使用时间戳作为文件偏移量)。您只想将数据保存为流,Dump示例就是这样做的。在我的例子中,确实有一个源过滤器没有正确设置AvgTimePerFrame。在我修复了这个问题(这是我自己的源过滤器)之后,AVI也会处理它从上游收到的任何东西。如果您将文件格式和编解码器信息添加到问题中,它会有所帮助。文件格式为mp4和h264。我在“更多细节”部分对我的问题做了更多的详细说明@RalfI以前在AVI mux上遇到过类似的问题,不幸的是,很久以前,我记不起我的案例中出现了什么问题。您是否在源筛选器中根据设置VIDEOINFOHEADER的AvgTimePerFrame?实际上,现在,我只使用GraphiEdit…不编写任何程序…我不在源代码过滤器中做任何修改。进一步说明Geraint答案的示例是:在使用Intel 2012 Media SDK的H.264编解码器和.mp4 muxer时,丢弃的捕获帧似乎被完全忽略。虽然这在转码环境中并不重要(因为帧从未被丢弃),但在捕获时这是一个严重的限制,因为电影长度将被丢弃的帧数缩短。