Python屏幕录制用PyAutoGUI吗

wen python案例 8

本文目录导读:

Python屏幕录制用PyAutoGUI吗

  1. PyAutoGUI 录制方案
  2. 更好的替代方案

不一定非要用 PyAutoGUI,但它确实可以胜任简单的屏幕录制,让我给你详细对比几种方案:

PyAutoGUI 录制方案

PyAutoGUI 有 screenshot() 功能,可以配合 OpenCV 和 Pillow 实现录制:

import pyautogui
import cv2
import numpy as np
import time
# 获取屏幕尺寸
screen_size = pyautogui.size()
fps = 10  # 帧率
# 定义视频编码器
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
out = cv2.VideoWriter('screen_record.mp4', fourcc, fps, screen_size)
print("开始录制...")
time.sleep(2)  # 延迟准备
try:
    for _ in range(300):  # 录制30秒 (fps=10)
        img = pyautogui.screenshot()
        frame = np.array(img)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        out.write(frame)
        if cv2.waitKey(1) == ord('q'):
            break
finally:
    out.release()
    cv2.destroyAllWindows()
    print("录制完成")

更好的替代方案

MSS (Multi-Screen Shot) ⭐推荐

比 PyAutoGUI 快10倍以上:

from mss import mss
import cv2
import numpy as np
with mss() as sct:
    monitor = sct.monitors[1]  # 主屏幕
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')
    out = cv2.VideoWriter('record.mp4', fourcc, 20, 
                         (monitor['width'], monitor['height']))
    while True:
        img = sct.grab(monitor)
        frame = np.array(img)
        frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR)
        out.write(frame)
        if cv2.waitKey(1) == ord('q'):
            break
    out.release()

PyAutoGUI vs MSS 性能对比

方法 FPS (1920x1080) CPU使用率
PyAutoGUI 5-10 FPS 较高
MSS 60+ FPS 较低

专业库推荐

pyautogui + Pillow:适合简单任务、学习用途 mss + cv2:适合日常录制需求 pyav (FFmpeg):专业级录制,可支持音频

# 安装
pip install av mss pillow
# 专业录制示例
import av
import mss
import numpy as np
container = av.open('output.mp4', mode='w')
stream = container.add_stream('libx264', rate=30)
with mss.mss() as sct:
    monitor = sct.monitors[1]
    while True:
        img = sct.grab(monitor)
        frame = av.VideoFrame.from_ndarray(
            np.array(img), format='bgra'
        )
        for packet in stream.encode(frame):
            container.mux(packet)
    # 刷出缓冲
    for packet in stream.encode():
        container.mux(packet)
container.close()

建议:如果只是学习或简单需求,用 PyAutoGUI 没问题,但生产环境建议用 MSS 配合 OpenCV,性能好很多,而且代码复杂度差不多。

抱歉,评论功能暂时关闭!