Python和OpenCV-确定捕获的流式视频的正确帧速率
我在Python环境中使用OpenCV从外部源捕获视频流,显示视频,并将视频写入文件。视频流可以来自不同的视频源。我需要使用与传入视频完全相同的帧速率来编写视频(例如,60 fps、29.97 fps、30 fps等) 因为流视频没有嵌入到流中的帧速率,所以我需要确定正确的帧速率。我尝试过其他人的建议,对一些帧进行采样,然后将捕获的帧数除以经过的时间。对我来说,这会导致帧速率接近,但不够接近 当我用VLC Media Player拍摄视频时,VLC会正确确定帧速率 下面是我目前正在使用的Python脚本。它缓冲500帧以计算帧速率,然后开始写入视频,同时继续捕获(延迟500帧)。(VLS捕获/写入没有明显的延迟。) 对我来说最重要的是——正确确定传入视频流的帧速率。第二个重要性–我想在拍摄后以最小的延迟编写视频 有什么建议吗Python和OpenCV-确定捕获的流式视频的正确帧速率,python,opencv,video,video-capture,capture,Python,Opencv,Video,Video Capture,Capture,我在Python环境中使用OpenCV从外部源捕获视频流,显示视频,并将视频写入文件。视频流可以来自不同的视频源。我需要使用与传入视频完全相同的帧速率来编写视频(例如,60 fps、29.97 fps、30 fps等) 因为流视频没有嵌入到流中的帧速率,所以我需要确定正确的帧速率。我尝试过其他人的建议,对一些帧进行采样,然后将捕获的帧数除以经过的时间。对我来说,这会导致帧速率接近,但不够接近 当我用VLC Media Player拍摄视频时,VLC会正确确定帧速率 下面是我目前正在使用的Pyth
import numpy as np
import cv2
from time import time
cap = cv2.VideoCapture(0)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
kount = 0
delay = 500
buffer = []
start = time()
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
kount += 1
buffer.append(frame)
cv2.imshow('frame',frame)
if kount >= delay:
if kount == delay:
end = time()
fps = kount / (end - start)
out = cv2.VideoWriter('output.avi',fourcc, fps, (frame_width,frame_height))
out.write(buffer[kount-delay])
if cv2.waitKey(1) & 0xFF == ord('q'):
for i in range(kount - delay, kount):
out.write(buffer[i])
break
else:
break
print("Frames Per Second = ", fps)
cap.release()
out.release()
cv2.destroyAllWindows()