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的web框架编写MVC配置来使其运行的教程
Apr 30 Python
python中的全局变量用法分析
Jun 09 Python
python从入门到精通(DAY 2)
Dec 20 Python
Python引用类型和值类型的区别与使用解析
Oct 17 Python
Python中eval带来的潜在风险代码分析
Dec 11 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
运行django项目指定IP和端口的方法
May 14 Python
python argparser的具体使用
Nov 10 Python
使用python实现对元素的长截图功能
Nov 14 Python
Django CSRF认证的几种解决方案
Mar 03 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
在python里使用await关键字来等另外一个协程的实例
May 04 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
thinkphp在低版本Nginx 下支持PATHINFO的方法分享
2016/05/27 PHP
PHP实现导出excel数据的类库用法示例
2016/10/15 PHP
Laravel5.1 框架数据库操作DB运行原生SQL的方法分析
2020/01/07 PHP
一个cssQuery对象 javascript脚本实现代码
2009/07/21 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
js实现弹窗插件功能实例代码分享
2013/12/12 Javascript
javascript中传统事件与现代事件
2015/06/23 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JS工作中的小贴士之”闭包“与事件委托的”阻止冒泡“
2016/06/16 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
vue router使用query和params传参的使用和区别
2017/11/13 Javascript
vue实现在一个方法执行完后执行另一个方法的示例
2018/08/25 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
简洁的十分钟Python入门教程
2015/04/03 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python实现配置文件备份的方法
2015/07/30 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python3 下载网络图片代码实例
2019/08/27 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
2020/06/12 Python
Python依赖包迁移到断网环境操作
2020/07/13 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
大学班长的职责
2014/01/27 职场文书
舞蹈教师自荐信
2014/01/27 职场文书
房屋认购协议书
2015/01/29 职场文书
小学语文教学随笔
2015/08/14 职场文书
VS2019连接MySQL数据库的过程及常见问题总结
2021/11/27 MySQL
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
Android开发之WECHAT微信小程序路由跳转的两种形式
2022/04/12 Java/Android