首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >寻找MPEG-2,从哪里开始?

寻找MPEG-2,从哪里开始?
EN

Stack Overflow用户
提问于 2013-02-08 00:26:54
回答 1查看 955关注 0票数 0

我希望能够在MPEG-2文件(从DVD,我猜它被称为MPEG-2程序流)中寻找任意帧。到目前为止,我一直在使用OpenCV 2.1来访问这些帧,但这只能在一帧接一帧的基础上工作(仅限前向搜索)。后来,当我安装OpenCV 2.3.1时,这种可能性就消失了,也就是说,仅限于OpenCV。无论如何,我希望在没有OpenCV的情况下做到这一点。我已经设法寻找关键帧(我想)或每某某帧(例如每12帧)。现在,查看VirtualDub帧的精确查找是可能的。上面写着:“解析交错的MPEG-2文件”。这到底是什么意思,我必须从哪里开始做同样的事情?这是合法的吗,我记得我在什么地方读过一些东西,但我记不清了。我正在使用directshow在C++中编程。据我所知,directshow不会这么做。然后我研究了CBaseFilter,streamtime方法等,但在我深入到这个复杂的主题之前,我想知道这是不是正确的方法。期待您的回复,谢谢!

@ Geraint:过滤器图的代码片段:

代码语言:javascript
复制
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,IID_IGraphBuilder,(LPVOID *)&pGraphBuilder);
 CoCreateInstance(CLSID_MPEG2Demultiplexer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pib);
 CoCreateInstance(CLSID_CMPEG2VidDecoderDS,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pib2);

 pGraphBuilder->AddFilter(pib,L"Sample Splitter");
 pGraphBuilder->AddFilter(pib2,L"Sample Decoder");

 ZeroMemory(&am_media_type, sizeof(am_media_type));
am_media_type.majortype = MEDIATYPE_Video;
am_media_type.subtype = MEDIASUBTYPE_MPEG2_VIDEO;
am_media_type.formattype = FORMAT_MPEG2Video;

pGraphBuilder->QueryInterface(IID_IMediaControl,(LPVOID *)&pMediaControl);
pGraphBuilder->QueryInterface(IID_IMediaSeeking, (void**)(&pMediaSeeking));
pGraphBuilder->QueryInterface(__uuidof(IVideoFrameStep), (PVOID *)&fst); 
pGraphBuilder->QueryInterface(IID_IMediaEvent, (void **)&imev);
pGraphBuilder->QueryInterface(IID_IBasicVideo,(LPVOID *)&ibv);

pGraphBuilder->RenderFile(FILENAME,0);

然后我使用IMediaSeeking查找vid。我也尝试了帧步进(因此上面的参考文献)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-08 23:14:40

DirectShow能够提供帧精确寻道。但是,如果没有索引,这将基于距文件开始的时间偏移量,而不是帧计数。

使用IMediaSeeking设置开始时间。多路分解器将在此之前开始传送压缩帧。解码器将从上一个关键帧开始解码,但将丢弃所选起始点之前的所有帧。

G

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14755980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档