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

7

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

1个回答

13

它实际上就是这样 - 每秒帧数。换句话说,您想每秒显示多少帧?

这里有一个例子:

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设置为较低值)

我凭记忆编写了这段代码,所以我没有测试过它,但它应该可以工作。如果您有任何疑问或问题,请让我知道。希望这能帮助您!


谢谢您的回答,我使用 kivyClock.schedule_interval( func, 0) 来记录我的屏幕,而不是使用 while loop。我已经尝试将 fps 设置为 15105,但对于快速运动的视频,当 fps = 5 或 10 时,它似乎有点卡顿。有什么解决办法吗? - Paul Lam
@PaulLam 如果你的屏幕刷新率为60Hz,但你只捕获每秒5到10帧,那么你会失去很多信息。你能否捕获更多的帧数? - hjweide
嗯,我不确定。目前我正在尝试使用thread来线程化一个使用while循环捕获帧的函数。我认为它可以捕获更多的帧,但似乎仍然不够。我使用print打印True,如果已经捕获了1秒钟,否则print(""),我得到了大约13-15个空行,在True被打印出来之前。 - Paul Lam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接