Extracting image from video at a given time using OpenCV
32,630
Solution 1
why don't you just do, what @micka proposed ?
import cv2
vidcap = cv2.VideoCapture('d:/video/keep/Le Sang Des Betes.mp4')
vidcap.set(cv2.CAP_PROP_POS_MSEC,20000) # just cue to 20 sec. position
success,image = vidcap.read()
if success:
cv2.imwrite("frame20sec.jpg", image) # save frame as JPEG file
cv2.imshow("20sec",image)
cv2.waitKey()
Solution 2
# Import the necessary packages
import cv2
vidcap = cv2.VideoCapture('Wildlife.mp4')
success,image = vidcap.read()
print success
#cv2.imwrite("frame.jpg", image)
count = 0
framerate = vidcap.get(5)
print "framerate:", framerate
framecount = vidcap.get(7)
print "framecount:", framecount
vidcap.set(5,1)
newframerate = vidcap.get(5)
print "newframerate:", newframerate
while success:
success,image = vidcap.read()
#cv2.imwrite("frame%d.jpg" % count, image)
getvalue = vidcap.get(0)
print getvalue
if getvalue == 20000:
cv2.imwrite("frame%d.jpg" % getvalue, image)
#if cv2.waitKey(10) == 27:
#break
count += 1
The output is as follows
framerate: 29.97002997
framecount: 901.0
newframerate: 29.97002997
Why frame rate is not changing.I want to change frame rate to 1 so that whatever time value user gives i should be able to get image frame.
Author by
venpo045
Updated on July 09, 2022Comments
-
venpo045 almost 2 years
My task is to make a utility that can take a video and time in seconds.
The utility should write out jpeg images from the video with the given input.
E.g. let the video name be
abc.mpeg
and time be supplied to the tool as20
seconds. The utility should write out image from video @ 20th second.# Import the necessary packages import argparse import cv2 vidcap = cv2.VideoCapture('Wildlife.mp4') success,image = vidcap.read() count = 0; while success: success,image = vidcap.read() cv2.imwrite("frame%d.jpg" % count, image) # save frame as JPEG file if cv2.waitKey(10) == 27: # exit if Escape is hit break count += 1
The above code gives all frames of the entire video, my concern is how can I pass time and get the frame at the specified time?
-
venpo045 over 9 yearsAs @Micka said to change frame rate, i tried to set frame rate but its not changing.
-
venpo045 over 9 yearsthanks now i understood. Also we should use vidcap.set(0,20000) in place of CAP_PROP_POS_MSEC
-
berak over 9 years^^ ah, sorry, tried on 3.0, where the constants are more cosistent. it's probably cv2.cv.CAP_PROP_POS_MSEC with opencv2.4