import cv2
import pyautogui
import numpy as np
import threading
class ScreenRecorder:
def __init__(self, mp4name, resolution=(1920, 1080), codec="mp4v", fps=30.0):
self.resolution = resolution
self.codec = cv2.VideoWriter_fourcc(*codec)
self.fps = fps
self.output_file = None
self.out = None
self.recording = False
self.mp4name = mp4name
self.stop_event = threading.Event()
def stop_recording(self):
if self.out is not None:
# 设置停止事件
self.stop_event.set()
# 停止录制
print('停止录制')
self.out.release()
self.out = None
self.recording = False
else:
print("未开始录制!")
def start_recording(self):
self.output_file = self.mp4name
# 创建视频写入对象
self.out = cv2.VideoWriter(self.output_file, self.codec, self.fps, self.resolution)
self.recording = True
while self.recording and not self.stop_event.is_set():
# 获取屏幕截图
img = pyautogui.screenshot()
# 转换为 OpenCV 格式
frame = np.array(img)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# 只有当 self.out 不为空时才写入帧
if self.out is not None:
# 写入视频帧
self.out.write(frame)
# 检查停止事件
if self.stop_event.is_set():
break
def start_recording_thread(self):
recording_thread = threading.Thread(target=self.start_recording)
recording_thread.start()
recorderMP4 = record.ScreenRecorder('./video/' + file_name + '.mp4')
recorderMP4.start_recording_thread()
time.sleep(100)#睡眠录制100秒
recorderMP4.stop_recording()
08-22