Python脚本录制的屏幕视频播放速度过快问题解决咨询
解决Python录屏视频播放速度过快的问题
问题原因
你的代码存在两个核心问题导致视频播放异常:
- 帧率不匹配:代码设置视频输出帧率为
60.0,但通过time.sleep(1/30)强制每秒仅生成30帧。播放器会按照视频元数据标记的60fps速率播放实际仅30帧的内容,直接导致播放速度翻倍。 - 缺失依赖模块:代码使用了
time.sleep()但未导入time模块,运行时会抛出错误;且time.sleep精度有限,加上截图本身的耗时,会进一步加剧帧率偏差。
解决方案
方案1:匹配帧率设置与实际录制速率
将视频输出帧率调整为和实际录制速率一致,补充缺失模块并优化帧间隔控制逻辑:
import pyautogui import cv2 import numpy as np import time # 补充导入time模块 resolution = (1920, 1080) codec = cv2.VideoWriter_fourcc(*"XVID") filename = "Recording.avi" fps = 30.0 # 改为与实际录制速率匹配的30fps out = cv2.VideoWriter(filename, codec, fps, resolution) cv2.namedWindow("Live", cv2.WINDOW_NORMAL) cv2.resizeWindow("Live", 480, 270) while True: start_time = time.time() # 记录当前帧开始时间 img = pyautogui.screenshot() frame = np.array(img) frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) out.write(frame) cv2.imshow('Live', frame) if cv2.waitKey(1) == ord('q'): break # 计算并等待剩余时间,确保每帧间隔符合30fps要求 elapsed_time = time.time() - start_time sleep_time = max(0, 1/fps - elapsed_time) time.sleep(sleep_time) out.release() cv2.destroyAllWindows()
方案2:用高效截图工具实现高帧率录制
如果需要录制60fps视频,pyautogui.screenshot()速度可能不足,推荐使用mss库(截图速度更快):
- 先安装依赖:
pip install mss
- 替换后的代码:
import cv2 import numpy as np import time from mss import mss resolution = (1920, 1080) codec = cv2.VideoWriter_fourcc(*"XVID") filename = "Recording.avi" fps = 60.0 out = cv2.VideoWriter(filename, codec, fps, resolution) cv2.namedWindow("Live", cv2.WINDOW_NORMAL) cv2.resizeWindow("Live", 480, 270) # 初始化mss截图对象 sct = mss() monitor = {"top": 0, "left": 0, "width": resolution[0], "height": resolution[1]} while True: start_time = time.time() # 快速截取屏幕 sct_img = sct.grab(monitor) frame = np.array(sct_img) frame = cv2.cvtColor(frame, cv2.COLOR_BGRA2BGR) # 转换为OpenCV支持的BGR格式 out.write(frame) cv2.imshow('Live', frame) if cv2.waitKey(1) == ord('q'): break # 动态调整等待时间,保证60fps的录制速率 elapsed_time = time.time() - start_time sleep_time = max(0, 1/fps - elapsed_time) time.sleep(sleep_time) out.release() cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Akshai
相关产品推荐
相关产品推荐

