日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 老三的休閑書屋 2020-04-24

文/IT可達鴨

圖/IT可達鴨、網(wǎng)絡(luò)

寫在前面

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

為了便于理解,里面的一些不必要的代碼我作了刪減,主要是用來學(xué)習(xí)研究。

  • 環(huán)境配置

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一起用。

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

  • 進程和線程簡單介紹

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

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

第二步:錄屏線程編寫

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

后續(xù)如果想加一個錄制麥克風(fēng)聲音,可以寫一個聲音錄制的線程類。

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

第三步:主函數(shù)

首先設(shè)定好錄屏保存的路徑,新建一個錄屏對象。start()啟動錄制線程,time.sleep(10)表示主線程停留10秒,但是錄屏線程依舊運行。直到主線程運行十秒后,運行 stop_record(),修改b_record 變量為Flase,錄屏線程檢測變化到就會立刻停止錄屏,并輸出保存視頻文件。

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

完整代碼

# encoding:utf-8import timeimport threadingfrom cv2 import cv2import numpy as npfrom PIL import ImageGrabclass 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)  # 幀率為32,可以調(diào)節(jié)    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 = Falseif __name__ == '__main__':    avi_file = 'data/avi_tmp.avi'    t1 = VideoCapThread(avi_file)    t1.start()    time.sleep(10)  # 錄制10s    t1.stop_re

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

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

結(jié)語

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


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多