【问题标题】:Open CV screen recording writing to file at wrong speedOpencv屏幕录制以错误的速度写入文件
【发布时间】: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


【解决方案1】:

我还没有测试过这个,但是,我认为这种方法应该会得到更好的结果,因为睡眠将只是剩余的时间。

import time
def thread_start_recording(out, fps):
    frame_time = 1/fps 
    while True:
        start = time.time() # Start processing
        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

        end = time.time() # End of processing
        # Calculate time until next frame
        work_time = end - start
        sleep_time = frame_time - work_time
        if sleep_time < 0:
            raise Exception("Negative sleep time %s means fps should be reduced" % sleep_time)
        time.sleep(sleep_time)
     out.release()

【讨论】:

  • 当我将 fps 设置为 15 时,它说它太多了。它只适用于像 3 这样非常低的数字。屏幕录像机不应该能够在 15 岁时工作
  • 屏幕录像机是否可以以 15fps 的速度工作?是的。这并不意味着你的将以 15fps 的速度工作。一个“真正的”屏幕可能会在高效和快速方面投入大量工作,这没有任何优化。 “如何让我的屏幕录像机运行得​​更快?”可能对另一个问题很重要。
猜你喜欢
  • 2012-07-06
  • 2014-08-28
  • 2011-06-29
  • 2015-10-28
  • 1970-01-01
  • 2011-06-25
  • 2012-12-01
  • 1970-01-01
  • 2021-09-02
相关资源
最近更新 更多