【发布时间】:2021-06-06 18:06:52
【问题描述】:
我有一些代码可以捕获屏幕,然后将该图像作为帧写入 mp4。但是,当我再次播放视频时,视频的速度已关闭。我记录了自己运行计时器脚本的过程,秒数几乎以两倍的速度下降。我该怎么办?我遵循的代码是here,在观看视频时也有同样的问题。
这是我修改的一些代码:
def thread_start_recording(out, fps):
while True:
img = pyautogui.screenshot()
frame = np.array(img)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
out.write(np.array(frame))
if keyboard.is_pressed('q'):
break
time.sleep(1/20)
out.release()
codec = cv2.VideoWriter_fourcc(*"mp4v")
file_name = "recording.mp4"
fps = 20
out = cv2.VideoWriter(file_name, codec, fps, screensize)
thread = Thread(target=thread_start_recording, args=(out, fps))
thread.start()
thread.join()
【问题讨论】:
-
视频作者有一个
fps参数,可以改一下吗?您是否检查过以什么速率捕获帧?它是否与作者指定的fps匹配?您尝试过什么解决方法? -
我在 writer 中指定了 20 的 fps。我认为这可能是因为当我从 while 循环运行它时,循环以未指定的速度运行,所以它会关闭。我尝试以 1/fps 的速度导入时间和睡眠,但由于某种原因仍然无法正常工作。
-
1/fps很好,但这是您的总帧时间,您会花费一些时间来捕获和写入帧,因此您只需要在开始您的下一帧 -
在问题中也包含您的帧计时代码,这会有所帮助。或者至少是缩略版
-
我添加了用于视频捕获的代码。我可以添加一些代码来消除帧错误吗?
标签: python opencv video computer-vision