首先感谢如何用Python进行屏幕录制?_python 录屏-CSDN博客
以及OpenAI的gpt3.5提供了基础的代码

我重新用PyQt5设计了新的ui界面(所以记得下载对应的库啊!)

源代码如下,后面有时间我慢慢完善,争取做成一个完整的软件

短期目标:

1. 录制的新视频会取代旧视频,修改一下,并统一命名

2. 添加划定区域按钮,使其可以划定区域进行视频录制

3. 考虑如何录制音频进来

import numpy as np
from PIL import ImageGrab
import cv2
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QMessageBox
from threading import Thread

# 设置录制参数
SCREEN_SIZE = (1920, 1080)
FILENAME = 'recorded_video.avi'
FPS = 30.0


# 创建类方法
class VideoRecorder:
    def __init__(self):
        # 初始参数,分别是录制开关参数、输出文件参数
        self.recording = False
        self.out = None
        self.widget = UI_Cv()
        self.init_ui()

    def init_ui(self):
        # 初始化信号与槽
        self.widget.start_button.clicked.connect(self.start_recording)
        self.widget.stop_button.clicked.connect(self.stop_recording)

    # 开始录制按钮
    def start_recording(self):
        self.out = cv2.VideoWriter(FILENAME, cv2.VideoWriter_fourcc(*"XVID"), FPS, SCREEN_SIZE)
        self.recording = True
        self.record_thread = Thread(target=self._record)
        self.record_thread.start()

    def _record(self):
        while self.recording:
            img = ImageGrab.grab(bbox=(0, 0, 1920, 1080))
            print('Recording...')
            frame = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
            self.out.write(frame)

    # 结束录制按钮
    def stop_recording(self):
        self.recording = False
        self.record_thread.join()
        self.out.release()
        cv2.destroyAllWindows()
        QMessageBox.information(self.widget, "Recording Finished", "Video recording has finished.")


# 创建UI界面
class UI_Cv(QWidget):
    def __init__(self):
        super(UI_Cv, self).__init__()
        self.start_button = QPushButton('开始录制', self)
        self.stop_button = QPushButton('结束录制', self)
        self.init_ui()

    def init_ui(self):
        self.start_button.setFixedHeight(24)
        self.start_button.setFixedWidth(100)
        self.start_button.move(50, 50)

        self.stop_button.setFixedHeight(24)
        self.stop_button.setFixedWidth(100)
        self.stop_button.move(50, 100)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    recorder = VideoRecorder()
    recorder.widget.show()
    sys.exit(app.exec_())

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐