2012-01-04 113 views
1

我使用OpenCV中捕捉來自攝像機的視頻和存儲和avi文件,問題是,當我完成捕獲和運行AVI文件,視頻流看上去笨拙快...OpenCV捕獲的視頻運行速度比實時更快嗎?

這裏是代碼

int isColor = 1; 
int frameW = 640; 
int frameH = 480; 
int fps  = 25; 

CvCapture* capture = cvCaptureFromCAM(0); 
assert(capture != NULL); 

cvNamedWindow("Webcam", CV_WINDOW_AUTOSIZE); 

CvVideoWriter *writer = cvCreateVideoWriter(
    "out.avi", 
    CV_FOURCC('M','J','P','G'), 
    fps, 
    cvSize(frameW,frameH), 
    isColor 
); 

IplImage* frame = cvQueryFrame(capture); 

while((frame = cvQueryFrame(capture)) != NULL) { 
    cvWriteFrame(writer, frame); 
    cvShowImage("Webcam", frame); 
    char c = cvWaitKey(33); 
    if (c == 27) break; 
} 

我不明白爲什麼當我在Windows 7 32位或64位和VS2008 &的OpenCV 2.3.1使用cvGetCaptureProperty(CV_CAP_PROP_FPS),這funcition荃返回0,那是假的,請幫幫我,謝謝

回答

0

cvSetCaptureProperty和cvGetCaptureProperty並不總是有效。另外,你有沒有試過fps = 30?

同樣值得注意的是,您需要以與捕獲fps相同的fps播放視頻。

+0

如何修復視頻流看起來笨拙快速,如果我試過fps = 30,它會運行得非常快,我只是想讓它像實時運行 – ALexF 2012-01-05 15:42:17

+1

你試過fps = 15和fps = 60嗎?它有所作爲嗎? – 2012-01-05 16:25:13

+0

是啊,我understanded,我結合成功,我使用Commanline:ffmpeg.exe -i 1.wav -i 1.avi -acodec copy -vcodec copy output.avi但它有1個問題是:結合後,當我播放視頻那麼音頻和視頻不同步,例如:在視頻顯示之前發生的聲音,如何同步音頻和視頻記錄? – ALexF 2012-01-06 14:04:36

0

這是一個已知的問題,cvGetCaptureProperty不能正常工作,除非事先調用cvQueryFrame。

+0

不,它仍然失敗,這是我的代碼:cvQueryFrame(camera); \t double xxx = cvGetCaptureProperty(camera,CV_CAP_PROP_FPS); – ALexF 2012-01-05 15:39:22

相關問題