2010-12-11 62 views
0

我創建了一個打開簡歷的攝像機/錄像機,並且一切都很好記錄。問題是,當我播放視頻時,即使視頻文件只播放30.0 fps,我也能獲得超高速播放。有人能幫我發現我沒有錄製足夠幀的邏輯錯誤嗎?基於fps,我確實延遲了幾毫秒。視頻錄製邏輯錯誤 - fps

我知道我是數學愚蠢的,就是找不到它。

self.FPS = 30.0 
    self.VIDEO_FILENAME = 'test.mp4' 
    self.CODEC = highgui.CV_FOURCC('D','I','V','X') #mpeg-4 codec                 
    self.VIDEO_RESOLUTION = (640,480) 
    self.camera = highgui.cvCreateCameraCapture(0) 
    self.writer = highgui.cvCreateVideoWriter(self.VIDEO_FILENAME, self.CODEC, 
               self.FPS, self.VIDEO_RESOLUTION, 1)   

    while True: 
     im = highgui.cvQueryFrame(self.camera) 
     im = opencv.cvGetMat(im) 
     highgui.cvWriteFrame(self.writer, im) 
     pygame.time.delay(int(1000 * 1.0/self.FPS)) ## of milliseconds 
+0

是否可以發佈樣本視頻? – misha 2010-12-11 04:11:39

回答

1

不,沒有線索,聽起來像延遲功能沒有拖延,奇怪,夠用了。但是,這裏有一些額外的評論:

  1. 不要使用浮動只是爲了讓司工作正常。使用今後進口替代:

    >>> from __future__ import division 
    >>> 1000/30 
    33.3333333333336 
    

    現在你可以做的不是int(1000 * 1.0/30),INT(1000/30)。好多了。

  2. 此外,您正在使用pygames延遲功能,這基本上延緩了咀嚼處理器的時間。餿主意。使用wait()代替。

  3. 1000/30是33.33333,而你的代碼會延遲33,所以它會運行1%太快,除非顯示圖像只需要1%的時間。 :)如果顯示圖像需要比0.333333333毫秒更長的時間,則應該實際運行。 :-)你應該看看顯示頁面後的時間,並等待下一幀出現的剩餘時間。 pygame.time.Clock可能對此有所幫助。

+0

感謝您的提示;非常感激。 – ash 2010-12-29 06:06:38