自制錄屏軟件,不到30行代碼(僅供學習研究)

文/IT可達鴨

圖/IT可達鴨、網絡

寫在前面

這次不蹭熱點了,簡簡單單分享一個錄屏軟件的源碼。我在閱讀了近十多個錄屏軟件的源碼後,發現這個是最簡單,最好練手的一個源碼。

為了便於理解,裡面的一些不必要的代碼我作了刪減,主要是用來學習研究。

自制錄屏軟件,不到30行代碼(僅供學習研究)


  • 環境配置

python版本: 3.6.0

編輯器: pycharm

項目所需要的環境安裝包

<code>

pip

install numpy

pip

install opencv-python

pip

install pillow

/<code>

  • 需要注意的點

要先安裝numpy,再安裝opencv-python。

第一步:導包

time: 是一個時間包,其中time.sleep(n) 表示主線程睡眠 n 秒鐘,子線程可以併發執行。

threading: 是一個關於線程操作的包,包括常用的線程函數、線程對象、鎖、事件等。

cv2: 是一個強大的圖像處理庫 opencv, 據說人臉識別、視頻處理等操作都可以做到

numpy: 是一個擴展包,支持大量的維度數組與矩陣運算,包含大量數學函數。

PIL: 是一個圖像處理標準庫,一般和opencv一起用。

自制錄屏軟件,不到30行代碼(僅供學習研究)

  • 進程和線程簡單介紹

什麼是進程?舉個例子,音樂播放器是一個進程,瀏覽器也是一個進程,互相不干擾。

什麼是線程?音樂播放器中,音頻播放是一個線程、歌詞播放也是一個線程,它們之間有交流,保證歌詞和音頻同步播放。

第二步:錄屏線程編寫

寫一個屏幕錄製線程工具類,繼承 threading.Tread。重寫__init__() 方法,調用threading.Thread的__init__() 方法。重寫 run() 方法,不斷截屏,並保存到video 對象中。利用 b_record 來控制是否停止錄屏。這是一個線程開發的基本寫法,只要涉及多線程,都可以這麼寫。

後續如果想加一個錄製麥克風聲音,可以寫一個聲音錄製的線程類。

自制錄屏軟件,不到30行代碼(僅供學習研究)

第三步:主函數

首先設定好錄屏保存的路徑,新建一個錄屏對象。 start() 啟動錄製線程,time.sleep(10)

表示主線程停留10秒,但是錄屏線程依舊運行。直到主線程運行十秒後,運行 stop_record(), 修改b_record 變量為Flase,錄屏線程檢測變化到就會立刻停止錄屏,並輸出保存視頻文件。

自制錄屏軟件,不到30行代碼(僅供學習研究)

完整代碼

<code> 


import

time

import

threading

from

cv2

import

cv2

import

numpy

as

np

from

PIL

import

ImageGrab

class

VideoCapThread

(threading.Thread)

:

def

__init__

(self, video_file=

'record.avi'

)

:

threading.Thread.__init__(self) self.b_record =

True

self.video = cv2.VideoWriter(video_file, cv2.VideoWriter_fourcc(*

'XVID'

),

32

, ImageGrab.grab().size)

def

run

(self)

:

while

self.b_record: im = ImageGrab.grab() imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR) self.video.write(imm) self.video.release() cv2.destroyAllWindows()

def

stop_record

(self)

:

self.b_record =

False

if

__name__ ==

"__main__"

: avi_file =

'data/avi_tmp.avi'

t1 = VideoCapThread(avi_file) t1.start() time.sleep(

10

) t1.stop_re/<code>

最後,附上完整代碼。僅有三十多行,是不是非常簡潔?其實,編程也沒那麼難。

自制錄屏軟件,不到30行代碼(僅供學習研究)


結語

當然,距離完整的錄屏軟件還有很多東西可以做。如果有興趣深究下去,可以在這個源碼的基礎上做優化和改進。例如,錄製屏幕的分辨率設置、錄屏位置座標自由設置、增加UI界面(QtPython)、增加聲音或者麥克風錄製、視頻音頻合併(FFmpeg)等等。

如果有疑問想獲取源碼,可以關注後,在後臺私信我,回覆:python錄屏。 我把源碼發你。持續關注"IT可達鴨" ,每天分享有趣Python源碼。最後,感謝大家的閱讀,祝大家工作生活愉快!


分享到:


相關文章: