how to get a clips from a video file?

xliu2019 2007-05-19 10:00:45
这是我写的一段code,想实现从视频文件中提取一段出来的功能,
我建立的graph 是
source--->grabber--->writer

可是程序运行的时候,在连接videoout和writein两个pin的时候出错
HRESULT hr;
REFERENCE_TIME rtNow=10000000, rtStop=1000000000;
CoInitialize(NULL);

USES_CONVERSION;
CString m_szInputFile = "E:\\Video\\video\\19.mpg";
TCHAR * tFilename = m_szInputFile.GetBuffer(MAX_PATH);
WCHAR * wFilename = T2W(tFilename);

CComPtr< IGraphBuilder > pGraph;
pGraph.CoCreateInstance(CLSID_FilterGraph);
if(!pGraph)
{
AfxMessageBox(TEXT("Could not create a graph"));
return;
}
// create a CaptureGraphBuilder to help connect filters
CComPtr< ICaptureGraphBuilder > pBuilder;
pBuilder.CoCreateInstance(CLSID_CaptureGraphBuilder);
// tell the capture graph builder what graph we're using
hr = pBuilder->SetFiltergraph(pGraph);
if(FAILED(hr))
{
AfxMessageBox(TEXT("Could not setup capture graph"));
return;
}
// ask directshow to add the appropriate source filter for the given file
CComPtr< IBaseFilter > pSourceBase;
hr = pGraph->AddSourceFilter(wFilename, L"Source", &pSourceBase);
if(!pSourceBase)
{
AfxMessageBox(TEXT("Could not load source filter for file"));
return;
}
CComPtr< IBaseFilter > pVideoFilter;
pVideoFilter.CoCreateInstance(CLSID_SampleGrabber);
hr = pGraph->AddFilter(pVideoFilter, L"VideoGrabber");

CComPtr<IBaseFilter> pFileWriter;
hr = pFileWriter.CoCreateInstance(CLSID_FileWriter);
hr = pGraph->AddFilter(pFileWriter,L"File Writer");
//// Set File name in File Writer filter
CComPtr <IFileSinkFilter> pfsink;
hr = pFileWriter->QueryInterface(IID_IFileSinkFilter,(void**)&pfsink);
hr = pfsink->SetFileName(L"C:\\test.mpg"/*A2COLE(m_avi)*/,NULL);

CComPtr<IPin> pSourcePin = GetOutPin(pSourceBase, 0);
CComPtr<IPin> pVideoIn = GetInPin (pVideoFilter, 0);
CComPtr<IPin> pVideoOut = GetOutPin(pVideoFilter, 0);
CComPtr<IPin> pWriteIn = GetInPin(pFileWriter, 0);

hr = pGraph->Connect(pSourcePin,pVideoIn);
if(FAILED(hr))
{
AfxMessageBox(TEXT("Cannot connect up video chain:1"));
return;
}
hr = pGraph->Connect(pVideoOut,pWriteIn);
if(FAILED(hr))
{
AfxMessageBox(TEXT("Cannot connect up video chain:2"));
return;
}
CComQIPtr< IMediaControl, &IID_IMediaControl > pControl(pGraph);
CComQIPtr< IMediaSeeking, &IID_IMediaSeeking > pSeeking(pGraph);
CComQIPtr< IMediaEvent, &IID_IMediaEvent > pEvent(pGraph);

hr = pSeeking->SetPositions( &rtNow,
AM_SEEKING_AbsolutePositioning,
&rtStop,
AM_SEEKING_AbsolutePositioning );
// Run the graph.
hr = pControl->Run();

// Wait for completion.
long evCode;
hr = pEvent->WaitForCompletion(INFINITE, &evCode);
pControl->Stop();
// Clean up.
CoUninitialize();

请各位指点一下,另外,我的这段代码,能实现提取一段视频的功能吗?
...全文
153 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
systemthink 2007-05-20
  • 打赏
  • 举报
回复
视频是什么格式的呀?
去codeproject上找一哈,有例子的,很不错
数据名称:337个城市智慧健康养老DID数据(2017-2025) 数据范围:31省 数据来源:工信部 数据注意:智慧健康养老是以智能硬件、数字化服务平台为载体,融合物联网、大数据、云计算、AI 等信息技术,围绕老年人健康管护、日常养老两大需求形成的新型产业与服务体系;核心是把健康管理、安全监护、生活照料、医疗康复、精神慰藉打通,实现医养结合、居家 - 社区 - 机构一体化,缓解老龄化与护理人力缺口压力 数据指标:city、year、treat Python 数据分析完整实操流程 整体分为 6 大步骤:数据读取 → 数据清洗(最耗时)→ 描述性统计探索 → 可视化分析 → 深度挖掘(相关性、分组、回归等)→ 结果导出 常用工具库: 数据读写、表格处理:pandas 数值计算:numpy 绘图可视化:matplotlib、seaborn 高级统计 / 机器学习:scipy、scikit-learn 我国智慧健康养老产业持续深化落地,各地依托数字技术、智能终端、大数据平台,逐步构建起机构、社区、居家三位一体的智慧养老服务体系,数字化赋能养老服务转型升级成效持续显现。 全国多地持续推进智慧养老院建设、居家养老智能设备布设、养老服务数字化平台搭建,逐步实现养老服务精准化、监管智能化、供给多元化。 各地积极探索养老数据资源化利用、医养智慧融合、适老科技产品落地应用,形成了一批可复制、可推广的城市智慧养老发展模式。

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧