最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

錄制屏幕制作視頻

錄制音頻

合成視頻,音頻

基于pyqt5制作可視化窗口

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

應(yīng)用平臺

  • windows 10
  • python 3.7
  • ffmpeg

窗口設(shè)置

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

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

主體窗口代碼

在窗口設(shè)計中選擇合適的部件是非常重要的,可以使用QtDesigner,拉取部件并繪制合適的窗口大小,使用pip install pyqt5-tools安裝,在包路徑下可以找到QtDesigner工具,布局好后將ui文件導(dǎo)出成py文件,在后續(xù)綁定函數(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è)置窗口對象名稱
        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():
    """運行函數(shù)"""
    app = QApplication(sys.argv)
    app.setAttribute(Qt.AA_UseHighDpiPixmaps)
    ui = Ui_MainWindow()
    sys.exit(app.exec_())
if __name__ == '__main__':
    main()

劃選窗口代碼

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

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

    def __init__(self):
        super().__init__()
        self.setMouseTracking(True)
        # 設(shè)置窗口布滿整個屏幕
        self.showFullScreen()
        # 設(shè)置窗體無邊框
        self.setWindowFlags(Qt.FramelessWindowHint)  # 窗口置頂,無邊框
        # 設(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)聽鼠標(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)聽鼠標(biāo)釋放事件
        self.endpoint = event.x(), event.y()
        self.close()
    def mouseMoveEvent(self, event):
        # 監(jiān)聽鼠標(biāo)移動事件
        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)  # 設(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)聽鼠標(biāo)事件在Pyqt5中都有相應(yīng)的事件方法,這里只需要重載函數(shù),并在對應(yīng)函數(shù)方法下定義在本次監(jiān)聽事件中需要完成怎樣的任務(wù)即可。

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

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

例如:

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

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

總結(jié)

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

源碼儲存?zhèn)}庫:

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

軟件鏈接提?。?/strong>

如需測試生成的軟件(僅windows平臺)。
github

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

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

提取碼: 92ds

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

相關(guān)文章

  • pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    pytorch 運行一段時間后出現(xiàn)GPU OOM的問題

    這篇文章主要介紹了pytorch 運行一段時間后出現(xiàn)GPU OOM的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python創(chuàng)建與遍歷List二維列表的方法

    python創(chuàng)建與遍歷List二維列表的方法

    這篇文章主要介紹了python創(chuàng)建與遍歷List二維列表的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • python實現(xiàn)nao機器人手臂動作控制

    python實現(xiàn)nao機器人手臂動作控制

    這篇文章主要為大家詳細介紹了python實現(xiàn)nao機器人手臂動作控制,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • python 平衡二叉樹實現(xiàn)代碼示例

    python 平衡二叉樹實現(xiàn)代碼示例

    這篇文章主要介紹了python 平衡二叉樹實現(xiàn)代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • opencv調(diào)整圖像亮度對比度的示例代碼

    opencv調(diào)整圖像亮度對比度的示例代碼

    本文通過實例代碼給大家介紹了opencv調(diào)整圖像亮度對比度,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • Python中實現(xiàn)ipaddress網(wǎng)絡(luò)地址的處理

    Python中實現(xiàn)ipaddress網(wǎng)絡(luò)地址的處理

    ipaddress庫提供了處理IPv4與IPv6網(wǎng)絡(luò)地址的類。這些類支持驗證,查找網(wǎng)絡(luò)上的地址和主機,以及其他常見的操作,本文就來介紹一下這些方法的使用,感興趣的一起來了解一下
    2021-06-06
  • 使用Pytorch如何完成多分類問題

    使用Pytorch如何完成多分類問題

    這篇文章主要介紹了使用Pytorch如何完成多分類問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python中遇到的小問題及解決方法匯總

    Python中遇到的小問題及解決方法匯總

    到年底了,現(xiàn)在的時間適合寫點最近的小總結(jié),所以下面這篇文章主要介紹了Python中遇到的一些小問題及解決方法,需要的朋友可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01
  • python 簡單備份文件腳本v1.0的實例

    python 簡單備份文件腳本v1.0的實例

    下面小編就為大家?guī)硪黄猵ython 簡單備份文件腳本v1.0的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望對大家有所幫助
    2017-11-11
  • Django查詢數(shù)據(jù)庫的性能優(yōu)化示例代碼

    Django查詢數(shù)據(jù)庫的性能優(yōu)化示例代碼

    這篇文章主要給大家介紹了關(guān)于Django查詢數(shù)據(jù)庫性能優(yōu)化的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09

最新評論

大同县| 丽水市| 肇庆市| 澳门| 池州市| 寻甸| 景德镇市| 永康市| 蓬溪县| 西峡县| 南木林县| 平和县| 凌云县| 古蔺县| 德江县| 安多县| 石渠县| 师宗县| 贞丰县| 南部县| 新龙县| 宣恩县| 永城市| 探索| 彭水| 榆中县| 年辖:市辖区| 衡阳县| 耒阳市| 巩留县| 洪雅县| 辽宁省| 秀山| 巢湖市| 察哈| 会东县| 军事| 水城县| 介休市| 扎囊县| 新平|