求教,保存视频帧速率过大

http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=9420

求教,保存视频帧速率过大

帖子由 hydeem » 2010-03-07 11:30

以下代码可以保存视频,但但生成的视频帧速率过大,达到503帧每秒,
*********************************************************
int main()
{
CvCapture* capture=cvCaptureFromCAM(-1);
CvVideoWriter* video=NULL;
IplImage* frame=NULL;
int n;
int fps=25;
if(!capture) //如果不能打开摄像头给出警告
{
printf("no capture\n");
return -1;
}
else
{
frame=cvQueryFrame(capture); //首先取得摄像头中的一帧
video=cvCreateVideoWriter("camera.avi",-1,fps,cvSize(frame->width,frame->height),1); //创建CvVideoWriter对象并分配空间
//保存的文件名为camera.avi,编码要在运行程序时选择,大小就是摄像头视频的大小,帧频率是32
if(video) //如果能创建CvVideoWriter对象则表明成功
{
printf("VideoWriter has created\n")
}
cvNamedWindow("Camera Video",1); //新建一个窗口
while(1)
{
frame=cvQueryFrame(capture); //从CvCapture中获得一帧
if(!frame)
{
printf("no frame\n");
break;
}
n=cvWriteFrame(video,frame); //判断是否写入成功,如果返回的是1,表示写入成功
//cout<<n<<endl;
cvShowImage("Camera Video",frame); //显示视频内容的图片
if(cvWaitKey(40)>0) break; //有其他键盘响应,则退出
}
cvReleaseVideoWriter(&video);
cvReleaseCapture(&capture);
cvDestroyWindow("Camera Video");
}
return 0;
}
*********************************************************************************
以上可以从摄像头采集视频,但生成的视频帧速率过大,达到503帧每秒,请高位高手指点
hydeem
OpenCV幼儿园宝宝
 
帖子: 4
注册: 2010-02-26 20:40

Re: 求教,保存视频帧速率过大

帖子由 niubenbing » 2010-07-26 7:52

对directshow的每种编码方式进行了视频采集速度测量:
统一在Sleep(20)条件下
编码方式一:20帧/10s 即2帧/s Cinepak Codec by Radius
编码方式二:600帧/30s 即20帧/s 无解码器 Intel 4:2:0 Video V2.50
编码方式三:230帧/30s 即8帧/s 有光晕 Intel Indeo(R)Video R3.2
编码方式四:126帧/30s 即4帧/s Intel Indeo? Video 4.5
编码方式五:396帧/30s 即13帧/s Intel IYUV code
编码方式六:596帧/30s 即20帧/s 无解码器 Microsoft REL
编码方式七:380帧/30s 即13帧/s 有光晕 Microsoft Video 1
编码方式八:216帧/30s 即7帧/s Ligos Indeo? XP Video 5.2
编码方式九:396帧/30s 即13帧/s ffdshow 
编码方式十:600帧/30s 即20帧/s 无解码器 DVCPRO HD
编码方式十一:590帧/30s 即20帧/s 无解码器 DVCPRO5O
编码方式十二:420帧/30s 即14帧/s XVID MPEG-4 code
编码方式十三:350帧/30s 即12帧/s 全帧(非压缩)

故在创建视频写入器时的帧率设置应与你所选择的编码方式的速度基本一致,否则就
会出现快放或者慢放的情况。
 
 

四个字符用来表示压缩帧的codec 例如,

CV_FOURCC('P','I','M','1') = MPEG-1 codec

CV_FOURCC('M','J','P','G') = motion-jpeg codec


CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec

CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec

CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec

CV_FOURCC('U', '2', '6', '3') = H263 codec

CV_FOURCC('I', '2', '6', '3') = H263I codec

CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec

若编码器代号为 -1,则运行时会弹出一个编码器选择框.

原文地址:https://www.cnblogs.com/daxingxing/p/2364428.html