2015-09-22 2 views
-1

Я знаю, что 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, воспроизведение видео кажется нормальным, но я не хочу этого делать, поскольку он должен работать в целом со многими камерами.

Я не знаю, что делать на данный момент, но я продолжу поиск, пока не найду решение. Любое понимание очень ценится !!

ответ

0

@MBo правильно ответил, почему воспроизведение видео быстрее, чем ожидалось, но я хочу получить больше информации для людей, имеющих такую ​​же проблему.

Прежде всего, это очень важно для Raspberry Pi, поэтому у людей, использующих более совершенную машину, может не возникнуть проблема.

Даже при простом просмотре видеопотока с камеры и отсутствии записи видеофайла возможно достичь 18-20 FPS при 640 x 480. В 1920 x 1080 максимальный FPS равен 1-2. Причина в том, что кадры веб-камеры читаются последовательно, поэтому для обработки используется только одно ядро ​​процессора.

При чтении кадров в разных потоках, 24 FPS могут быть достигнуты с разрешением 640 x 480. Тем не менее, если вам интересно, см. this question для получения дополнительной информации о параллельном просмотре фреймов веб-камеры.

Единственное реальное решение, которое я нашел для видеоприложений с Raspberry Pi, - использовать official camera module, который подключен непосредственно к графическому процессору и предлагает 1080p с 30 FPS. См. this question о том, почему Raspberry Pi camera module является лучшей альтернативой веб-камерам USB.

1

Проверить реальной камеры FPS без видео написания - например, посчитать количество захваченных кадров в течение 10 секунд
Если FPS близок к 30, проверьте то же самое с возможностью записи видео. Если FPS становится хуже, то вы пропустите некоторые кадры, потому что ваша система, вероятно, не способна обработать этот поток видео с данным кодеком (MJPG) - слабым процессором настолько дальше ...

Дополнения: Я думаю, вы будете искать, какой кодек является наиболее эффективным для малины, и проверить, используются ли дополнительные библиотеки, такие как ffmpeg, opencv на вашей платформе.

+0

Я использую малиновый pi, поэтому может случиться так, что процессор слишком слаб. Как бы вы подсчитали количество захваченных кадров в течение 10 секунд? Увеличивайте переменную для каждой итерации цикла while и используя методы, такие как time.clock() и/или time.time() для контроля количества пройденных секунд? В любом случае, спасибо за помощь, я определенно попробую это как можно скорее. – maximedupre

+1

О подсчете - да, вы правы. – MBo

+0

При тестировании вручную, как вы сказали, камера FPS составляет около 14 * без * видеозаписи, поэтому я думаю, что процессор слаб. С записью видео это около 8. Однако мне интересно, как я могу писать видеофайлы, которые имеют точное воспроизведение с помощью этой техники. Это означает, что если что-то еще выполняется на компьютере или выполняется случайная вычислительная задача, одновременно записывается видеофайл, результат не будет хорошим. Очевидно, должен быть другой способ делать то, что я хочу делать, не находясь во власти процессора. Как вы думаете? – maximedupre

Смежные вопросы