使用Pyqt5制作屏幕录制界面功能

目录
  • 应用平台
  • 窗口设置
  • 主体窗口代码
  • 划选窗口代码
  • 总结

最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力。
接下准备写使用python如何做屏幕录制工具的系列文章:

录制屏幕制作视频

录制音频

合成视频,音频

基于pyqt5制作可视化窗口

大概上述四个部分,希望自己能够尽快完善,前两篇文章分享了利用opencv制作了屏幕录制部分,利用PyAudio录制音频,本篇文章分享如何使用ffmpeg将同时录制的屏幕录像和音频合成为有声音的屏幕录像。

应用平台

  • windows 10
  • python 3.7
  • ffmpeg

窗口设置

暂定窗口显示效果如下,固定大小:

  • 左侧显示部分:显示当前抓取的窗口图像
  • 右侧–选择区域:点击按钮会出现半透明框,左击鼠标划选,松开选定,此时按钮显示划选的窗口大小,并且左侧进行显示当前划选位置的图像。
  • 是否录制鼠标:默认录制,若在录制过程中鼠标出现频闪现象属于正常。
  • 画面录制帧率:10~60,默认为15,步进单位为1。
  • 音频来源:会读取当前设备支持的音频录制硬件并显示,可选择无,即不录制声音。
  • 保存目录:选择当前录制的音频保存位置,在首次录制时必须选择。 命名规则为当前时间戳,每次录制结束后会更新时间戳作为新的文件名。
  • 开始/停止:快捷键F7,开始录制或停止录制桌面视频。

主体窗口代码

在窗口设计中选择合适的部件是非常重要的,可以使用QtDesigner,拉取部件并绘制合适的窗口大小,使用pip install pyqt5-tools安装,在包路径下可以找到QtDesigner工具,布局好后将ui文件导出成py文件,在后续绑定函数时继续使用,或者使用代码编码创建窗口。

from PyQt5.QtWidgets import (QMainWindow, QApplication, QDesktopWidget, QWidget, QFrame,
                             QLabel, QPushButton, QComboBox, QCheckBox, QSpinBox, QDialog, QFileDialog, QMessageBox)
from PyQt5.QtGui import QIcon, QFont, QColor, QImage, QPixmap, QPen, QPainter
from PyQt5.QtCore import QRect, Qt, QPoint, QMetaObject, QThread  

class Ui_MainWindow(QMainWindow):
    """主体窗口设置"""
    def __init__(self):
        super().__init__()
        self.setObjectName("MainWindow")  # 设置窗口对象名称
        self.setWindowTitle('屏幕录制')    # 设置窗口标题
        self.resize(512, 352)   # 设置窗口大小
        self.setupUi()     # 设置显示部件
        self.show()        # 窗口显示
    def setipUi(self):
        # 设置窗口需要显示的部件
        # self.centralwidget = QWidget(self)  部件载体
        # self.centralwidget.setObjectName("centralwidget")
        # 标签框设置: QLabel(self.centralwidget)
        # 复选框设置: QCheckBox(self.centralwidget)
        # 按键设置:   QPushButton(self.centralwidget)
        # 调度框设置: QSpinBox(self.centralwidget)
def main():
    """运行函数"""
    app = QApplication(sys.argv)
    app.setAttribute(Qt.AA_UseHighDpiPixmaps)
    ui = Ui_MainWindow()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

划选窗口代码

在录制桌面屏幕有只录制部分界面的需求,这需要设置一个事件来完成划选的动作,这里选择重新打开一个窗口来充满整个屏幕,鼠标在新建立的画面中可以滑动鼠标以选择需要录制的窗口部分。

class MousePaint(QDialog):
    """移动鼠标获取屏幕捕获范围"""

    def __init__(self):
        super().__init__()
        self.setMouseTracking(True)
        # 设置窗口布满整个屏幕
        self.showFullScreen()
        # 设置窗体无边框
        self.setWindowFlags(Qt.FramelessWindowHint)  # 窗口置顶,无边框
        # 设置背景透明
        self.setWindowOpacity(0.5)
        self.initUI()
        self.setFocus()
    def initUI(self):
        self.setGeometry(*(QDesktopWidget().screenGeometry()).getRect())
        self.pix = QPixmap()
        self.lastpoint = QPoint()
        self.endpoint = QPoint()
        self.pos = None
        self.bline = 0
    def mousePressEvent(self, event):
        # 监听鼠标按压事件
        if event.button() == Qt.LeftButton:
            self.lastpoint = event.x(), event.y()
            self.bline = 1
        elif event.button() == Qt.RightButton:
            self.close()
        event.accept()
    def mouseReleaseEvent(self, event):
        # 监听鼠标释放事件
        self.endpoint = event.x(), event.y()
        self.close()
    def mouseMoveEvent(self, event):
        # 监听鼠标移动事件
        if self.bline == 1:
            self.pos = event.x(), event.y()
            event.accept()
            self.update()
    def paintEvent(self, event):
        # 绘画事件
            pp = QPainter(self)
            pen = QPen()  # 定义笔格式对象
            pen.setWidth(5)  # 设置笔的宽度
            pen.setColor(QColor(255, 0, 0))
            pp.setPen(pen)
            lpx, lpy = self.lastpoint
            pp.drawRect(lpx, lpy, self.pos[0] - lpx, self.pos[1] - lpy)

监听鼠标事件在Pyqt5中都有相应的事件方法,这里只需要重载函数,并在对应函数方法下定义在本次监听事件中需要完成怎样的任务即可。

跟主窗口函数部分进行照应,当按下选择区域按钮后,打开屏幕捕获窗口,当选择完成时,返回窗口位置及大小,在主窗口显示窗口画面及大小。

在窗口运行过程中录制视频,如果未在程序中设置线程进行任务会造成窗口界面出现卡死现象,所以在调用录制视频和录制音频部分,可以使用线程与界面运行程序进行分离。

例如:

from PyQt5.QtCore import QThread  # Pyqt5的QThread类
from Screenshot_record import Screenshot

class Thread_screenshot(QThread):
    def __init__(self):
        super().__init__()
        self.screen = Screenshot()  # 屏幕录制类

总结

用python动手做一个屏幕录制工具到这里已经完成了,后续如果有改进部分依旧会更新文章,此系列中使用了很多第三方包,也就是因为python第三包繁多且优质,可以减少很多时间,通过这些第三方包来组建自己想要实现程序。由于总体代码限于文章篇幅,已经该系列文章所提到的代码上传至github,如有兴趣,可下载测试。

源码储存仓库:

https://github.com/lk-itween/FunnyCodeRepository/tree/main/Screenshot

软件链接提取:

如需测试生成的软件(仅windows平台)。
github
我们本地下载

到此这篇关于使用Pyqt5制作屏幕录制界面的文章就介绍到这了,更多相关Pyqt5屏幕录制界面内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法

    PyQt5: 程序入口添加 QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) Qt5: 程序入口添加 QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); 以上这篇在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python+OpenCV+pyQt5录制双目摄像头视频的实例

    起因 说起来录制视频,我们可能有很多的软件,但是比较坑的是,好像很少的软件支持能够同时录制两个摄像头的视频,于是我们用python自己写一个.要是OpenCV+python.貌似很简单就能OK的事情,但是,我们的项目不是一般要展示给老师看嘛.谁愿意看一个没有界面的录制过程是吧~,最后会附上源代码~ 依赖的包 在这里,我直接把import的包写出来了各位可以进行对号入座,然后就能知道需要安装哪个包啦! import cv2 import numpy as np from PyQt5.QtWidge

  • 使用Pyqt5制作屏幕录制界面功能

    目录 应用平台 窗口设置 主体窗口代码 划选窗口代码 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,前两篇文章分享了利用opencv制作了屏幕录制部分,利用PyAudio录制音频,本篇文章分享如何使用ffmpeg将同时录制的屏幕录像和音频合成为有声音

  • 基于Python+OpenCV制作屏幕录制工具

    目录 应用平台 屏幕录制部分 计算视频最优fps及使用numpy计算中间帧数组 使用pynput监听键盘按键 如何保存MP4格式视频 源码 总结 最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力.接下准备写使用python如何做屏幕录制工具的系列文章: 录制屏幕制作视频 录制音频 合成视频,音频 基于pyqt5制作可视化窗口 大概上述四个部分,希望自己能够尽快完善,接下来开始使用python制作屏幕录制部分. 应用平台 wind

  • Android实现屏幕录制功能

    本文实例为大家分享了Android实现屏幕录制功能的具体代码,供大家参考,具体内容如下 1.效果图: 2.添加依赖 dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompa

  • 只用20行Python代码实现屏幕录制功能

    一.模块安装 首先,我们需要用到两个python的两个模块,win32gui和PyQt5 1.pip install win32gui 2.pip install PyQt5 1.pip install win32gui PS C:\Users\lex\Desktop> pip install win32gui Looking in indexes: http://mirrors.aliyun.com/pypi/simple Requirement already satisfied: win3

  • Python利用PyQt5制作一个获取网络实时数据NBA数据播报GUI功能

    制作NBA数据爬虫 捋顺思路 我们在这里选择的是百度体育带来的数据,我们在百度当中直接搜索NBA跳转到网页,我们可以看到,百度已经为我们提供了相关的数据 我们点击进去后,可以发现这是一个非常简洁的网址 我们看一下这个地址栏,发现毫无规律https://tiyu.baidu.com/live/detail/576O5Zu955S35a2Q6IGM5Lia56%2Bu55CD6IGU6LWbI2Jhc2tldGJhbGwjMjAyMS0wNi0xMyPniLXlo6t2c%2BWspritq%2Bi

  • Python实战项目用PyQt5制作漫画脸GUI界面

    目录 最终效果 前言 1.PyQt5的安装. 1.PyQt5库的安装. 2.qt designer 布局的使用. 1:打开这个设计师 2:创建一个窗口 3:设计界面,用鼠标拖动左边的控件. 4:ui转化为py 5:在python上面运行转化后的py文件 6:运行py文件 3.百度智能云api的调用. 4.调控界面的控件. 5.最终成果 6.总结 最终效果 前言 这是最近在学qt这个东西,然后又学会了调用api,然后就想了用pyqt5做一个GUI界面,后期也可以打包分享给其他人使用,所以就最近就写

  • Python实现屏幕录制功能的代码

    前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的.分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流! """python + opencv 实现屏幕录制_by-_Zjh_""&

  • 如何利用PyQt5制作一个简单的登录界面

    目录 环境配置 额外工具配置 生成UI界面 总结 环境配置 新建python虚拟环境并激活 conda create -n pyqt python=3.8 conda activate py36 安装pyqt5 pip install pyqt5 安装pyqt5-tools pip install pyqt5-tools 在PyCharm中新建一个qtdemo工程,并使用这个新建的python虚拟环境作为工程环境 额外工具配置 依次点击File---Settings---Tools---Exte

  • 使用Python来做一个屏幕录制工具的操作代码

    一.写在前面 作为一名测试,有时候经常会遇到需要录屏记录自己操作,方便后续开发同学定位.以前都是用ScreenToGif来录屏制作成动态图,偶尔的机会看到python也能实现.那就赶紧学习下. 二.效果展示 三.知识串讲 这次要讲的东西可能比较多了,涉及到pyqt5 GUI软件的制作.QThread多线程的使用.Sikuli库的图形操作.win32库的模拟键盘操作.cv2库的写视频文件等.下面我们一点点来蚕食我这次写的代码. 1.GUI界面制作 这次我用的是现成的Pyqt5界面布局类,QVBox

  • 基于PyQt5制作一个截图翻译工具

    目录 功能介绍 UI 界面 截图 翻译 文字识别 全局热键(快捷键) 托盘管理 主代码 功能介绍 1.翻译功能 2.截图功能(快捷键 + 截图存储到剪切板中) 3.文字识别OCR(基于百度API的文字识别) UI 界面 截图 截图可以使用第三方截图 或 使用PyQt5截图 此文章使用PyQt5的截图 class Snipper(QtWidgets.QWidget): def __init__(self, parent=None, flags=Qt.WindowFlags()): super().

随机推荐