目录
-
目录
-
应用平台
-
屏幕录制部分
-
计算视频最优fps及使用numpy计算中间帧数组
-
使用pynput监听键盘按键
-
如何保存MP4格式视频
-
源码
-
总结
最近有在使用屏幕录制软件录制桌面,在用的过程中突发奇想,使用python能不能做屏幕录制工具,也锻炼下自己的动手能力。接下准备写使用python如何做屏幕录制工具的系列文章:
-
录制屏幕制作视频
-
录制音频
-
合成视频,音频
-
基于pyqt5制作可视化窗口
大概上述四个部分,希望自己能够尽快完善,接下来开始使用python制作屏幕录制部分。
应用平台
-
windows 10
-
python 3.7
屏幕录制部分
屏幕录制可以简单地理解为将屏幕快照以动图的形式播放,这里我选用PIL下的ImageGrab来截取屏幕画面,首先pip install Pillow
之后需要将截取到的快照数组合成为视频,使用cv2模块pip install opencv-python
ImageGrab类不能直接存储为视频,使用numpy模块进行数组化,再通过cv2.COLOR_BGR2RGB转换为cv2色彩通道。pip install numpy
屏幕录制主要代码:
import numpy as np
from PIL import ImageGrab
import cv2
im = ImageGrab.grab()
width, high = im.size # 获取屏幕的宽和高
fourcc = cv2.VideoWriter_fourcc(*'I420') # 设置视频编码格式
fps = 15 # 设置帧率
video = cv2.VideoWriter('test.avi', fourcc, fps, (width, high))
while True: # 开始录制
im = ImageGrab.grab()
im_cv = cv2.cvtColor(np.array(im), cv2.COLOR_BGR2RGB)
# 图像写入
video.write(im_cv)
if xx: # 当某某条件满足中断循环
break
video.release() # 释放缓存,持久化视频
测试运行可以保存屏幕快照为视频,但操作起来不优雅,也不利于后续的操作。
封装成类,继承线程父类,方便使用键盘来控制视频录制的结束。
from threading import Thread
class ScreenshotVideo(Thread):
def __init__(self):
"""初始化参数"""
super().__init__()
详细代码将在文末给出。
计算视频最优fps及使用numpy计算中间帧数组
实际操作中视频录制在不同电脑中会出现不一样的帧率,