从python中的VideoCapture opencv获取特定帧

时间:2015-11-04 13:58:49

标签: python opencv video-capture

我有以下代码,它通过在python中使用opencv中的VideoCapture库连续从视频中提取所有帧:

Context

但我想在视频的特定时间戳中抓取一个特定的帧。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:12)

您可以使用VideoCapture的set()函数。

您可以计算总帧数:

cap = cv2.VideoCapture("video.mp4")
total_frames = cap.get(7)

这里7是prop-Id。您可以在http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html

找到更多信息

之后你可以设置帧号,假设我要提取第100帧

cap.set(1, 100)
ret, frame = cap.read()
cv2.imwrite("path_where_to_save_image", frame)

答案 1 :(得分:2)

这是我的第一篇文章,因此,如果我不完全遵循协议,请不要into我。我只是想对June Wang做出回应,以防万一她不知道如何设置要提取的帧数,或者万一其他人偶然遇到了这个问题:

解决方案是循环的好选择:

    vid = cv2.VideoCapture(video_path)
    for i in range(start_frame, how_many_frames_you_want):
        vid.set(1, i)
        ret, still = vid.read()
        cv2.imwrite(f'{video_path}_frame{i}.jpg', still)