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/

相关推荐
hadage2332 小时前
--- git 的一些使用 ---
开发语言·git·python
lly2024064 小时前
HTML与CSS:构建网页的基石
开发语言
一只会写代码的猫4 小时前
面向高性能计算与网络服务的C++微内核架构设计与多线程优化实践探索与经验分享
java·开发语言·jvm
是小胡嘛5 小时前
C++之Any类的模拟实现
linux·开发语言·c++
csbysj20206 小时前
Vue.js 混入:深入理解与最佳实践
开发语言
笨笨聊运维8 小时前
CentOS官方不维护版本,配置python升级方法,无损版
linux·python·centos
Gerardisite8 小时前
如何在微信个人号开发中有效管理API接口?
java·开发语言·python·微信·php
Want5958 小时前
C/C++跳动的爱心①
c语言·开发语言·c++