我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

使用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

本地网盘下载:

链接: https://pan.baidu.com/s/1TqQ1JH-M15f4RfVI0_DxPQ?pwd=92ds

提取码: 92ds

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

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

win7自带屏幕录制功能使用(录制屏幕信息及添加批注)

使用电脑时,我们往往会对桌面上的某些操作出现问题,如果当我们面对无法解决的问题束手无策时,这样只好求人上门帮忙了。哎,如今求人难呀,求人上门更难,如果要是远程解决最好了。在Windows7中系统提供了一个“问题步骤录制器&rdq
2023-05-29

怎么利用PyQt5制作一个简单的登录界面

这篇文章主要介绍“怎么利用PyQt5制作一个简单的登录界面”,在日常操作中,相信很多人在怎么利用PyQt5制作一个简单的登录界面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么利用PyQt5制作一个简单的登
2023-07-02

吉奥用户界面。如何制作全屏

php小编新一今天为大家介绍如何制作吉奥(GIO)用户界面的全屏效果。吉奥用户界面是一款功能强大且高度可定制的用户界面库,可以帮助开发者快速构建出现代化的应用程序界面。而全屏效果则可以为应用程序增加更加沉浸式的体验,提升用户的使用感受。接下
吉奥用户界面。如何制作全屏
2024-02-09

怎么用C# WinForm制作登录界面

这篇文章主要讲解了“怎么用C# WinForm制作登录界面”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用C# WinForm制作登录界面”吧!在【解决方案资源管理器】中找到Form1.
2023-06-30

android仿微信聊天界面 语音录制功能

本例为模仿微信聊天界面UI设计,文字发送以及语言录制UI。 1先看效果图: 第一:chat.xml设计
2022-06-06

使用PYQT5怎么实现一个界面嵌套功能

这篇文章给大家介绍使用PYQT5怎么实现一个界面嵌套功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。简单演示下:首先主界面界面:在Form处设置下水平布局,就如下图:左右两侧分别是一个frame控件,左侧frame里
2023-06-08

使用Android制作一个欢迎界面

使用Android制作一个欢迎界面?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。闪屏:在打开App时,展示,持续数秒后,自动关闭,进入另外的一个界面,SplashActiv
2023-05-31

怎么在Mac上使用内部音频录制屏幕

本篇内容主要讲解“怎么在Mac上使用内部音频录制屏幕”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么在Mac上使用内部音频录制屏幕”吧!如何安装黑洞为了在 Mac
2023-04-22

如何使用CSS3制作一个material-design 风格登录界面

这篇文章将为大家详细讲解有关如何使用CSS3制作一个material-design 风格登录界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。心血来潮,想学学 material design 的设计风格,
2023-06-08

利用Android怎么制作一个APP登录界面

这期内容当中小编将会给大家带来有关利用Android怎么制作一个APP登录界面,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.布局的xml文件2023-05-31

简单实现python tkinter制作用户登录界面

这篇文章主要介绍“简单实现python tkinter制作用户登录界面”,在日常操作中,相信很多人在简单实现python tkinter制作用户登录界面问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”简单实现p
2023-06-14

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录