日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python屏幕录制与回放_Python实现屏幕录制功能的代码

發(fā)布時(shí)間:2024/3/26 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python屏幕录制与回放_Python实现屏幕录制功能的代码 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前段時(shí)間做視頻時(shí)需要演示電腦端的操作,因此要用到屏幕錄制,下載了個(gè)迅捷屏幕錄制,但是沒有vip錄制的視頻有水印且只能錄制二分鐘,于是鄙人想了下能不能通過萬能的python來實(shí)現(xiàn)呢?經(jīng)過一晚上的嘗試發(fā)現(xiàn)這條路是可以走的通的。分享一下自己的想法,整體思路是PIL模塊中的ImageGrab不停的獲得當(dāng)前屏幕,利用opencv寫入視頻流話不多說,直接上代碼,有什么更好的建議,歡迎大家交流!

"""python + opencv 實(shí)現(xiàn)屏幕錄制_by-_Zjh_"""

from PIL import ImageGrab

import numpy as np

import cv2

p = ImageGrab.grab()#獲得當(dāng)前屏幕

k=np.zeros((200,200),np.uint8)

a,b=p.size#獲得當(dāng)前屏幕的大小

fourcc = cv2.VideoWriter_fourcc(*'XVID')#編碼格式

video = cv2.VideoWriter('test.avi', fourcc, 16, (a, b))#輸出文件命名為test.mp4,幀率為16,可以自己設(shè)置

while True:

im = ImageGrab.grab()

imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#轉(zhuǎn)為opencv的BGR格式

video.write(imm)

cv2.imshow('imm', k)

if cv2.waitKey(1) & 0xFF == ord('q'):

break

video.release()

cv2.destroyAllWindows()

在停止錄制的時(shí)候我自己采用的是opencv的q鍵盤退出,實(shí)際上還是會(huì)有個(gè)黑框彈出來,如果有更好的退出錄制方式請留下您的建議,本次還有個(gè)不足的地方是沒有增加錄制聲音的功能。最近事情太多了,等放假了出一個(gè)完整版的GUI程序。好了今天就先到這了,快要考線性系統(tǒng)這門課了,得開始復(fù)習(xí)了

最近接觸了 pynput 這個(gè)強(qiáng)大的三方庫,可以全局監(jiān)聽鍵盤、鼠標(biāo)事件。把以前的屏幕錄制的程序改進(jìn)一下!請忽略以前的程序,直接看這個(gè)!

"""

python 屏幕錄制改進(jìn)版,無opencv黑框顯示!

@zhou 2020/1/29_

"""

from PIL import ImageGrab

import numpy as np

import cv2

import datetime

from pynput import keyboard

import threading

flag=False #停止標(biāo)志位

def video_record():

"""

屏幕錄制!

:return:

"""

name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #當(dāng)前的時(shí)間

p = ImageGrab.grab() # 獲得當(dāng)前屏幕

a, b = p.size # 獲得當(dāng)前屏幕的大小

fourcc = cv2.VideoWriter_fourcc(*'XVID') # 編碼格式

video = cv2.VideoWriter('%s.avi'%name, fourcc, 20, (a, b)) # 輸出文件命名為test.mp4,幀率為16,可以自己設(shè)置

while True:

im = ImageGrab.grab()

imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#轉(zhuǎn)為opencv的BGR格式

video.write(imm)

if flag:

print("錄制結(jié)束!")

break

video.release()

def on_press(key):

"""

鍵盤監(jiān)聽事件!!!

:param key:

:return:

"""

#print(key)

global flag

if key == keyboard.Key.esc:

flag=True

print("stop monitor!")

return False #返回False,鍵盤監(jiān)聽結(jié)束!

if __name__=='__main__':

th=threading.Thread(target=video_record)

th.start()

with keyboard.Listener(on_press=on_press) as listener:

listener.join()

現(xiàn)在錄制就不用之前那個(gè)黑框了,按 esc按鍵 直接停止錄制!

PS:在通過代碼給大家介紹下python 實(shí)現(xiàn)屏幕錄制

PIL 即pollow 的安裝命令如下:

pip install pillow

其中cv2的安裝是下面這條命令

pip install opencv-python

代碼實(shí)現(xiàn):

# coding: utf-8

from PIL import ImageGrab

import numpy as np

import cv2

fps = 20

start = 3 # 延時(shí)錄制

end = 15 # 自動(dòng)結(jié)束時(shí)間

curScreen = ImageGrab.grab() # 獲取屏幕對象

height, width = curScreen.size

video = cv2.VideoWriter('video02.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))

imageNum = 0

while True:

imageNum += 1

captureImage = ImageGrab.grab() # 抓取屏幕

frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)

# 顯示無圖像的窗口

cv2.imshow('capturing', np.zeros((1, 255), np.uint8))

# 控制窗口顯示位置,方便通過按鍵方式退出

cv2.moveWindow('capturing', height - 100, width - 100)

if imageNum > fps * start:

video.write(frame)

# 退出條件

if cv2.waitKey(50) == ord('q') or imageNum > fps * end:

break

video.release()

cv2.destroyAllWindows()

總結(jié)

到此這篇關(guān)于Python實(shí)現(xiàn)屏幕錄制功能的文章就介紹到這了,更多相關(guān)python 屏幕錄制內(nèi)容請搜索python博客以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持python博客!

總結(jié)

以上是生活随笔為你收集整理的python屏幕录制与回放_Python实现屏幕录制功能的代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。