Soy un principiante que usa Python, por lo que probablemente sea relativamente simple, pero me gustaría hacer un script que encontré en línea usando Open CV en un bucle para que pueda convertir una carpeta completa de videos en imágenes.
Este código funciona bien cuando le pongo un nombre de archivo de video, cv2.VideoCapture()
pero me he encontrado con problemas al intentar definirlo como un nombre de variable al que un bucle puede hacer referencia. Por lo tanto, ¡cualquier ayuda sobre cómo estructurar correctamente el ciclo y la subrutina sería extremadamente útil!
import cv2
import numpy as np
import os
vidcap = cv2.VideoCapture('FS_T8_2019-01-17_02.14.52_.MP4')
def getFrame(sec):
vidcap.set(cv2.CAP_PROP_POS_MSEC,sec*1000)
hasFrames,image = vidcap.read()
if hasFrames:
cv2.imwrite("image"+str(count)+".jpg", image) # save frame as JPG file
return hasFrames
sec = 0
frameRate = 1 #//it will capture image in each 1 second
count=1
success = getFrame(sec)
while success:
count = count + 1
sec = sec + frameRate
sec = round(sec, 2)
success = getFrame(sec)
Lo ideal sería mover vidcap dentro de la función getFrame para obtener la fuente de video como argumento, de modo que vidcap sea diferente para cada video. Hice un bucle sobre una carpeta (videos) y envié los marcos a otra carpeta (salida) como esta
import cv2
import numpy as np
import os
import sys
ROOT_DIRECTORY_PATH = sys.path[0]
def getFrame(sec, src, img_out):
vidcap = cv2.VideoCapture(src)
vidcap.set(cv2.CAP_PROP_POS_MSEC, sec * 1000)
hasFrames, image = vidcap.read()
if hasFrames:
cv2.imwrite(img_out, image) # save frame as JPG file
return hasFrames
def create_frame(src, dst):
sec = 0
frameRate = 1 # //it will capture image in each 1 second
count = 1
img_out = dst + '_' + str(count) + '.jpg'
success = getFrame(sec, src, img_out)
while success:
count = count + 1
sec = sec + frameRate
sec = round(sec, 2)
img_out = dst + '_' + str(count) + '.jpg'
success = getFrame(sec, src, img_out)
for mp4name in os.listdir('videos'):
create_frame(ROOT_DIRECTORY_PATH + '/videos/' + mp4name,
ROOT_DIRECTORY_PATH + '/output/' + mp4name.split('.mp4')[0])
Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.
En caso de infracción, por favor [email protected] Eliminar
Déjame decir algunas palabras