通过Python脚本录屏太快了

问题描述 投票:0回答:2

我可以录制屏幕,但是每当我播放视频时速度都非常快。我该如何解决这个问题?

import pyautogui
import cv2
import numpy as np

resolution = (1920, 1080)
codec = cv2.VideoWriter_fourcc(*"XVID")
filename = "Recording.avi"
fps = 60.0
out = cv2.VideoWriter(filename, codec, fps, resolution)
cv2.namedWindow("Live", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Live", 480, 270)
while True:
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)    
    cv2.imshow('Live', frame)   
    if cv2.waitKey(1) == ord('q'):
        break
    time.sleep(1/30)
out.release()
cv2.destroyAllWindows()
python numpy pyautogui screen-recording
2个回答
0
投票

您可以尝试一些方法来使录制的视频以正常速度播放。一种可能的解决方案是减少记录的每秒帧数 (fps)。在您的代码中,您将 fps 值设置为 60.0,这是一个非常高的值,可能会导致录制的视频播放得太快。尝试将 fps 设置为 25 或 30。此外,您还可以尝试增加调用 sleep() 函数的时间,这将导致循环在帧之间暂停更长的时间。


0
投票

您的视频播放速度设置为 60.0fps。

您捕获帧的速度可能要慢得多。

假设您的“捕获速率”是 20fps

当您将帧组合成 60fps 视频时,视频将有效加速 1:3 倍

您有两种解决方案:

1。减慢播放帧率: 正如 @a5zima 指出的,如果您放慢播放帧速率以匹配您的捕获帧速率,您的视频将以正常速度 (1:1) 播放。

2.加快捕捉速度 您还可以尝试加快捕获帧的速度。 实现此目的的一种方法是使用

mss
而不是
pyautogui

import mss
import cv2
import numpy as np

resolution = (1920, 1080)
codec = cv2.VideoWriter_fourcc(*"XVID")
filename = "Recording.avi"
fps = 60.0
out = cv2.VideoWriter(filename, codec, fps, resolution)
cv2.namedWindow("Live", cv2.WINDOW_NORMAL)
cv2.resizeWindow("Live", 480, 270)
while True:
    sct = mss.mss()
    img = sct.grab(mon)
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)    
    cv2.imshow('Live', frame)   
    if cv2.waitKey(1) == ord('q'):
        break
    time.sleep(1/30)
out.release()
cv2.destroyAllWindows()

当然,可能有更快的方法来进行捕获,因此如果这仍然不能满足您的需求,您可能需要探索替代方案

© www.soinside.com 2019 - 2024. All rights reserved.