我有一个能够记录 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