我有以下代码,它通过在python中使用opencv中的VideoCapture库连续从视频中提取所有帧:
Context
但我想在视频的特定时间戳中抓取一个特定的帧。
我怎样才能做到这一点?
答案 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)