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/

相关推荐
机器视觉知识推荐、就业指导18 分钟前
Qt 和 C++,是不是应该叫 Q++ 了?
开发语言·c++·qt
m0_7369191024 分钟前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
学习中的DGR30 分钟前
[极客大挑战 2019]Http 1 新手解题过程
网络·python·网络协议·安全·http
m0_7482299936 分钟前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
liu****36 分钟前
三.Qt图形界面开发完全指南:从入门到掌握常用控件
开发语言·c++·qt
布茹 ei ai1 小时前
Python屏幕监视器 - 自动检测屏幕变化并点击
开发语言·python
天天睡大觉1 小时前
Python学习12
网络·python·学习
小龙报1 小时前
【C语言进阶数据结构与算法】单链表综合练习:1.删除链表中等于给定值 val 的所有节点 2.反转链表 3.链表中间节点
c语言·开发语言·数据结构·c++·算法·链表·visual studio
黎雁·泠崖1 小时前
Java抽象类与接口:定义+区别+实战应用
java·开发语言
cfqq19891 小时前
Settings,变量保存
开发语言·c#