【问题标题】:Why is python screen recorder not creating .avi file?为什么 python 屏幕录像机不创建 .avi 文件?
【发布时间】:2021-09-15 11:30:16
【问题描述】:

我正在尝试制作输出 AVI 文件的 python 屏幕录像机。按下“q”后循环应该停止,但这不起作用。当我用 Ctrl + C 中断程序时,它也不输出任何东西。我使用的是 Mac OS。

import cv2
import numpy as np
import pyautogui

SCREEN_SIZE = (1440, 900)
fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("output2.avi", fourcc, 20.0, (SCREEN_SIZE))

while True:
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)
    cv2.imshow("screenshot", frame)
    if cv2.waitKey(1) == ord("q"):
        break

cv2.destroyAllWindows()
out.release()

非常感谢您的建议;)

【问题讨论】:

  • assert out.isOpened()
  • 我认为pyautogui.screenshot()返回的img的分辨率不是1440x900。试试img = pyautogui.screenshot(region=(0, 0, SCREEN_SIZE[0], SCREEN_SIZE[1]))

标签: python opencv screenshot avi screen-recording


【解决方案1】:

在这里(OpenCV videowrite doesn't write video)我发现最常见的问题是如果分辨率错误,它不会保存。

为确保您在屏幕上使用正确的分辨率,请使用SCREEN_SIZE = pyautogui.size()

完整的代码是:

import cv2 as cv2
import numpy as np
import pyautogui

SCREEN_SIZE = pyautogui.size() # changed this line

fourcc = cv2.VideoWriter_fourcc(*"XVID")
out = cv2.VideoWriter("output2.avi", fourcc, 20.0, SCREEN_SIZE)

while True:
    img = pyautogui.screenshot()
    frame = np.array(img)
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    out.write(frame)
    cv2.imshow("screenshot", frame)
    if cv2.waitKey(1) == ord("q"):
        break

cv2.destroyAllWindows()
out.release()

【讨论】:

  • 感谢您的帮助 :) 但唯一对我有用的是将 (*"XVID") 更改为 ('F','M','P','4')。现在它正在输出AVI,但quicktime播放器仍然无法打开它....
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 2022-12-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多