广告位联系
返回顶部
分享到

使用Python实现屏幕录制与键盘监听功能

python 来源:互联网 作者:佚名 发布时间:2024-12-26 22:32:50 人浏览
摘要

在Python中,我们可以借助多个强大的库来实现丰富的功能,比如屏幕录制和键盘监听。今天,我们将通过结合PIL(Python Imaging Library的分支Pillow)、OpenCV、pynput以及threading等库,来实现一个简单

在Python中,我们可以借助多个强大的库来实现丰富的功能,比如屏幕录制和键盘监听。今天,我们将通过结合PIL(Python Imaging Library的分支Pillow)、OpenCV、pynput以及threading等库,来实现一个简单的屏幕录制工具,该工具能够通过监听键盘事件来控制录制的开始与结束。

二、所需库介绍

  • PIL(Pillow):用于屏幕截图。
  • OpenCV:用于视频文件的创建与写入。
  • pynput:用于监听键盘事件。
  • threading:用于并行执行代码,实现屏幕录制与键盘监听的同时进行。

三、代码详解

导入所需库

1

2

3

4

5

6

7

8

import time

import threading

from datetime import datetime

from PIL import ImageGrab

import numpy as np

from cv2.cv2 import cvtColor, VideoWriter_fourcc, VideoWriter, COLOR_RGB2BGR, VideoCapture, \

                  CAP_PROP_FPS, CAP_PROP_FRAME_COUNT, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT

from pynput import keyboard

定义视频录制函数

1

2

3

4

5

6

7

8

9

def video_record():

    # ...(省略了部分代码)

    while True:

        if flag:

            # ...(省略了部分代码)

            break

        im = ImageGrab.grab()  # 截图

        imm = cvtColor(np.array(im), COLOR_RGB2BGR)  # 转换颜色模式

        video.write(imm)  # 写入视频文件

  • 这个函数首先获取当前时间作为文件名,然后初始化视频写入对象。接着,它会显示一个3秒的倒计时,之后开始录制屏幕。在录制过程中,它会不断检查一个全局变量flag,如果flag变为True,则停止录制并释放视频写入对象。

定义键盘监听函数

1

2

3

4

5

def on_press(key):

    global flag

    if key == keyboard.Key.esc:

        flag = True

        return False

  • 这个函数会监听键盘事件,当按下esc键时,将全局变量flag设置为True,并返回False以停止键盘监听。

定义视频信息打印函数

1

2

3

4

5

def video_info():

    # ...(省略了部分代码)

    print('帧率=%.1f' % fps)

    # ...(省略了部分代码)

    print('推荐帧率=%.2f' % (fps*((int(count)/fps)/(final_time-start_time))))

  • 这个函数会在录制结束后读取视频文件的信息,包括帧率、帧数、分辨率以及录制时间等,并打印出来。同时,它还会计算并打印一个推荐帧率,这个推荐帧率是基于实际录制时间与视频文件中的帧数计算得出的。

主函数

1

2

3

4

5

6

7

8

9

10

if __name__ == '__main__':

    flag = False

    th = threading.Thread(target=video_record)

    th.start()

 

    with keyboard.Listener(on_press=on_press) as listener:

        listener.join()

 

    time.sleep(1)  # 等待视频释放过后

    video_info()

  • 在主函数中,我们首先初始化全局变量flag为False,然后创建一个线程来运行video_record函数。接着,我们使用pynput库的keyboard.Listener来监听键盘事件,并将on_press函数作为回调函数。当键盘监听结束时(即按下esc键后),主线程会等待1秒以确保视频文件被正确释放,然后调用video_info函数来打印视频信息。

四、完整代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

#!/usr/bin/env python

# -*- coding = utf-8 -*-

# @Time : 2021/10/6 17:43

# @Author : Leuanghing Chen

# @Blog : https://blog.csdn.net/weixin_46153372?spm=1010.2135.3001.5421

# @File : python实现录屏功能.py

# @Software : PyCharm

# 发布程序:pyinstaller -F -w -i F:\python_demo\2.ico F:\python_demo\python实现录屏功能.py

 

import time

import threading

from datetime import datetime

from PIL import ImageGrab

import numpy as np

from cv2.cv2 import cvtColor, VideoWriter_fourcc, VideoWriter, COLOR_RGB2BGR, VideoCapture,\

                    CAP_PROP_FPS, CAP_PROP_FRAME_COUNT, CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HEIGHT

from pynput import keyboard

 

 

# 录入视频

def video_record():

    # 加了global,则可以在函数内部对函数外的对象进行操作了,也可以改变它的值了

    global name

    name = datetime.now().strftime('%Y-%m-%d %H-%M-%S')               # 当前的时间(当文件名)

    screen = ImageGrab.grab()                                         # 获取当前屏幕

    width, high = screen.size                                         # 获取当前屏幕的大小

    fourcc = VideoWriter_fourcc('X', 'V', 'I', 'D')                   # MPEG-4编码,文件后缀可为.avi .asf .mov等

    video = VideoWriter('%s.avi' % name, fourcc, 15, (width, high))   # (文件名,编码器,帧率,视频宽高)

    for i in range(3):

        time.sleep(1)

        print("倒计时:{}".format(3-i))

    print('开始录制!')

    global start_time

    start_time = time.time()

 

    while True:

        if flag:

            print("录制结束!")

            global final_time

            final_time = time.time()

            video.release()                                     # 释放

            break

        im = ImageGrab.grab()  # 图片为RGB模式

        imm = cvtColor(np.array(im), COLOR_RGB2BGR)             # 转为opencv的BGR模式

        video.write(imm)                                        # 写入

        # time.sleep(5)                                         # 等待5秒再次循环

 

 

# 结束监听按键,按下esc结束录屏

def on_press(key):

    global flag

    # esc键

    if key == keyboard.Key.esc:

        flag = True                                             # 改变

        return False                                            # 返回False,键盘监听结束!

 

 

# 视频信息

def video_info():

    video = VideoCapture('%s.avi' % name)                       # 记得文件名加格式不要错!

    fps = video.get(CAP_PROP_FPS)

    count = video.get(CAP_PROP_FRAME_COUNT)

    size = (int(video.get(CAP_PROP_FRAME_WIDTH)), int(video.get(CAP_PROP_FRAME_HEIGHT)))

    print('帧率=%.1f' % fps)

    print('帧数=%.1f' % count)

    print('分辨率', size)

    print('视频时间=%.3f秒' % (int(count)/fps))

    print('录制时间=%.3f秒' % (final_time-start_time))

    print('推荐帧率=%.2f' % (fps*((int(count)/fps)/(final_time-start_time))))

 

 

if __name__ == '__main__':

    flag = False

    th = threading.Thread(target=video_record)

    th.start()

 

    with keyboard.Listener(on_press=on_press) as listener:

        listener.join()

 

    time.sleep(1)  # 等待视频释放过后

    video_info()

五、总结

通过结合多个Python库,我们实现了一个简单的屏幕录制工具,该工具能够实时录制屏幕并通过监听键盘事件来控制录制的开始与结束。这个工具不仅可以用于个人娱乐或学习,还可以作为开发屏幕录制功能应用程序的基础。希望这篇博文能帮助你更好地理解如何使用Python来实现屏幕录制与键盘监听功能。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 基于Python实现web网页内容爬取的方法

    基于Python实现web网页内容爬取的方法
    在日常学习和工作中,我们经常会遇到需要爬取网页内容的需求,今天就如何基于Python实现web网页内容爬取进行讲解。 1. 网页分析 用Chrom
  • 使用Python实现屏幕录制与键盘监听功能
    在Python中,我们可以借助多个强大的库来实现丰富的功能,比如屏幕录制和键盘监听。今天,我们将通过结合PIL(Python Imaging Library的分支
  • python中pathlib面向对象的文件系统路径

    python中pathlib面向对象的文件系统路径
    pathlib:面向对象的文件系统路径 pathlib官方介绍: Python3.4+内置的标准库,Object-oriented filesystem paths(面向对象的文件系统路径) 1. 使用示例
  • Python实现中文字转中文语音

    Python实现中文字转中文语音
    我们本文中采用的开发平台是Visual Studio 2022,采用其他平台的开发工具也是可以的 1.首先我们先新建一个Python应用程序 2.我在这里选择管理
  • 基于Python进行定时任务管理封装

    基于Python进行定时任务管理封装
    效果图 主逻辑代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  • Python中不可忽视的docstring妙用
    在Python编程中,代码的可读性和可维护性至关重要。除了清晰的命名和结构良好的代码外,良好的文档字符串(docstring)也是确保代码易于
  • Python处理浮点数的实用技巧
    四舍五入是一种常见的数学操作,它用于将数字舍入到指定的精度。Python 提供了多种方法来实现四舍五入操作,从基本的 round 函数到高级的
  • 一文带你解锁Python文件匹配技巧
    在日常的文件操作和数据处理中,文件匹配是一个非常常见的任务。Python 提供了丰富的库和工具来实现文件匹配,这些工具不仅功能强大,
  • Python langchain ReAct使用范例介绍

    Python langchain ReAct使用范例介绍
    ReAct: Reasoning + Acting ,ReAct Prompt 由 few-shot task-solving trajectories 组成,包括人工编写的文本推理过程和动作,以及对动作的环境观察。 1. 范例
  • Python一行代码实现打开各种类型的文件
    在处理大量文件时,手动一个个打开是不是很麻烦?或者你正在开发一个自动化工具,需要能够自动打开某些文件。这时候,Python的os.star
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计