如何在 cv2.VideoWriter 中使用 FPS 参数?

Posted

技术标签:

【中文标题】如何在 cv2.VideoWriter 中使用 FPS 参数?【英文标题】:How do I use the FPS argument in cv2.VideoWriter? 【发布时间】:2012-12-04 02:07:29 【问题描述】:

好的,我正在制作视频。我想确切地知道如何使用 FPS 参数。它是一个浮点数,所以我认为这是我想要的每帧之间的间隔。能给我举个例子吗?我只想知道视频会如何随着不同的 FPS 参数值而变化。因为我制作的视频现在太快了。谢谢!

【问题讨论】:

【参考方案1】:

真的就是这样 - frames per second。也就是说,你希望每秒显示多少帧?

这是一个例子:

writer = cv2.VideoWriter(filename="my_video.avi",  #Provide a file to write the video to
fourcc=cv2.cv.CV_FOURCC('i','Y', 'U', 'V'),            #Use whichever codec works for you...
fps=15,                                        #How many frames do you want to display per second in your video?
frameSize=(width, height))                     #The size of the frames you are writing

示例用法:

while True:
    flag, frame = capture.read()
    cv2.imshow("Camera", frame)
    key_pressed = cv2.waitKey(10)
    if key_pressed == 27:                           #Escape key
        break
    writer.write(frame)
cv2.destroyAllWindows()

因此,您将拥有一个视频文件,该文件由您的相机拍摄的所有静止帧拼接在一起形成一个视频。每秒显示的帧数将与您使用 fps 参数设置的一样。 (如果你的视频太快,我建议设置较低的fps

我写了这段代码,所以我没有测试它,但它应该可以工作。如果您有任何疑问或问题,请告诉我。希望对你有帮助!

【讨论】:

感谢您的回答,我使用kivy Clock.schedule_interval( func, 0) 而不是while loop 来记录我的屏幕,我尝试将fps 设置为15,@ 987654331@ 和 5 ,但对于 fps = 5 or 10 来说,对于快动作视频来说似乎有点滞后。有什么解决办法吗? @PaulLam 如果您的屏幕刷新率为 60Hz,但您每秒只能捕获 5 到 10 帧,那么您会丢失很多信息。你能每秒捕捉更多帧吗? 嗯,我不确定。目前我正在尝试使用thread 来线程化一个使用while 循环来捕获帧的函数。我认为它可以捕获更多帧,但似乎还不够。我使用 print 打印 True 如果已经捕获 1 秒,否则 print("") 并且在打印出 True 之前我会得到 13 - 15 个空白行

以上是关于如何在 cv2.VideoWriter 中使用 FPS 参数?的主要内容,如果未能解决你的问题,请参考以下文章

使用 cv2 VideoWriter 编写 numpy 数组

cv2.VideoWriter() 在带有 Raspicam 的 Raspberry Pi 上不起作用

cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

cv2.VideoWriter 保存图像为视频的几个问题

cv2.VideoWriter 不会使用fourcc h.264写入文件(使用罗技c920,python 2.7,windows 8)

如何捕获 OpenCV 写入 stderr 的消息?