Extract image from video at a specific time using OpenCV

My task is to make a utility that can receive video and time in seconds.

The utility should record jpeg images from the video with this input.

eg. let the video name be abc.mpeg , and the time will be provided to the tool as 20 seconds. The utility should write out the image from the video @ the 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 shows all the frames of the whole video, I'm worried, how can I transfer the time and get the frame at the specified time?

+8
source share
4 answers

why don't you just do what @micka suggested?

 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() 
+11
source
 # 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 the frame rate does not change. I want to change the frame rate to 1, so that any time value that the user gives should be able to receive the image frame.

0
source
 import cv2 cap = cv2.VideoCapture('bunny.mp4') cap.set(cv2.CAP_PROP_POS_MSEC,1000) # Go to the 1 sec. position ret,frame = cap.read() # Retrieves the frame at the specified second cv2.imwrite("image.jpg", frame) # Saves the frame as an image cv2.imshow("Frame Name",frame) # Displays the frame on screen cv2.waitKey() # Waits For Input 

Here cap.set (cv2.CAP_PROP_POS_MSEC, 1000) is responsible for passing directly to the 1st second in the video (1000th millisecond). Feel free to substitute the value of your choice.

I tested the code on OpenCV 3.1.0.

0
source

I tried the time frame as @berak mentioned, but still it does not take the time frame and captures frames, I need help with this

0
source

Source: https://habr.com/ru/post/979612/


All Articles