1

我正在尝试在我的 MacBook Pro 上录制屏幕并将其存储在视频文件中。这不是最终目标,但这是第一步,我注意到无论我将写作帧率设置为什么,我在最终视频中只得到了一半。例如,如果我将其设置为 30,我会以 30fps 的速度保存一个视频,但每一帧都会重复。第 1 帧和第 2 帧相同,第 3 帧和第 4 帧相同;等等等等。所以我只得到15帧。

我已经尝试将帧速率设置为 60 或 120,它给了我相同的结果。而当我使用 QuickTime 等专业实用程序录制屏幕时,我会得到应有的录制效果,没有重复的帧等。

import numpy as np
import cv2
from mss import mss
from PIL import Image

bbox = {'top': 270, 'left': 100, 'width': 600, 'height': 150}

sct = mss()

#fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('/Users/vipulrajan/Downloads/DinoGame/output.avi',cv2.VideoWriter_fourcc(*'XVID'), 60.0, (1200,300), isColor=0)

while 1:

    sct_img = sct.grab(bbox)
    im = np.array(sct_img)[:,:,2] #converting the image to grayscale

    out.write(im)

我还尝试在代码中添加和删除 cv2.waitKey 函数,但没有任何区别。有谁知道可能导致这种行为的原因是什么?

4

1 回答 1

0

嗯,这段代码似乎按预期工作。也许您可以尝试并发布视频以帮助我们了解您所看到的?

import time

import cv2
import numpy as np
from PIL import Image
from mss import mss

frame_rate = 30
width, height = 600, 150
out = cv2.VideoWriter('output.avi',
                      cv2.VideoWriter_fourcc(*'XVID'),
                      frame_rate,
                      (width, height),
                      isColor=0)
bbox = {'top': 270, 'left': 100, 'width': width, 'height': height}

with mss() as sct:
    start = time.monotonic()
    while 'capturing':
        im = np.array(sct.grab(bbox))[:,:,2]  # Convert to grayscale
        out.write(im)
        time.sleep(1 / frame_rate)

        if time.monotonic() - start > 3:  # 3 seconds
            break

out.release()
于 2019-07-09T16:53:33.873 回答