Я использую следующий код для извлечения определенного кадра из видеофайла. В этом примере я просто получаю средний кадр:
import cv2
video_path = '/tmp/wonderwall.mp4'
vidcap = cv2.VideoCapture(video_path)
middle_frame = int(vidcap.get(cv2.CAP_PROP_FRAME_COUNT) / 2)
success, image = vidcap.read()
count = 0
success = True
while success:
success, image = vidcap.read()
if count == middle_frame:
temp_file = tempfile.NamedTemporaryFile(suffix='.jpg', delete=False)
cv2.imwrite(temp_file.name, image)
count += 1
Однако при использовании этого метода захват среднего кадра в очень большом файле может занять некоторое время.
Очевидно, в старом модуле cv
можно было сделать:
import cv
img = cv.QueryFrame(capture)
Есть ли в cv2
аналогичный способ захвата определенного кадра в видеофайле без необходимости перебирать все кадры?