#include "cv.h" #include "highgui.h" int main(int argc, char** argv) { cvNamedWindow("win"); CvCapture* capture = cvCreateCameraCapture(0); IplImage* frame = cvQueryFrame(capture); char* writePath = "f:\\my.avi"; CvVideoWriter* writer = cvCreateVideoWriter( writePath, CV_FOURCC('M','J','P','G'), 12, cvGetSize(frame));//(1)经过反复调试,此处fps调到12时输出的视频才无快放或者慢放到现象。 while(1){ frame = cvQueryFrame(capture); if(!frame) break; cvWriteFrame(writer, frame); cvShowImage("win", frame); char c = cvWaitKey(1);//(2) if(c==27) break; } cvReleaseVideoWriter(&writer); cvReleaseCapture(&capture); cvDestroyWindow("win"); return 0; }
在代码中有两个地方涉及帧率,一个是保存的视频文件需要指定帧率,一个是从摄像头读取画面时需要按一定的帧率(1、2处)。
谁的帧率小就拖了另一个后腿,视频输出的帧率由小帧率所决定。
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
经过试验,选取MPEG-4录像10秒,大小为963kb;选用H263,录像11秒钟,大小为1.25M(仅仅是验证性试验)。