我可以录制屏幕,但是每当我播放视频时速度都非常快。我该如何解决这个问题?
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()
您可以尝试一些方法来使录制的视频以正常速度播放。一种可能的解决方案是减少记录的每秒帧数 (fps)。在您的代码中,您将 fps 值设置为 60.0,这是一个非常高的值,可能会导致录制的视频播放得太快。尝试将 fps 设置为 25 或 30。此外,您还可以尝试增加调用 sleep() 函数的时间,这将导致循环在帧之间暂停更长的时间。
您的视频播放速度设置为 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()
当然,可能有更快的方法来进行捕获,因此如果这仍然不能满足您的需求,您可能需要探索替代方案