Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video DirectShow记录问题-fps_Video_Directshow_Video Capture_Directshow.net - Fatal编程技术网

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时,丢弃的捕获帧似乎被完全忽略。虽然这在转码环境中并不重要(因为帧从未被丢弃),但在捕获时这是一个严重的限制,因为电影长度将被丢弃的帧数缩短。