При работе с видео-файлами — очень часто возникает вопрос: какое число кадров содержится в видео-файле?
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
По теме