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/

相关推荐
yaoh.wang3 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
醇氧3 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
小鸡吃米…4 小时前
Python PyQt6教程七-控件
数据库·python
MapGIS技术支持4 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
程序员zgh5 小时前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
1916zz5 小时前
Extreme programing 方利喆 _ 江贤晟
python
长安牧笛5 小时前
智能鞋柜—脚气终结者,内置温湿度传感器和紫外线灯,晚上回家,把鞋放进去,自动检测湿度,湿度超标就启动烘干+紫外线杀菌,第二天穿鞋干燥无异味。
python
小灰灰搞电子5 小时前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
weixin_457760005 小时前
PIL库将图片位深度是1、8、32统一转换为24的方法
python
by__csdn5 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript