OpenCV дает неверный FPS и количество кадров видео - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь прочитать, выполнить некоторую обработку, а затем сохранить .mp4 видео, используя OpenCV в python, но cap.get(cv2.CAP_PROP_FPS) возвращает неправильный FPS для некоторых видео.

Так что я не буду вдаваться в подробности того, что делает код, потому что это не имеет отношения к рассматриваемой проблеме. Я заметил, что выводимое видео из моей программы воспроизводится слишком быстро, и при отладке я решил просто посмотреть, как оно выглядит при простом воспроизведении входного видео.

Итак, код воспроизведения выглядит примерно так:

cap = cv2.VideoCapture(video_path)
video_fps = cap.get(cv2.CAP_PROP_FPS)                  
#returns 49.8

while cap.isOpened():
    ret, frame = cap.read()
    if ret:
        cv2.imshow('a', frame)
        cv2.waitkey(int(1000/video_fps))
    else:
        break

Но видео воспроизводится слишком быстро, поэтому я щелкаю правой кнопкой мыши -> свойства -> подробности, и, конечно же, он говорит frames per seconds: 49 ... но я знаю, что большинство моих видео - 25 кадров в секунду (что составляет около половины 49,8 ), поэтому просто из любопытства я изменил задержку вдвое: cv2.waitkey(int(2000/video_fps)) И вдруг видео воспроизводится с идеальной скоростью.

Еще одна странность заключается в том, что когда я делю результат cap.get(cv2.CAP_PROP_POS_FRAMES) на продолжительность видео в секундах, я снова получаю 49,8 и, поскольку я знаю, что длина должна быть правильной, я могу только догадываться, что OpenCV получает число неправильные кадры (?)

Итак, мои вопросы:

1) Что, черт возьми, здесь происходит?

2) Есть ли лучший \ более надежный способ проверить видео fps и количество кадров?

...