1

我有一个能够记录 60 fps 的 USB 相机。我在 Windows 上使用带有简单 python 代码的 openCV 来捕获一些视频,但是它并不顺利!

我的主要问题是,如果我将[width, height]属性设置为相机接受的最大值,则它能够很好地录制 60 fps,否则(即任何较低的分辨率)录制/流式传输将降至 30 fps 最大值(录制会很有趣加速或减速以匹配指定的录制 fps;即,如果指定的分辨率为 320X240 并且录制 fps 设置为 60 和 10 秒,则生成的视频将被压缩到 5 秒,所以基本上加速了 2 倍!!)

我不明白为什么会发生这种情况?有任何想法吗?

这是代码片段:

import cv2
import os
import time

def readVideo(Did):
    cap = cv2.VideoCapture(Did)
    # cap.set(cv2.CAP_PROP_FPS, 60) # no matter if you specify or not it selects what suits!!
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) # 640 is maximum
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) # 480 is maximum
    ret,frame = cap.read()

    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('./output.avi', fourcc, 60.0, (320,240)) # (width,height) must match what is stated above in CAP!
    while ret:
        ret,frame = cap.read()
        elapsed = time.time() - start
        count = count + 1 # frame numbers
        cv2.putText(frame,str(cfpsBacked), (25,15),font,fontScale,fontColor,lineType)
        out.write(frame)
        cv2.imshow('camera',frame)
        if elapsed - tick >= 1:
            print("Actual count:{}",count)
            tick += 1
            cfpsBacked = count
            count = 0
        if tick - 10 == 0: # just records 10 seconds
            break

        if cv2.waitKey(10) & 0xFF == ord('q'):
            break
    out.release()
    cap.release()
    cv2.destroyAllWindows()  # destroy all the opened windows
4

0 回答 0