我正在使用
opencv-python
制作屏幕录像机,它可以工作,但 fps 有问题,视频太快,当我降低 fps 时,视频速度变慢,我真的不知道问题是什么,因为我我是一名 JavaScript 开发人员,如果有人知道如何解决这个问题,即以 1 倍速度获得更高的 fps,请帮忙!
我的代码
import cv2
import numpy as np
import pyautogui
def start_screen_recording():
# Define screen resolution and frame rate
screen_width, screen_height = pyautogui.size()
fps = 30
bitrate = 6000 # Adjust as needed
# Create video writer object for MP4
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # You can also use 'x264'
out = cv2.VideoWriter('output.mp4', fourcc, fps, (screen_width, screen_height))
# Record screen
try:
while True:
screenshot = pyautogui.screenshot()
frame = np.array(screenshot)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
out.write(frame)
except KeyboardInterrupt:
# Release resources on Ctrl+C
out.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
start_screen_recording()
根据屏幕捕获的实际帧速率,这可能会导致视频看起来太快或太慢。您应该以较高的帧速率捕获帧,然后在发布视频时更改帧速率,以使屏幕录制看起来以常规速度进行,同时允许更高的帧速率。以下是您可以更改代码来执行此操作的方法。
import cv2
import numpy as np
import pyautogui
def start_screen_recording():
# Define screen resolution and desired frame rate
screen_width, screen_height = pyautogui.size()
desired_fps = 30 # Choose your desired frame rate
bitrate = 6000 # Adjust as needed
# Create video writer object for MP4
fourcc = cv2.VideoWriter_fourcc(*'mp4v') # You can also use 'x264'
out = cv2.VideoWriter('output.mp4', fourcc, desired_fps, (screen_width, screen_height))
# Calculate the time interval between frames to achieve the desired frame rate
frame_interval = 1 / desired_fps
try:
start_time = time.time()
while True:
screenshot = pyautogui.screenshot()
frame = np.array(screenshot)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
out.write(frame)
# Calculate the time elapsed and sleep to maintain the desired frame rate
elapsed_time = time.time() - start_time
sleep_time = frame_interval - elapsed_time
if sleep_time > 0:
time.sleep(sleep_time)
start_time = time.time()
except KeyboardInterrupt:
# Release resources on Ctrl+C
out.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
start_screen_recording()
“frame_interval”计算为预期帧速率的倒数(“1 /desired_fps”),用于决定帧之间的睡眠时间以达到所需的帧速率。 “时间”模块用于确定帧和睡眠之间经过的时间,以维持指定帧速率所需的时间量。这应该确保您的视频以正常速度播放,无论您用于录制的帧速率如何。