如果你不想花“大价钱”购买一套录屏软件,又不想忍受低画质加水印的免费版,那么这篇文章可以帮助你解决这一难题。
故事发生在几天前,一个阳光明媚的午后。本想着录一条视频,结果发现电脑里并没有一个合适的录屏软件。以我多年使用百度的经验,这种小工具,网上估计一搜一大把。
果然还是没有让我失望,资源多到我不想一一浏览。直接点开了第一篇内容,下载,安装,一气呵成。
但是真正使用的时候,套路来了。
2分钟?还要加水印?想要用的顺心就得买个VIP?以我个人对此类软件的认知,如果在5块钱以内,我就勉为其难支持一下正版。但是现在这样,心有余而力不足。
你没有看错,198。是不是疯了?作为一个不服输的前少先队员,我决定换一个软件试试看。之后又下载了3款,几乎都是一样的售价,一样的套路,面对电脑上鲜艳的198,我泡上一杯枸杞茶,陷入了沉思。
不禁感叹,有钱真好。但是为了完成如此一件录屏的小事情,除了花钱就别无他法了么?
那必然不是的!今天我们就要用Python帮你省下来198,当然如果你愿意,可以把这个198...自己留下,反手给我一个赞就好啦~准备工作
你需要在电脑上安装了Python3的环境,以及有一个用起来顺手的IDE。码起来!
在Python中,有一个神奇的第三方库,Pillow。他经常用于图像处理相关的领域。比如模糊,滤镜,插入文本等等相关的工作,均可以用Pillow库进行操作。python3之成像库pillow - Py.qi - 博客园www.cnblogs.com
对于视频而言,其实就是一幅幅图片所组成的动态效果。比如我们常说的30帧,也就是一秒钟有30幅图片连成的“动图”。
还有一个主角就是opencv,这个第三方库可以算得上是Python的一大支柱。无论是人工智能卷积神经网络相关,或者是日常图片处理,opencv都异常强大。可以说90%的人只是学到了他的皮毛,为啥这么说?可以打开opencv的官网,看着林林总总几百页的教程,估计会被劝退的。opencv官网docs.opencv.org
本次我们就将基于这两个“神仙”第三方库,完成录屏工具的开发。基本思路如下每次由pillow获取一帧显示器画面
opencv将获取到的画面写入至结果中
opencv显示该画面(与获取同步进行,所以感觉不出异样)
录制完成,保存结果
看起来好复杂啊,是不是一定很难?先看一下结果。结果展示Python制作录屏软件https://www.zhihu.com/video/1143927007808208896
import numpy as np
import cv2
from PIL import ImageGrab
import pyautogui as pyag
fourcc=cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
out=cv2.VideoWriter('output.avi',fourcc,30,pyag.size()) # 参数分别为 输出文件名,解码方式,帧数,录像范围--当前为全屏模式
while(True):
img=ImageGrab.grab()
img_np=np.array(img)
frame=cv2.cvtColor(img_np,cv2.COLOR_BGR2RGB) # ImageGrab获取的颜色为BGR排序,需转换为RGB
out.write(frame)
cv2.imshow('screen',frame)
if cv2.waitKey(1)==27: # 点击ESC退出
break
out.release()
cv2.destroyAllWindows()
至于XVID是什么,如果不是专业的音视频制作人员,可以不用非常关注,想进一步了解可以浏览如下链接。DivX/XviD_百度百科baike.baidu.com
可是接下来问题又出现了,如果此时我只是想区域录制呢?只是需要某一指定范围,如何能通过Python来完成呢?
这里我们不做太过复杂的功能了(因为我懒。。),动态选取增加listener之类并不适合绝大多新手掌握。我们用一个更为讨巧的方法,根据鼠标位置获取其在屏幕上的(x,y)坐标。(请先将鼠标放在起点与终点,并执行下方代码,操作方法如下视频)
import win32gui
flags, hcursor, (x,y) = win32gui.GetCursorInfo()
print("x:",x," y:",y)Python获取当前鼠标的位置https://www.zhihu.com/video/1143927348087803904
最终我们放上区域选择后的效果。Python录屏软件区域录制https://www.zhihu.com/video/1143927568003678208
想用Python做点有趣的事情?记得关注啦~靴靴