En este post describimos como extraer frames de un video usando python y la biblioteca openCV.
El video gato.mp4
tiene una duración de 6 segundos y 30 frames por segundo, al extraer los frames aproximadamente obtendremos 180 frames que serán nombrados en este formato IMG_0001.jpg
, IMG_0002.jpg
, IMG_0003.jpg
…
En la carpeta extraerFrames está el archivo .py, el video y una carpeta donde se guardará los frames extraídos
Descarga estos archivos en GitHubEl código es el siguiente, debes cambiar el path a tu dirección loca donde se guardarán los frames
Desplegar la explicación del códigoimport cv2
importar openCVcapture = cv2.VideoCapture('gato.avi')
leer el archivogato.
mp4cont = 0
contador iniciado en0
se usará para nombrar consecutivamente los framespath = '/home/kipuna/Escritorio/extraerFrames/frames/'
ubicación donde se almacenarán los frames extraídoswhile (capture.isOpened()):
capture.isOpened()
DevuelveTrue
si la captura de video ya se ha inicializado.
ret, frame = capture.read()
, usa el objetocapture
para leer la información de la webCamframe
información del video frame por frameret
valor booleanoTRUE
siframe
es leído correctamente
if (ret == True)
, siret
esTrue
ejecutará lo que este dentro de la sentenciaif
.cv2.imwrite(path + 'IMG_%04d.jpg' % cont, frame)
escribe los frames en la ubicación especificada.path
dirección donde se guardarán los frames'IMG_%04d.jpg'
nombre de las imágenes, se guardará comoIMG_0001.jpg
,IMG_0002.jpg
,IMG_0003.jpg
…cont += 1
la variable contador aumenta un valor en cada iteración
if (cv2.waitKey(1) == ord('s')):
, sentencia if compara dos valores, si se presiona la teclas
cumple la condición termina el bucle. Revisar también Cómo funciona (cv2.waitKey(1) & 0xFF) == ord(‘s’)capture.release()
para cerrar el dispositivo de capturacv2.destroyAllWindows()
cerrar todas las ventanas
import cv2
capture = cv2.VideoCapture('gato.mp4')
cont = 0
path = '/home/kipuna/Escritorio/extraerFrames/frames/'
while (capture.isOpened()):
ret, frame = capture.read()
if (ret == True):
cv2.imwrite(path + 'IMG_%04d.jpg' % cont, frame)
cont += 1
if (cv2.waitKey(1) == ord('s')):
break
else:
break
capture.release()
cv2.destroyAllWindows()
Pingback: Guardar frames cada cierto tiempo con Python – openCV – Kipuna Ec