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