Python电脑屏幕&摄像头录制软件(提供源代码)

第一步:原理

电脑屏幕录制原理

屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件。屏幕录制工具通常包括以下几个核心部分:

图像捕获:捕获屏幕上的图像数据。

音频捕获:录制屏幕活动时的系统声音或麦克风输入。

编码压缩:将捕获的图像和音频数据编码压缩,生成视频文件。

输出保存:将编码后的视频数据保存到文件中。

电脑摄像头录制原理

摄像头录制,即摄像头捕获,是指将计算机屏幕上的活动记录下来,生成视频文件。屏幕录制工具通常包括以下几个核心部分:

图像捕获:捕获摄像头上的图像数据。

音频捕获:录制摄像头活动时的系统声音或麦克风输入。

编码压缩:将捕获的图像和音频数据编码压缩,生成视频文件。

输出保存:将编码后的视频数据保存到文件中。

第二步:界面代码

python 复制代码
class Ui_MainWindow(QMainWindow):
    """主体窗口设置"""

    def __init__(self):
        super().__init__()
        self.setObjectName("MainWindow")
        self.setWindowTitle('智慧教室常态化录播系统的设计与实现')
        windowico = file_path('gui_svg.svg')
        self.setWindowIcon(QIcon(windowico))
        self.resize(560, 432)
        self.setFixedSize(560, 432)
        self._dir = '.'
        self.fname = ''
        self.offset_x, self.offset_y = 0, 0
        self.screen_x, self.screen_y = ImageGrab.grab().size        
        self.audio = AudioRecord()
        self.audio.get_in_out_devices()
        self.device_name = None
        self.record_audio = True if self.audio.input_dict else False
        self.hotkey_start = False
        self.screenshot = Thread_screenshot()
        self.setupUi()
        ffmpeg_exists = unpack_7zip_to_exe('ffmpeg')
        if not ffmpeg_exists:
            QMessageBox.warning(self, '请下载ffmpeg!', '请将ffmpeg.exe放在resource目录下再录制!')
        self.show()
        self.timer_camera = QtCore.QTimer()  # 定时器

    def setupUi(self):
        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.label0 = QLabel(self.centralwidget)
        self.label0.setGeometry(QRect(0, 0, 421, 421))
        self.label0.setObjectName("scrollArea")
        # 添加边框
        self.label0.setFrameShape(QFrame.Box)
        self.label0.setFrameShadow(QFrame.Sunken)
        self.get_screen_grab((0, 0, self.screen_x, self.screen_y))
        self.label0.setAlignment(Qt.AlignCenter)
        self.label_1 = QLabel(self.centralwidget)
        font = QFont()
        font.setBold(True)
        self.label_1.setGeometry(QRect(430, 0, 120, 31))
        self.label_1.setTextFormat(Qt.AutoText)
        self.label_1.setFont(font)
        self.label_1.setScaledContents(True)
        self.label_1.setObjectName("录制器")

        self.xb1 = QRadioButton(self.centralwidget)
        self.xb1.setGeometry(QRect(430, 30, 120, 31))
        self.xb1.setChecked(True)
        self.xb2 = QRadioButton(self.centralwidget)
        self.xb2.setGeometry(QRect(430, 60, 120, 31))

        self.label_6 = QLabel(self.centralwidget)
        self.label_6.setGeometry(QRect(430, 90, 120, 31))
        self.label_6.setTextFormat(Qt.AutoText)
        self.label_6.setScaledContents(True)
        self.label_6.setObjectName("注释1")
        self.checkbox = QCheckBox(self.centralwidget)
        self.checkbox.setGeometry(QRect(430, 170, 120, 20))
        self.checkbox.setChecked(True)
        self.checkbox.stateChanged.connect(self.mouse_draw)
        self.checkbox.setObjectName("录制鼠标")
        self.comboBox = QComboBox(self.centralwidget)
        self.comboBox.setGeometry(QRect(430, 270, 120, 20))
        self.comboBox.setEditable(False)
        self.comboBox.addItems(self.audio.input_dict.keys())
        self.comboBox.addItems(['无'])
        self.comboBox.setMaxVisibleItems(9)
        self.comboBox.currentTextChanged.connect(self.change_combox)
        self.comboBox.setObjectName("音频来源")
        self.comboBox_3 = QComboBox(self.centralwidget)
        self.comboBox_3.setGeometry(QRect(430, 330, 120, 20))
        self.comboBox_3.addItems(['双声道', '单声道'])
        self.comboBox_3.currentIndexChanged.connect(self.change_combox)
        self.comboBox_3.setObjectName("声道设置")
        self.pushButton = QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QRect(510, 390, 41, 31))
        self.pushButton.clicked.connect(self.stop)
        self.pushButton.setObjectName("停止")
        self.pushButton_2 = QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QRect(430, 390, 41, 31))
        self.pushButton_2.setObjectName("开始")
        self.pushButton_2.clicked.connect(self.start)
        self.pushButton_3 = QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QRect(430, 360, 120, 23))
        self.pushButton_3.setObjectName("保存目录")
        self.pushButton_3.clicked.connect(self.open_dirpath)
        self.pushButton_4 = QPushButton(self.centralwidget)
        self.pushButton_4.setGeometry(QRect(430, 140, 120, 23))
        self.pushButton_4.setCheckable(True)
        self.pushButton_4.setObjectName("Size")
        self.pushButton_4.clicked.connect(self.get_screen_area)
        self.spinBox = QSpinBox(self.centralwidget)
        self.spinBox.setValue(15)
        self.spinBox.setRange(10, 60)
        self.spinBox.setGeometry(QRect(430, 215, 120, 20))
        self.spinBox.valueChanged.connect(self.screen_fps_mofify)
        self.spinBox.setObjectName("spinBox")
        self.label_2 = QLabel(self.centralwidget)
        self.label_2.setGeometry(QRect(430, 120, 74, 16))
        self.label_2.setTextFormat(Qt.AutoText)
        self.label_2.setObjectName("选择区域")
        self.label_3 = QLabel(self.centralwidget)
        self.label_3.setGeometry(QRect(430, 195, 74, 16))
        self.label_3.setObjectName("帧率")
        self.label_4 = QLabel(self.centralwidget)
        self.label_4.setGeometry(QRect(430, 310, 74, 16))
        self.label_4.setObjectName("声道设置")
        self.label_5 = QLabel(self.centralwidget)
        self.label_5.setGeometry(QRect(430, 250, 74, 16))
        self.label_5.setObjectName("音频来源")
        self.setCentralWidget(self.centralwidget)

        self.retranslateUi()
        QMetaObject.connectSlotsByName(self)

第三步:显示GUI界面(能录制电脑屏幕,也带摄像头录制功能)

第四步:整个工程的内容

项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷

https://www.bilibili.com/video/BV1o1UWBSEHP/

相关推荐
Csvn20 小时前
🌟 LangChain 30 天保姆级教程 · Day 13|OutputParser 进阶!让 AI 输出自动转为结构化对象,并支持自动重试!
python·langchain
Wenweno0o20 小时前
0基础Go语言Eino框架智能体实战-chatModel
开发语言·后端·golang
chenjingming66620 小时前
jmeter线程组设置以及串行和并行设置
java·开发语言·jmeter
cch891820 小时前
Python主流框架全解析
开发语言·python
不爱吃炸鸡柳20 小时前
C++ STL list 超详细解析:从接口使用到模拟实现
开发语言·c++·list
十五年专注C++开发20 小时前
RTTR: 一款MIT 协议开源的 C++ 运行时反射库
开发语言·c++·反射
Momentary_SixthSense20 小时前
设计模式之工厂模式
java·开发语言·设计模式
sg_knight20 小时前
设计模式实战:状态模式(State)
python·ui·设计模式·状态模式·state
好运的阿财20 小时前
process 工具与子agent管理机制详解
网络·人工智能·python·程序人生·ai编程
‎ദ്ദിᵔ.˛.ᵔ₎20 小时前
STL 栈 队列
开发语言·c++