自制录屏软件,不到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源码。最后,感谢大家的阅读,祝大家工作生活愉快!


分享到:


相關文章: