关于cvCreateFileCapture()读取视频文件失败的解决记录
2014-05-05 15:43
549 查看
用cvCreateFileCapture()读取视频文件,本来看是一个很普通的问题,但遇到播放不出画面时总让人纠结。今天用此函数读取视频文件,总是灰屏闪退。仔细查看问题,发现此函数对视频读取颇为苛刻。要和本机的解码器相匹配。首先下载XviD codec 解码器http://www.xvidmovies.com/codec/,然后确保自己的视频文件为xvid格式的avi文件。又下载了狸窝全能视频转换器http://dl.pconline.com.cn/download/57474.html的,将目标文件确认转换为xvid格式的avi。
补充:XviD的文件扩展名可以是AVI、MKV、MP4等。需要说明的是,仅从扩展名并不能看出这个视频的编码格式。比如说一部电影是.avi格式,但是实际上的视频编码格式可以是DV
Code,也可以是XviD或者其他的;音频编码格式可以是PCM、AC3或者MP3。MP4和MKV格式比AVI更先进,支持更多的功能,比如字幕。AVI视频的字幕需要另外的SRT文件。目前国外绝大多数的影视资源都是AVI格式。
贴出代码:
补充:XviD的文件扩展名可以是AVI、MKV、MP4等。需要说明的是,仅从扩展名并不能看出这个视频的编码格式。比如说一部电影是.avi格式,但是实际上的视频编码格式可以是DV
Code,也可以是XviD或者其他的;音频编码格式可以是PCM、AC3或者MP3。MP4和MKV格式比AVI更先进,支持更多的功能,比如字幕。AVI视频的字幕需要另外的SRT文件。目前国外绝大多数的影视资源都是AVI格式。
贴出代码:
#include "stdafx.h" #include <cv.h> #include <highgui.h> #include <stdio.h> int main(int argc, char** argv) { //Adding something to open a video so that we can read its properties ... IplImage *frame; //To hold movie images cvNamedWindow( "avi",0);//设置为0,可自由改变窗口 CvCapture* capture = cvCreateFileCapture( "F:\\test.avi"); //Read the properties 此部分读取视频属性的只对输入摄像头有效,暂且屏蔽 /*double f = cvGetCaptureProperty(capture,CV_CAP_PROP_FOURCC); char* fourcc = (char*) (&f); printf("Properties of %s are:\n","test.avi"); printf("FORCC = %d | %d | %d | %d |\n",fourcc[0],fourcc[1],fourcc[2],fourcc[3]); */ while(1) { frame = cvQueryFrame(capture); if(!frame) break ; cvShowImage( "avi",frame); char c = cvWaitKey(33); if(c == 27) break; } cvReleaseCapture( &capture ); system("pause"); return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C与C++之间相互调用实例方法讲解
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- C++ Primer 第一部分基本语言
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型