web-dev-qa-db-fra.com

comment faire une vidéo à partir d'images extraites?

J'ai extrait les images vidéo dans un dossier appelé "images". Après avoir enregistré les images dans mon dossier, j'utilise le code suivant pour créer à nouveau la vidéo. Je reçois la vidéo mais les images sont classées au hasard, comment puis-je les organiser dans un ordre séquentiel? Merci pour le post

import cv2
import os


image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

s'il vous plaît aviser, comment puis-je résoudre ce problème? J'aimerais que les vidéos soient au même rythme que la vidéo originale et que les images soient dans un ordre séquentiel.

5
programmer

Si votre besoin nécessite que vous stockiez les cadres, essayez ceci

import cv2
import os


image_folder = 'images'
video_name = 'video.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]
frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for i in range(len(images)):
    video.write(cv2.imread(os.path.join(image_folder, 'a'+str(i)+'.jpg')))

cv2.destroyAllWindows()
video.release()
0
soumith

Cela fonctionne bien avec moi

import cv2
import os


image_folder = 'c:\\m\\'
video_name = 'c:\\m\\avideo.avi'

images = [img for img in os.listdir(image_folder) if img.endswith(".jpg")]


frame = cv2.imread(os.path.join(image_folder, images[0]))
height, width, layers = frame.shape

#1 fps
#video = cv2.VideoWriter(video_name, 0, 1, (width,height))


#25 fps
video = cv2.VideoWriter(video_name, 0, 25, (width,height))

for image in images:
    video.write(cv2.imread(os.path.join(image_folder, image)))

cv2.destroyAllWindows()
video.release()

matériaux et résultat Ici

0
Mo Khalefa

Essayez glob pour lister les fichiers et trier la liste. J'ai modifié votre code à l'aide de glob. (En supposant que vos noms de fichiers d'images sont dans l'ordre souhaité)

import cv2
import os
import glob

video_name = 'video.avi'

images = glob.glob('images/*.jpg')
images.sort()

frame = cv2.imread(images[0])
height, width, layers = frame.shape

video = cv2.VideoWriter(video_name, 0, 1, (width,height))

for image in images:
    video.write(cv2.imread(image))

cv2.destroyAllWindows()
video.release() 
0

Il semble que vous ayez besoin d'un tri naturel, alors essayez natsort library:

from natsort import natsorted

images = natsorted(images)

Installer à l'aide de pip:

pip install natsort
0
user3041840