При работе с видео-файлами — очень часто возникает вопрос: какое число кадров содержится в видео-файле?
OpenCV позволяет ответить на этот вопрос двумя способами:
- Использовать метод cv::VideoCapture::get() c параметром CAP_PROP_FRAME_COUNT.
- Просто последовательно посчитать все кадры видео вручную.
Первый способ, разумеется, быстрее, так как он возвращает данные из мета-информации видео-файла, но эта информация может быть не всегда корректной.
Пример использования обоих методов на Python:
#!/usr/bin/env python3
import cv2
file_path = "./video.mp4"
cap = cv2.VideoCapture(file_path)
if cap.isOpened() == False:
print("[!] Cant open video:", file_path)
exit(-1)
frame_number = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
print("frame_number:", frame_number)
frame_counter = 0
while True:
ret, frame = cap.read()
if ret is False:
break
frame_counter += 1
cap.release()
print("frame_counter:", frame_counter)
Пример работы:
$ ./test_cv_frame_counter.py frame_number: 2166 frame_counter: 2166
Однако, на другом файле (формата avi) — первый метод уже возвращает ошибочные данные:
$ ./test_cv_frame_counter.py frame_number: 25544 frame_counter: 640
Таким образом, хотя второй метод и занимает намного больше времени, но полученное число кадров будет точным 🙂
Ссылки
- Count the total number of frames in a video with OpenCV and Python
- python opencv cv2.cv.CV_CAP_PROP_FRAME_COUNT get wrong numbers
По теме

