第一步:原理
电脑屏幕录制原理
屏幕录制,即屏幕捕获,是指将计算机屏幕上的活动记录下来,生成视频文件。屏幕录制工具通常包括以下几个核心部分:
图像捕获:捕获屏幕上的图像数据。
音频捕获:录制屏幕活动时的系统声音或麦克风输入。
编码压缩:将捕获的图像和音频数据编码压缩,生成视频文件。
输出保存:将编码后的视频数据保存到文件中。
电脑摄像头录制原理
摄像头录制,即摄像头捕获,是指将计算机屏幕上的活动记录下来,生成视频文件。屏幕录制工具通常包括以下几个核心部分:
图像捕获:捕获摄像头上的图像数据。
音频捕获:录制摄像头活动时的系统声音或麦克风输入。
编码压缩:将捕获的图像和音频数据编码压缩,生成视频文件。
输出保存:将编码后的视频数据保存到文件中。
第二步:界面代码
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/
