Как я могу извлечь кадр из видео с помощью cv2 за определенное время c в микросекундах? - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть видео, которые мне нужны, чтобы захватывать кадры и сохранять в виде изображений в формате png.
Мне нужны только кадры из указанных c раз.
Это время в микросекундах.
Как я могу получить только эти кадры?

ret, frame = cap.read()
cv2.imshow("Video", frame)

cap = cv2.VideoCapture("video.mp4")
count = 0
while vidcap.isOpened():

if count == int(308608300 / 1000000):
    cv2.imwrite(os.path.join(path_output_dir, '%d.png') % count)

cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 01 мая 2020

Это звучит как то, с чем я работаю. Поэтому для этого кода просто измените число в frameRate.

import cv2
vidcap = cv2.VideoCapture('video.mp4')
def getFrame(sec):
    vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)
    hasFrames,image = vidcap.read()
    if hasFrames:
        cv2.imwrite("folder/"+str(sec)+" sec.png", image)     # save frame as PNG file
    return hasFrames
sec = 0
frameRate = 0.25#it will capture image in each 0.25 second
success = getFrame(sec)
while success:
    sec = sec + frameRate
    sec = round(sec, 2)
    success = getFrame(sec)
...