前段时间做视频时需要演示电脑端的操作,因此要用到屏幕录制,下载了个迅捷屏幕录制,但是没有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博客!

python屏幕录制与回放_Python实现屏幕录制功能的代码相关推荐

  1. python log函数怎么打_Python的log日志功能及设置方法

    python log函数怎么打_Python的log日志功能及设置方法_Elaine要当律师的博客-CSDN博客

  2. python 12306登录_Python 实现12306登录功能实例代码

    下面一段代码给大家带来了python实现12306登录功能,具体代码如下所示: #!/usr/bin/env python import requests import urllib.parse im ...

  3. python sftp_Python使用sftp实现上传和下载功能(实例代码)

    在Python中可以使用paramiko模块中的sftp登陆远程主机,实现上传和下载功能. 1.功能实现 根据输入参数判断是文件还是目录,进行上传和下载 本地参数local需要与远程参数remote类 ...

  4. python3屏幕抓取程序_python之屏幕抓取

    Tidy 和 HTML 解析 Beautiful Soup 屏幕抓取:是通过程序下载网页并从中提取信息的过程. 简单来见:下载数据并对其进行分析 思路:可使用urllib来获取网页的HTML代码,再使 ...

  5. python 贪吃蛇大作战_Python 实现 贪吃蛇大作战 代码分享

    感觉游戏审核新政实施后,国内手游市场略冷清,是不是各家的新游戏都在排队等审核.媒体们除了之前竞相追捧<Pokemon Go>热闹了一把,似乎也听不到什么声音了.直到最近几天,突然听见好几人 ...

  6. python动态数组的最大值_python实现动态数组的示例代码

    实现一个支持动态扩容的数组并完成其增删改查 #通过python实现动态数组 """ 数组特点: 占用一段连续的内存空间,支持随机(索引)访问,且时间复杂度为O(1) 添加 ...

  7. python简易爬虫课程设计_python实现简单爬虫功能的示例

    在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,或者用户用来做桌面壁纸,或者用来做设计的素材. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片鼠标右键的 ...

  8. 基于python的视频监控系统_Python远程视频监控程序的实例代码

    老板由于事务繁忙无法经常亲临教研室,于是让我搞个监控系统,让他在办公室就能看到教研室来了多少人.o(>﹏<)o||| 最初我的想法是直接去网上下个软件,可是找来找去不是有毒就是收费,无奈技 ...

  9. python快递分拣小程序_python英语单词测试小程序代码实例

    这篇文章主要简介了python英语单词测试小程序代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 爬取了扇贝英语网,并制作了一个英语单词测试 ...

最新文章

  1. python编程语言能干什么-编程语言Python,可以用来干什么
  2. 海量数据库解决方案2011031701
  3. java ,c# 解决安全沙箱问题
  4. NSURLConnection超时大坑
  5. 3006基于二叉链表的二叉树最长路径的求解(附思路)
  6. POJ 2590 Steps (ZOJ 1871)
  7. python的pass语句_Python pass语句–通过Python
  8. 12.go 源码文件
  9. react 学习与使用记录
  10. Linux实验四——Linux用户和用户组管理
  11. 案例分享:Qt的PPT播放器
  12. 程序员考证之信息系统项目管理师
  13. Noise2Noise的一些学习总结
  14. linux修改证书通用名,如何在Linux上创建自己的通配符证书?
  15. DirectX11 骷髅头示例Demo
  16. Docker的volumes踩坑
  17. Silane-PEG-COOH,硅烷-聚乙二醇-羧基结构式及相关应用介绍
  18. cad修改快捷键_CAD教程:CAD建筑户型图纸还能这么画?
  19. 如何在感觉怕黑怕鬼时壮胆
  20. 关于髋关节固定支具的介绍

热门文章

  1. Infiniband网卡安装、使用总结
  2. 利用zlib压缩和解压gzip文件
  3. ie自动保存html,IE无法打开 本地保存的HTML文件,解决方法
  4. python SMTP 摄像头拍摄图片发送邮件
  5. 经纬恒润 标记重复元素 python
  6. 解决在Win7旗舰版下的安装问题
  7. 小米模式—互联网思维下的中国“智造”
  8. 编写一个函数用于去除字符串中多余的空格,,
  9. 今日大暑——“小暑大暑,上蒸下煮”
  10. 华为远程连接Telnet登陆管理