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

Python做屏幕錄制工具的實現示例

 更新時間:2022年06月06日 09:28:59   作者:編程學習網  
本文主要介紹了Python做屏幕錄制工具的實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

女朋友是一個軟件測試人員,在工作中經常會遇到需要錄屏記錄自己操作,方便后續(xù)開發(fā)同學定位。因為錄屏軟件動不動就開始收費,所以她經常更換錄屏軟件。閑暇之余,我就覺得手癢,感覺可以用萬能的 Python 來解決她的煩惱。

思路

我上網搜尋了一下相關知識,錄制視頻基本上都用的圖像處理庫 PIL 的 ImageGrab 模塊。這個模塊可以用于將當前屏幕的內容或者剪貼板上的內容拷貝到 PIL 圖像內存。
既然這個模塊可以獲取當前屏幕上的內容,那么我一直不間斷地獲取,然后把這些獲取的內容拼起來,那不就是視頻了嗎?

實現

錄制

整體思路是 PIL 模塊中的 ImageGrab 不停的獲得當前屏幕,利用 opencv 寫入視頻流。

def video_record(sttime):
    global name
    # 當前的時間(當文件名)
    name = datetime.now().strftime('%Y-%m-%d %H-%M-%S')
    # 獲取當前屏幕
    screen = ImageGrab.grab()
    # 獲取當前屏幕的大小
    width, high = screen.size
    # MPEG-4編碼,文件后綴可為.avi .asf .mov等
    fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D')
    # (文件名,編碼器,幀率,視頻寬高)
    video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high))
    print(str(sttime) + '秒后開始錄制----')
    time.sleep(int(sttime))
    print('開始錄制!')
    global start_time
    start_time = time.time()
    while True:
        if flag:
            print("錄制結束!")
            global final_time
            final_time = time.time()
            # 釋放
            video.release()
            break
        # 圖片為RGB模式
        im = ImageGrab.grab()
        # 轉為opencv的BGR模式
        imm = cvtColor(np.array(im), COLOR_RGB2BGR)
        # 寫入
        video.write(imm)

錄制視頻的主要代碼只需幾行即可,但是我們需要對錄制操作進行控制,例如開始錄制、結束錄制等。以及獲取屏幕內容之后,需要對內容進行轉碼,然后寫入視頻流。

監(jiān)聽鍵盤事件

錄制視頻我們是使用的一個 while 循環(huán)來獲取屏幕信息,開始之后會一直進行。但是我們需要監(jiān)聽鍵盤事件,來終止這個循環(huán),從而終止錄制視頻。這個監(jiān)聽事件就顯得很重要了,這里采用的是 pynput 這個強大的三方庫,可以全局監(jiān)聽鍵盤、鼠標事件。

我們設定的是用戶在按下鍵盤的 ESC 按鍵后,終止 while 循環(huán),從而終止視頻錄制。

# 監(jiān)聽按鍵
def on_press(key):
    global flag
    if key == keyboard.Key.esc:
        flag = True
        # 返回False,鍵盤監(jiān)聽結束!
        return False

主體控制

因為我們需要不斷地獲取屏幕內容,所以我們最好啟動一個線程來干這個事情。

th = threading.Thread(target=video_record, args=sstime)
    th.start()
    with keyboard.Listener(on_press=on_press) as listener:
        listener.join()

視頻信息

錄制視頻結束之后,我們也可以獲取視頻的一些相關信息,例如時長、幀率、分辨率等。

# 視頻信息
def video_info():
    # 記得文件名加格式不要錯!
    video = VideoCapture('%s.avi' % name)
    fps = video.get(CAP_PROP_FPS)
    count = video.get(CAP_PROP_FRAME_COUNT)
    size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT)))
    print('幀率=%.1f' % fps)
    print('幀數=%.1f' % count)
    print('分辨率', size)
    print('視頻時間=%.3f秒' % (int(count) / fps))
    print('錄制時間=%.3f秒' % (final_time - start_time))
    print('推薦幀率=%.2f' % (fps * ((int(count) / fps) / (final_time - start_time))))

到此這篇關于Python做屏幕錄制工具的實現示例的文章就介紹到這了,更多相關Python 屏幕錄制工具內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python實現爬蟲爬取NBA數據功能示例

    Python實現爬蟲爬取NBA數據功能示例

    這篇文章主要介紹了Python實現爬蟲爬取NBA數據功能,涉及Python針對URL模塊、字符串、列表遍歷、Excel寫入等相關操作技巧,需要的朋友可以參考下
    2018-05-05
  • python實現在每個獨立進程中運行一個函數的方法

    python實現在每個獨立進程中運行一個函數的方法

    這篇文章主要介紹了python實現在每個獨立進程中運行一個函數的方法,涉及Python操作進程的相關技巧,需要的朋友可以參考下
    2015-04-04
  • Keras自定義IOU方式

    Keras自定義IOU方式

    這篇文章主要介紹了Keras自定義IOU方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python中使用 xlwt 操作excel的常見方法與問題

    python中使用 xlwt 操作excel的常見方法與問題

    這篇文章主要給大家介紹了關于python中使用 xlwt 操作excel的常見方法與問題的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • Python中splitlines()方法的使用簡介

    Python中splitlines()方法的使用簡介

    這篇文章主要介紹了Python中splitlines()方法的使用簡介,是Python入門中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • PyQt5之基礎框架解讀

    PyQt5之基礎框架解讀

    這篇文章主要介紹了PyQt5之基礎框架,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python調用Matplotlib繪制振動圖、箱型圖和提琴圖

    Python調用Matplotlib繪制振動圖、箱型圖和提琴圖

    Matplotlib作為用于數據可視化的Python軟件包,能夠繪制多種2D圖像,它使用簡單、代碼清晰易懂,深受廣大技術愛好者喜愛。本文主要介紹了通過?Matplotlib繪制振動圖、箱型圖、提琴圖,需要的朋友可以參考一下
    2021-12-12
  • python3格式化字符串 f-string的高級用法(推薦)

    python3格式化字符串 f-string的高級用法(推薦)

    從Python 3.6開始,f-string是格式化字符串的一種很好的新方法。與其他格式化方式相比,它們不僅更易讀,更簡潔,不易出錯,而且速度更快!本文重點給大家介紹python3格式化字符串 f-string的高級用法,一起看看吧
    2020-03-03
  • 利用Python實現一個可定制風格的繪圖系統

    利用Python實現一個可定制風格的繪圖系統

    這篇文章主要為大家詳細介紹了如何基于Python實現一個可定制風格的繪圖系統,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解下
    2023-09-09
  • python使用 zip 同時迭代多個序列示例

    python使用 zip 同時迭代多個序列示例

    這篇文章主要介紹了python使用 zip 同時迭代多個序列,結合實例形式分析了Python使用zip遍歷迭代長度相等與不等的序列相關操作技巧,需要的朋友可以參考下
    2019-07-07

最新評論