Pular para o conteúdo principal

Dividir os vídeos em frames

Agora, os vídeos serão divididos em frames. Para isso, executamos o seguinte script:

import cv2
import os

pastaVideos = "videos" # Pasta onde videos estão salvos
pastaFrames = "frames" # Pasta onde frames serão salvos
pularFrames = 3 # A cada quantos frames um jpg será salvo

os.chdir(pastaVideos)
lista_de_arquivo = os.listdir(os.getcwd())
lista_de_videos = []
os.chdir("..")

for arquivo in lista_de_arquivo:
if os.path.splitext(arquivo)[1] == ".avi":
lista_de_videos.append(arquivo)

numero_frame=1
current_frame = 1

for video in lista_de_videos:

print ('From...' + video)
nome_do_video = pastaVideos + "/" + video
cap = cv2.VideoCapture(nome_do_video)

while(True):
ret, frame = cap.read()
if ret:
if current_frame % pularFrames == 0:
name = pastaFrames + '/frame' + str(numero_frame) + '.jpg'
numero_frame +=1
print ('Creating...' + name)
cv2.imwrite(name, frame)
current_frame += 1
else: break
cap.release()

A primeira parte é onde são definidos os parâmetros. Modifique eles de acordo com o nome da pasta em que os videos estão, o nome da pasta em que os frames devem ser salvos, e a cada quantos frames do vídeo o script salvará um frame (utilizado para evitar frames identicos, para salvar todos os frames utilizar pularFrames = 1).

pastaVideos = "videos" # Pasta onde videos estão salvos
pastaFrames = "frames" # Pasta onde frames serão salvos
pularFrames = 3 # A cada quantos frames um jpg será salvo

Em seguida, acessa a pasta dos videos e lê o nome de todos os arquivos para iterar sobre eles. Então, salva os que possuem a extensão .avi em uma lista (para evitar erros com "lixo" na pasta).

os.chdir(pastaVideos)
lista_de_arquivo = os.listdir(os.getcwd())
lista_de_videos = []
os.chdir("..")

for arquivo in lista_de_arquivo:
if os.path.splitext(arquivo)[1] == ".avi":
lista_de_videos.append(arquivo)

Por fim, itera sobre todos os vídeos, salvando os frames na pasta designada no formato "frame0.jpg", "frame1.jpg", ..., "frameN.jpg".

numero_frame=1
current_frame = 1

for video in lista_de_videos:

print ('From...' + video)
nome_do_video = pastaVideos + "/" + video
cap = cv2.VideoCapture(nome_do_video)

while(True):
ret, frame = cap.read()
if ret:
if current_frame % pularFrames == 0:
name = pastaFrames + '/frame' + str(numero_frame) + '.jpg'
numero_frame +=1
print ('Creating...' + name)
cv2.imwrite(name, frame)
current_frame += 1
else: break
cap.release()

O resultado será os frames dos vídeos em formato .jpg pasta designada (no código exemplo, o script está no mesmo diretório que a pasta "videos" e a "frames").