文/IT可達鴨 圖/IT可達鴨、網(wǎng)絡(luò) 寫在前面這次不蹭熱點了,簡簡單單分享一個錄屏軟件的源碼。我在閱讀了近十多個錄屏軟件的源碼后,發(fā)現(xiàn)這個是最簡單,最好練手的一個源碼。 為了便于理解,里面的一些不必要的代碼我作了刪減,主要是用來學(xué)習(xí)研究。
python版本: 3.6.0 編輯器: pycharm 項目所需要的環(huán)境安裝包 pip install numpypip install opencv-pythonpip install pillow
要先安裝numpy,再安裝opencv-python。 第一步:導(dǎo)包time: 是一個時間包,其中time.sleep(n) 表示主線程睡眠 n 秒鐘,子線程可以并發(fā)執(zhí)行。 threading: 是一個關(guān)于線程操作的包,包括常用的線程函數(shù)、線程對象、鎖、事件等。 cv2: 是一個強大的圖像處理庫 opencv, 據(jù)說人臉識別、視頻處理等操作都可以做到。 numpy: 是一個擴展包,支持大量的維度數(shù)組與矩陣運算,包含大量數(shù)學(xué)函數(shù)。 PIL: 是一個圖像處理標準庫,一般和opencv一起用。
什么是進程?舉個例子,音樂播放器是一個進程,瀏覽器也是一個進程,互相不干擾。 什么是線程?音樂播放器中,音頻播放是一個線程、歌詞播放也是一個線程,它們之間有交流,保證歌詞和音頻同步播放。 第二步:錄屏線程編寫寫一個屏幕錄制線程工具類,繼承threading.Tread。重寫__init__()方法,調(diào)用threading.Thread的__init__()方法。重寫run()方法,不斷截屏,并保存到video 對象中。利用 b_record 來控制是否停止錄屏。這是一個線程開發(fā)的基本寫法,只要涉及多線程,都可以這么寫。 后續(xù)如果想加一個錄制麥克風(fēng)聲音,可以寫一個聲音錄制的線程類。 第三步:主函數(shù)首先設(shè)定好錄屏保存的路徑,新建一個錄屏對象。start()啟動錄制線程,time.sleep(10)表示主線程停留10秒,但是錄屏線程依舊運行。直到主線程運行十秒后,運行 stop_record(),修改b_record 變量為Flase,錄屏線程檢測變化到就會立刻停止錄屏,并輸出保存視頻文件。 完整代碼
最后,附上完整代碼。僅有三十多行,是不是非常簡潔?其實,編程也沒那么難。 結(jié)語當然,距離完整的錄屏軟件還有很多東西可以做。如果有興趣深究下去,可以在這個源碼的基礎(chǔ)上做優(yōu)化和改進。例如,錄制屏幕的分辨率設(shè)置、錄屏位置坐標自由設(shè)置、增加UI界面(QtPython)、增加聲音或者麥克風(fēng)錄制、視頻音頻合并(FFmpeg)等等。 |
|