使用Python的mss库录屏:如何将捕获的帧保存为视频文件?
用mss捕获屏幕并保存为视频文件的解决方案
首先纠正下:.wav是音频格式,你需要的应该是保存为视频文件(比如.mp4、.avi)。下面是修改后的代码,集成了视频保存功能,同时优化了帧转换效率(跳过PIL,直接用mss转numpy数组,速度更快):
from mss import mss import cv2 import numpy as np from time import time # 捕获区域设置 mon = {'top': 100, 'left': 200, 'width': 1600, 'height': 1024} frame_width = mon['width'] frame_height = mon['height'] # 视频保存参数配置 fps = 30 # 自定义帧率 fourcc = cv2.VideoWriter_fourcc(*'XVID') # Windows下常用编码格式 out = cv2.VideoWriter('screen_record.avi', fourcc, fps, (frame_width, frame_height)) sct = mss() try: while True: begin_time = time() # 捕获屏幕帧,直接转成numpy数组(跳过PIL,提升速度) sct_img = sct.grab(mon) frame = np.array(sct_img) # mss捕获的是RGBA格式,转成OpenCV需要的BGR格式 frame_bgr = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) # 写入视频文件 out.write(frame_bgr) # 显示预览窗口 cv2.imshow('Screen Capture', frame_bgr) print(f'当前帧耗时:{time()-begin_time:.4f}秒') # 按q退出 if cv2.waitKey(1) & 0xFF == ord('q'): break finally: # 释放资源 out.release() cv2.destroyAllWindows()
关键说明:
- 视频编码格式:Windows环境下推荐用
XVID编码生成.avi文件;如果要生成.mp4,可以尝试mp4v编码(cv2.VideoWriter_fourcc(*'mp4v')),保存为screen_record.mp4。 - 帧转换优化:直接将mss捕获的帧转成numpy数组,省去PIL的
Image.frombytes步骤,进一步提升捕获速度,贴合你用mss追求高效的需求。 - 资源释放:用
try...finally确保即使异常退出,视频文件和窗口资源也能正常释放,避免生成损坏的视频文件。 - 帧率设置:
fps可根据需求调整,30是常规视频帧率,也能根据实际捕获速度动态修改。
如果遇到视频无法打开的问题,检查:
- 编码格式是否适配你的系统
- 视频文件的分辨率是否和捕获区域的宽高一致
- 确保退出时正常执行了
out.release()
内容的提问来源于stack exchange,提问作者Zale
相关产品推荐
相关产品推荐

