前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python-录制电脑视频

Python-录制电脑视频

作者头像
用户9925864
发布2022-07-27 09:32:16
2.2K0
发布2022-07-27 09:32:16
举报
文章被收录于专栏:算法工程师的学习日志

项目上需要监控电脑画面,故想到设计一个录制电脑视频的程序,

Python的第三方库PIL有个模块ImageGrab可以实现屏幕画面的抓取,配合opencv实现图片转为视频即可实现录制电脑视频

整体思路就是PIL模块中的ImageGrab不停的获得当前屏幕画面,利用opencv写入视频流

代码语言:javascript
复制
from PIL import ImageGrab
import numpy as np
import cv2
import time

tlast = 10 # 录制的时长,单位秒
p = ImageGrab.grab()  # 获得当前屏幕
a, b = p.size  # 获得当前屏幕的大小
fourcc = cv2.VideoWriter_fourcc(*'XVID')  # 编码格式
video = cv2.VideoWriter('test.mp4', fourcc, 16, (a, b))  # 输出文件命名为test.mp4,帧率为16,可以自己设置
print('start record the screen')
time1 = time.time()
while True:
    if time.time()-time1 > tlast:
        break
    im = ImageGrab.grab()
    imm = cv2.cvtColor(np.array(im), cv2.COLOR_RGB2BGR)  # 转为opencv的BGR格式
    video.write(imm)
video.release()

这个代码有个不太方便的地方就是需要指定录制视频,没法通过键盘来触发推出命令,故考虑通过pynput方法,监控键盘,通过键盘特定键实现屏幕录制自动结束

代码语言:javascript
复制
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, 16, (a, b))  # 输出文件命名为时间.avi,帧率为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()
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档