亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2022年04月22日 12:06:24   作者:宿者朽命  
這篇文章主要介紹了使用Pyqt5制作屏幕錄制界面,主要介紹如何使用ffmpeg將同時(shí)錄制的屏幕錄像和音頻合成為有聲音的屏幕錄像,需要的朋友可以參考下

最近有在使用屏幕錄制軟件錄制桌面,在用的過(guò)程中突發(fā)奇想,使用python能不能做屏幕錄制工具,也鍛煉下自己的動(dòng)手能力。
接下準(zhǔn)備寫(xiě)使用python如何做屏幕錄制工具的系列文章:

錄制屏幕制作視頻

錄制音頻

合成視頻,音頻

基于pyqt5制作可視化窗口

大概上述四個(gè)部分,希望自己能夠盡快完善,前兩篇文章分享了利用opencv制作了屏幕錄制部分,利用PyAudio錄制音頻,本篇文章分享如何使用ffmpeg將同時(shí)錄制的屏幕錄像和音頻合成為有聲音的屏幕錄像。

應(yīng)用平臺(tái)

  • windows 10
  • python 3.7
  • ffmpeg

窗口設(shè)置

暫定窗口顯示效果如下,固定大?。?/p>

  • 左側(cè)顯示部分:顯示當(dāng)前抓取的窗口圖像
  • 右側(cè)–選擇區(qū)域:點(diǎn)擊按鈕會(huì)出現(xiàn)半透明框,左擊鼠標(biāo)劃選,松開(kāi)選定,此時(shí)按鈕顯示劃選的窗口大小,并且左側(cè)進(jìn)行顯示當(dāng)前劃選位置的圖像。
  • 是否錄制鼠標(biāo):默認(rèn)錄制,若在錄制過(guò)程中鼠標(biāo)出現(xiàn)頻閃現(xiàn)象屬于正常。
  • 畫(huà)面錄制幀率:10~60,默認(rèn)為15,步進(jìn)單位為1。
  • 音頻來(lái)源:會(huì)讀取當(dāng)前設(shè)備支持的音頻錄制硬件并顯示,可選擇無(wú),即不錄制聲音。
  • 保存目錄:選擇當(dāng)前錄制的音頻保存位置,在首次錄制時(shí)必須選擇。 命名規(guī)則為當(dāng)前時(shí)間戳,每次錄制結(jié)束后會(huì)更新時(shí)間戳作為新的文件名。
  • 開(kāi)始/停止:快捷鍵F7,開(kāi)始錄制或停止錄制桌面視頻。

主體窗口代碼

在窗口設(shè)計(jì)中選擇合適的部件是非常重要的,可以使用QtDesigner,拉取部件并繪制合適的窗口大小,使用pip install pyqt5-tools安裝,在包路徑下可以找到QtDesigner工具,布局好后將ui文件導(dǎo)出成py文件,在后續(xù)綁定函數(shù)時(shí)繼續(xù)使用,或者使用代碼編碼創(chuàng)建窗口。

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):
    """主體窗口設(shè)置"""
    def __init__(self):
        super().__init__()
        self.setObjectName("MainWindow")  # 設(shè)置窗口對(duì)象名稱(chēng)
        self.setWindowTitle('屏幕錄制')    # 設(shè)置窗口標(biāo)題
        self.resize(512, 352)   # 設(shè)置窗口大小
        self.setupUi()     # 設(shè)置顯示部件
        self.show()        # 窗口顯示
    def setipUi(self):
        # 設(shè)置窗口需要顯示的部件
        # self.centralwidget = QWidget(self)  部件載體
        # self.centralwidget.setObjectName("centralwidget")
        # 標(biāo)簽框設(shè)置: QLabel(self.centralwidget)
        # 復(fù)選框設(shè)置: QCheckBox(self.centralwidget)
        # 按鍵設(shè)置:   QPushButton(self.centralwidget)
        # 調(diào)度框設(shè)置: QSpinBox(self.centralwidget)
def main():
    """運(yùn)行函數(shù)"""
    app = QApplication(sys.argv)
    app.setAttribute(Qt.AA_UseHighDpiPixmaps)
    ui = Ui_MainWindow()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

劃選窗口代碼

在錄制桌面屏幕有只錄制部分界面的需求,這需要設(shè)置一個(gè)事件來(lái)完成劃選的動(dòng)作,這里選擇重新打開(kāi)一個(gè)窗口來(lái)充滿(mǎn)整個(gè)屏幕,鼠標(biāo)在新建立的畫(huà)面中可以滑動(dòng)鼠標(biāo)以選擇需要錄制的窗口部分。

class MousePaint(QDialog):
    """移動(dòng)鼠標(biāo)獲取屏幕捕獲范圍"""

    def __init__(self):
        super().__init__()
        self.setMouseTracking(True)
        # 設(shè)置窗口布滿(mǎn)整個(gè)屏幕
        self.showFullScreen()
        # 設(shè)置窗體無(wú)邊框
        self.setWindowFlags(Qt.FramelessWindowHint)  # 窗口置頂,無(wú)邊框
        # 設(shè)置背景透明
        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):
        # 監(jiān)聽(tīng)鼠標(biāo)按壓事件
        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):
        # 監(jiān)聽(tīng)鼠標(biāo)釋放事件
        self.endpoint = event.x(), event.y()
        self.close()
    def mouseMoveEvent(self, event):
        # 監(jiān)聽(tīng)鼠標(biāo)移動(dòng)事件
        if self.bline == 1:
            self.pos = event.x(), event.y()
            event.accept()
            self.update()
    def paintEvent(self, event):
        # 繪畫(huà)事件
            pp = QPainter(self)
            pen = QPen()  # 定義筆格式對(duì)象
            pen.setWidth(5)  # 設(shè)置筆的寬度
            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)

監(jiān)聽(tīng)鼠標(biāo)事件在Pyqt5中都有相應(yīng)的事件方法,這里只需要重載函數(shù),并在對(duì)應(yīng)函數(shù)方法下定義在本次監(jiān)聽(tīng)事件中需要完成怎樣的任務(wù)即可。

跟主窗口函數(shù)部分進(jìn)行照應(yīng),當(dāng)按下選擇區(qū)域按鈕后,打開(kāi)屏幕捕獲窗口,當(dāng)選擇完成時(shí),返回窗口位置及大小,在主窗口顯示窗口畫(huà)面及大小。

在窗口運(yùn)行過(guò)程中錄制視頻,如果未在程序中設(shè)置線(xiàn)程進(jìn)行任務(wù)會(huì)造成窗口界面出現(xiàn)卡死現(xiàn)象,所以在調(diào)用錄制視頻和錄制音頻部分,可以使用線(xiàn)程與界面運(yùn)行程序進(jìn)行分離。

例如:

from PyQt5.QtCore import QThread  # Pyqt5的QThread類(lèi)
from Screenshot_record import Screenshot

class Thread_screenshot(QThread):
    def __init__(self):
        super().__init__()
        self.screen = Screenshot()  # 屏幕錄制類(lèi)

總結(jié)

用python動(dòng)手做一個(gè)屏幕錄制工具到這里已經(jīng)完成了,后續(xù)如果有改進(jìn)部分依舊會(huì)更新文章,此系列中使用了很多第三方包,也就是因?yàn)閜ython第三包繁多且優(yōu)質(zhì),可以減少很多時(shí)間,通過(guò)這些第三方包來(lái)組建自己想要實(shí)現(xiàn)程序。由于總體代碼限于文章篇幅,已經(jīng)該系列文章所提到的代碼上傳至github,如有興趣,可下載測(cè)試。

源碼儲(chǔ)存?zhèn)}庫(kù):

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

軟件鏈接提取:

如需測(cè)試生成的軟件(僅windows平臺(tái))。
github

本地網(wǎng)盤(pán)下載:

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

提取碼: 92ds

到此這篇關(guān)于使用Pyqt5制作屏幕錄制界面的文章就介紹到這了,更多相關(guān)Pyqt5屏幕錄制界面內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 人工智能——K-Means聚類(lèi)算法及Python實(shí)現(xiàn)

    人工智能——K-Means聚類(lèi)算法及Python實(shí)現(xiàn)

    這篇文章主要介紹了人工智能——K-Means聚類(lèi)算法及Python實(shí)現(xiàn),一個(gè)能夠找到我圈出的這?些點(diǎn)集的算法,就被稱(chēng)為聚類(lèi)算法,下面就來(lái)看看文章具體的介紹吧
    2022-01-01
  • 使用Python獲取公眾號(hào)下所有的文章

    使用Python獲取公眾號(hào)下所有的文章

    我比較喜歡看公眾號(hào),有時(shí)遇到一個(gè)感興趣的公眾號(hào)時(shí),都會(huì)感覺(jué)相逢恨晚,想一口氣看完所有歷史文章。本文主要介紹了使用Python獲取公眾號(hào)下所有的文章,感興趣的可以了解一下
    2021-06-06
  • Python爬蟲(chóng) scrapy框架爬取某招聘網(wǎng)存入mongodb解析

    Python爬蟲(chóng) scrapy框架爬取某招聘網(wǎng)存入mongodb解析

    這篇文章主要介紹了Python爬蟲(chóng) scrapy框架爬取某招聘網(wǎng)存入mongodb解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Python開(kāi)發(fā)中如何使用Hook技巧

    詳解Python開(kāi)發(fā)中如何使用Hook技巧

    這篇文章主要介紹了詳解Python開(kāi)發(fā)中如何使用Hook技巧,詳細(xì)的介紹了Python Hook的用法和示例,有興趣的可以了解一下
    2017-11-11
  • OpenCV-Python實(shí)現(xiàn)腐蝕與膨脹的實(shí)例

    OpenCV-Python實(shí)現(xiàn)腐蝕與膨脹的實(shí)例

    形態(tài)學(xué)操作主要包含:腐蝕,膨脹,開(kāi)運(yùn)算,閉運(yùn)算,形態(tài)學(xué)梯度運(yùn)算,頂帽運(yùn)算,黑帽運(yùn)算等操作,本文主要介紹了腐蝕與膨脹,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python常用模塊函數(shù)代碼匯總解析

    Python常用模塊函數(shù)代碼匯總解析

    這篇文章主要介紹了Python常用模塊函數(shù)代碼匯總解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python拆分大型CSV文件代碼實(shí)例

    Python拆分大型CSV文件代碼實(shí)例

    這篇文章主要介紹了Python拆分大型CSV文件代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Pandas 連接合并函數(shù)merge()詳解

    Pandas 連接合并函數(shù)merge()詳解

    這篇文章主要介紹了Pandas 連接合并函數(shù)merge()詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • python實(shí)現(xiàn)梯度下降法

    python實(shí)現(xiàn)梯度下降法

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)梯度下降法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • pytorch 計(jì)算Parameter和FLOP的操作

    pytorch 計(jì)算Parameter和FLOP的操作

    這篇文章主要介紹了pytorch 計(jì)算Parameter和FLOP的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-03-03

最新評(píng)論