Extracción de imágenes de video en un momento dado usando OpenCV

Mi tarea es hacer una utilidad que pueda tomar un video y tiempo en segundos.

La utilidad debe escribir imágenes jpeg del video con la entrada dada.

Por ejemplo, deje que el nombre del video sea abc.mpeg y el tiempo se suministre a la herramienta en 20 segundos. La utilidad debe escribir la imagen del video a los 20 segundos.

  # 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 

El código anterior proporciona todos los fotogtwigs de todo el video, mi preocupación es ¿cómo puedo pasar el tiempo y obtener el fotogtwig a la hora especificada?

¿Por qué no lo haces? ¿Qué propuso @micka?

 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() 
 # 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 

La salida es la siguiente

 framerate: 29.97002997 framecount: 901.0 newframerate: 29.97002997 

Por qué la velocidad de cuadros no cambia. Quiero cambiar la velocidad de cuadros a 1 para que, independientemente del valor de tiempo que el usuario indique, pueda obtener un cuadro de imagen.

 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 

Aquí, cap.set (cv2.CAP_PROP_POS_MSEC, 1000) es responsable de saltar directamente al primer segundo del video (milésimo segundo milésimo segundo). Siéntase libre de sustituir el valor de su elección.

He probado el código en OpenCV 3.1.0.