Я знаю, что FPS объекта должен соответствовать FPS моей веб-камеры. Моя веб-камера - это Logitech HD Pro Webcam C920, и, как вы можете видеть, спецификация говорит о том, что у нее есть FPS 30. Все же вместо hardcoding значение, я использую cap.get(CV_CAP_PROP_FPS)
(который возвращает 30.0), чтобы точно соответствовать FPS.Воспроизведение видео намного быстрее, чем ожидалось
cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.avi', fourcc, cap.get(CV_CAP_PROP_FPS), (640, 480))
print(cap.get(CV_CAP_PROP_FPS)) # 30.0
Это, как я захватить каждый кадр видео:
while(cap.isOpened()):
# Capture frame-by-frame
ret, frame = cap.read()
if ret == True:
out.write(frame)
Моя проблема заключается в том, что, даже с соответствующими FPSS, видео выход (output.avi
) имеет скорость воспроизведения около х3 (по к моей ненаучной оценке), что явно не то, что я хочу. Я пробовал с различными кодеками, но та же проблема возникает.
Есть несколько вопросов по SO, которые решают эту же проблему:
OpenCV, captured video runs faster than original camera video!
OpenCV Video capture and fps problem
OpenCV: Video Recording is too fast
http://answers.opencv.org/question/16522/video-recording-is-too-fast/
Большинство из них предполагают, чтобы соответствовать FPS писателя, с FPS веб-камеры, что я и сделал. Если я кодирую FPS до 10, воспроизведение видео кажется нормальным, но я не хочу этого делать, поскольку он должен работать в целом со многими камерами.
Я не знаю, что делать на данный момент, но я продолжу поиск, пока не найду решение. Любое понимание очень ценится !!
Я использую малиновый pi, поэтому может случиться так, что процессор слишком слаб. Как бы вы подсчитали количество захваченных кадров в течение 10 секунд? Увеличивайте переменную для каждой итерации цикла while и используя методы, такие как time.clock() и/или time.time() для контроля количества пройденных секунд? В любом случае, спасибо за помощь, я определенно попробую это как можно скорее. – maximedupre
О подсчете - да, вы правы. – MBo
При тестировании вручную, как вы сказали, камера FPS составляет около 14 * без * видеозаписи, поэтому я думаю, что процессор слаб. С записью видео это около 8. Однако мне интересно, как я могу писать видеофайлы, которые имеют точное воспроизведение с помощью этой техники. Это означает, что если что-то еще выполняется на компьютере или выполняется случайная вычислительная задача, одновременно записывается видеофайл, результат не будет хорошим. Очевидно, должен быть другой способ делать то, что я хочу делать, не находясь во власти процессора. Как вы думаете? – maximedupre