python - 录像逻辑错误-fps

我用开放的简历创建了一个摄像机/录像机,一切都很好。问题是当我播放视频时,即使视频文件仅以30.0 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

最佳答案

不,没有线索,听起来像延迟功能没有延迟,奇怪的是。但是,这里有一些其他注释:

  • 不要仅使用浮点数来使除法器正常工作。使用将来的导入代替:
    >>> from __future__ import division
    >>> 1000/30
    33.3333333333336
    

    现在您可以执行int(1000/30)而不是int(1000 * 1.0 / 30)。好多了。
  • 您还使用了pygames延迟功能,该功能基本上是通过减少处理器时间来延迟的。馊主意。使用wait()代替。
  • 1000/30是33.33333,而您的代码将延迟33,因此它将以1%的速度运行,除非显示图像花费的时间恰好是1%。 :)如果显示图像花费的时间超过0.333333333毫秒,则您实际上应该运行缓慢。 :-)您可能应该改为查看显示页面后的时间,然后等待剩余时间直到下一帧出现为止。 pygame.time.Clock可能对此有所帮助。
  • https://stackoverflow.com/questions/4414890/

    相关文章:

    opencv - 关于cvStereorectify的使用

    docker - 'network_mode' 和 'networks' 不能组合解决方法

    opencv - 将OpenCV IplImage或Mat复制到Freeimage FIBITMAP

    opencv - 投影仪和 OpenCV

    objective-c - diff(X)如何转换为OpenCV或Objective C?

    python - 在 Python 2.7 (Ubuntu/Windows XP) 上无法识别 Op

    multithreading - 如何确保两个 docker 容器不处理同一个文件?

    opencv - 从视差生成3D点

    docker - 从正在运行的 keycloak docker 容器导出领域失败

    macos - 从USB而非iSight(OSX)捕获OpenCV