Python实现屏幕录制功能的代码


Posted in Python onMarch 02, 2020

前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有vip录制的视频有水印且只能录制二分钟,于是鄙人想了下能不能通过万能的python来实现呢?经过一晚上的尝试发现这条路是可以走的通的。分享一下自己的想法,整体思路是PIL模块中的ImageGrab不停的获得当前屏幕,利用opencv写入视频流话不多说,直接上代码,有什么更好的建议,欢迎大家交流!

"""python + opencv 实现屏幕录制_by-_Zjh_"""
from PIL import ImageGrab
import numpy as np
import cv2
p = ImageGrab.grab()#获得当前屏幕
k=np.zeros((200,200),np.uint8)
a,b=p.size#获得当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID')#编码格式
video = cv2.VideoWriter('test.avi', fourcc, 16, (a, b))#输出文件命名为test.mp4,帧率为16,可以自己设置
while True:
 im = ImageGrab.grab()
 imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
 video.write(imm)
 cv2.imshow('imm', k)
 if cv2.waitKey(1) & 0xFF == ord('q'):
  break
video.release()
cv2.destroyAllWindows()

在停止录制的时候我自己采用的是opencv的q键盘退出,实际上还是会有个黑框弹出来,如果有更好的退出录制方式请留下您的建议,本次还有个不足的地方是没有增加录制声音的功能。最近事情太多了,等放假了出一个完整版的GUI程序。好了今天就先到这了,快要考线性系统这门课了,得开始复习了

最近接触了 pynput 这个强大的三方库,可以全局监听键盘、鼠标事件。把以前的屏幕录制的程序改进一下!请忽略以前的程序,直接看这个!

"""
python 屏幕录制改进版,无opencv黑框显示!
@zhou 2020/1/29_
"""
from PIL import ImageGrab
import numpy as np
import cv2
import datetime
from pynput import keyboard
import threading
flag=False #停止标志位
def video_record():
 """
 屏幕录制!
 :return:
 """
 name = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S') #当前的时间
 p = ImageGrab.grab() # 获得当前屏幕
 a, b = p.size # 获得当前屏幕的大小
 fourcc = cv2.VideoWriter_fourcc(*'XVID') # 编码格式
 video = cv2.VideoWriter('%s.avi'%name, fourcc, 20, (a, b)) # 输出文件命名为test.mp4,帧率为16,可以自己设置
 while True:
  im = ImageGrab.grab()
  imm=cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)#转为opencv的BGR格式
  video.write(imm)
  if flag:
   print("录制结束!")
   break
 video.release()
def on_press(key):
 """
 键盘监听事件!!!
 :param key:
 :return:
 """
 #print(key)
 global flag
 if key == keyboard.Key.esc:
  flag=True
  print("stop monitor!")
  return False #返回False,键盘监听结束!
if __name__=='__main__':
 th=threading.Thread(target=video_record)
 th.start()
 with keyboard.Listener(on_press=on_press) as listener:
  listener.join()

现在录制就不用之前那个黑框了,按 esc按键 直接停止录制!

PS:在通过代码给大家介绍下python 实现屏幕录制

PIL 即pollow 的安装命令如下:

pip install pillow

其中cv2的安装是下面这条命令

pip install opencv-python

代码实现:

# coding: utf-8
from PIL import ImageGrab
import numpy as np
import cv2
fps = 20
start = 3 # 延时录制
end = 15 # 自动结束时间
curScreen = ImageGrab.grab() # 获取屏幕对象
height, width = curScreen.size
video = cv2.VideoWriter('video02.avi', cv2.VideoWriter_fourcc(*'XVID'), fps, (height, width))
imageNum = 0
while True:
  imageNum += 1
  captureImage = ImageGrab.grab() # 抓取屏幕
  frame = cv2.cvtColor(np.array(captureImage), cv2.COLOR_RGB2BGR)
  # 显示无图像的窗口
  cv2.imshow('capturing', np.zeros((1, 255), np.uint8))
  # 控制窗口显示位置,方便通过按键方式退出
  cv2.moveWindow('capturing', height - 100, width - 100) 
  if imageNum > fps * start:
    video.write(frame)
  # 退出条件  
  if cv2.waitKey(50) == ord('q') or imageNum > fps * end:
    break
video.release()
cv2.destroyAllWindows()

总结

到此这篇关于Python实现屏幕录制功能的文章就介绍到这了,更多相关python 屏幕录制内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python实现忽略大小写对字符串列表排序的方法
Sep 25 Python
对pandas中apply函数的用法详解
Apr 10 Python
使用Python更换外网IP的方法
Jul 09 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
Python实现繁?转为简体的方法示例
Dec 18 Python
使用python爬取抖音视频列表信息
Jul 15 Python
linux 下python多线程递归复制文件夹及文件夹中的文件
Jan 02 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
Python之变量类型和if判断方式
May 05 Python
浅谈cv2.imread()和keras.preprocessing中的image.load_img()区别
Jun 12 Python
浅析python 字典嵌套
Sep 29 Python
Pandas实现DataFrame的简单运算、统计与排序
Mar 31 Python
python实现录屏功能(亲测好用)
Mar 02 #Python
基于Numba提高python运行效率过程解析
Mar 02 #Python
Python3 assert断言实现原理解析
Mar 02 #Python
Django认证系统user对象实现过程解析
Mar 02 #Python
在python中使用pymysql往mysql数据库中插入(insert)数据实例
Mar 02 #Python
Python基于requests库爬取网站信息
Mar 02 #Python
使用python3 实现插入数据到mysql
Mar 02 #Python
You might like
PHP打印输出函数汇总
2016/08/28 PHP
关于PHP通用返回值设置方法
2017/03/31 PHP
php实现有序数组旋转后寻找最小值方法
2018/09/27 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
laravel 解决强制跳转 https的问题
2019/10/22 PHP
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
javascript中this做事件参数相关问题解答
2013/03/17 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
jQuery中die()方法用法实例
2015/01/19 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
js实现简单选项卡与自动切换效果的方法
2015/04/10 Javascript
JS生成不重复的随机数组的简单实例
2016/07/10 Javascript
微信小程序 scroll-view隐藏滚动条详解
2017/01/16 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
浅谈Vue.nextTick 的实现方法
2017/10/25 Javascript
nodejs简单读写excel内容的方法示例
2018/03/16 NodeJs
使用Vue构建可重用的分页组件
2018/03/26 Javascript
vue中使用iview自定义验证关键词输入框问题及解决方法
2018/03/26 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
[01:02:04]EG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.23
2019/09/05 DOTA
Python3多线程操作简单示例
2018/05/22 Python
Flask之flask-session的具体使用
2018/07/26 Python
Python图像处理库PIL的ImageFilter模块使用介绍
2020/02/26 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
数据库测试通常都包括哪些方面
2015/11/30 面试题
创业计划书如何编写
2014/02/06 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
妇女儿童发展规划实施方案
2014/03/16 职场文书
销售会议开幕词
2015/01/28 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
金砖之国观后感
2015/06/11 职场文书
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
Python时间操作之pytz模块使用详解
2022/06/14 Python