CodeGym /Cours Java /Python SELF FR /Extraction, traitement et sauvegarde des images d'une vid...

Extraction, traitement et sauvegarde des images d'une vidéo avec MoviePy

Python SELF FR
Niveau 47 , Leçon 2
Disponible

1. Pourquoi c'est important ?

Avant de se lancer dans notre moulinette virtuelle d'extraction d'images, discutons pourquoi c'est essentiel. Extraire et traiter des images individuelles peut être utile pour créer des effets, analyser des changements au fil du temps, ainsi que préparer des images pour l'apprentissage machine. C'est aussi une excellente façon d'utiliser des images pour créer des diaporamas ou des animations.

Les étapes principales pour travailler avec les images

  1. Extraire des images d'une vidéo.
  2. Traiter les images extraites.
  3. Sauvegarder les images traitées.

Maintenant qu'on sait ce qu'on veut obtenir, passons à la pratique.

2. Extraction d'Images depuis une Vidéo

Commençons par la base - extraire des images. Avec MoviePy, on peut facilement accéder à des images individuelles d'une vidéo en utilisant les méthodes de la classe VideoFileClip. Chaque image est représentée sous forme d'un tableau (tableau multidimensionnel de pixels), qu'on peut traiter avec MoviePy ou d'autres bibliothèques comme NumPy ou Pillow.

Ouvrir une vidéo et accéder à une image spécifique


from moviepy.editor import VideoFileClip

# Ouverture du fichier vidéo
video_clip = VideoFileClip("sample_video.mp4")

# Extraction de l'image à la 5ème seconde
frame = video_clip.get_frame(5)

# Affichage des infos sur l'image
print("Type de données de l'image :", type(frame))
print("Dimensions de l'image :", frame.shape)

Dans cet exemple :

  • VideoFileClip("sample_video.mp4") ouvre le fichier vidéo et crée un objet video_clip.
  • video_clip.get_frame(5) extrait l'image à la 5ème seconde.
  • frame.shape permet de voir les dimensions de l'image (hauteur, largeur et nombre de canaux couleur).

3. Sauvegarder une image comme fichier image

Une fois qu'on a extrait une image, on peut la sauvegarder comme fichier image. Pour ça, on peut utiliser la bibliothèque Pillow (PIL) qui est parfaite pour bosser avec des images.

Installation de Pillow

Si Pillow n'est pas installée, installe-la avec pip:

pip install pillow

Sauvegarder une image comme fichier


from PIL import Image
from moviepy.editor import VideoFileClip

# Ouvrir la vidéo et extraire une image à la 5ème seconde
video_clip = VideoFileClip("sample_video.mp4")
frame = video_clip.get_frame(5)

# Conversion de l'image en objet et sauvegarde
image = Image.fromarray(frame)
image.save("frame_at_5_seconds.png")

Ici :

  • Image.fromarray(frame) convertit un tableau de pixels en objet image.
  • image.save("frame_at_5_seconds.png") sauvegarde l'image sous forme de fichier PNG.

4. Extraction d'une Série d'Images depuis une Vidéo

Si tu as besoin d'extraire plusieurs images régulièrement (par exemple, chaque image, chaque seconde ou à un intervalle donné), tu peux utiliser une boucle pour choper les images nécessaires. C'est pratique si tu veux analyser ou créer des miniatures depuis une vidéo.

Exemple : Extraction et Sauvegarde des Images Chaque Seconde


from PIL import Image
from moviepy.editor import VideoFileClip

# Ouverture du fichier vidéo
video_clip = VideoFileClip("sample_video.mp4")

# Durée de la vidéo en secondes
duration = int(video_clip.duration)

# Extraction et sauvegarde des images chaque seconde
for i in range(duration):
    frame = video_clip.get_frame(i)
    image = Image.fromarray(frame)
    image.save(f"frame_{i}_second.png")

Ici :

  • for i in range(duration) parcourt chaque seconde jusqu'à la fin de la vidéo.
  • À chaque seconde, une image est extraite, convertie en objet image et sauvegardée avec un nom unique (par ex. frame_1_second.png, frame_2_second.png).

5. Redimensionner une Image avant Sauvegarde

MoviePy permet de redimensionner les images avant de les sauvegarder. C'est utile si tu veux créer des miniatures ou des images réduites.

Redimensionner une Image et la Sauvegarder


from PIL import Image
from moviepy.editor import VideoFileClip

# Ouverture du fichier vidéo
video_clip = VideoFileClip("sample_video.mp4")

# Extraction de l'image à la 10ème seconde
frame = video_clip.get_frame(10)

# Conversion de l'image
image = Image.fromarray(frame)

# Redimensionner l'image à 200x200 pixels
image_resized = image.resize((200, 200))

# Sauvegarde de l'image redimensionnée
image_resized.save("resized_frame_at_10_seconds.png")

6. Extraire des Images à une Fréquence Spécifique

Si tu dois extraire des images à une fréquence spécifique (par exemple, chaque 10ème image pour analyser un mouvement), tu peux utiliser la fréquence d'images fps.

Exemple : Extraction de chaque 10ème image


from PIL import Image
from moviepy.editor import VideoFileClip

# Ouverture du fichier vidéo
video_clip = VideoFileClip("sample_video.mp4")

# Configuration de l'intervalle entre les images à extraire (par ex. chaque 10ème image)
frame_interval = 10

# Extraction et sauvegarde de chaque 10ème image
for i, frame in enumerate(video_clip.iter_frames()):
    if i % frame_interval == 0:
        image = Image.fromarray(frame)
        image.save(f"frame_{i}.png")

Ici :

  • video_clip.iter_frames() permet de parcourir toutes les images de la vidéo.
  • if i % frame_interval == 0 extrait uniquement chaque 10ème image.

7. Traitement des Images

Extraire une image, c'est bien, mais tu veux peut-être y ajouter un peu de magie. Pour ça, on va utiliser la bibliothèque Pillow pour manipuler l'image.


# Conversion de l'image en noir et blanc
image_bw = image.convert("L")
image_bw.save("mid_frame_bw.png")

Dans cet exemple, on a pris une image extraite et on l'a convertie en noir et blanc. Des modifications simples mais efficaces peuvent rendre tes images plus expressives.

8. Problèmes et Solutions

Dans le monde de l'extraction et du traitement vidéo, il y a des pièges. Vérifie que le chemin vers tes fichiers est correct, sinon ton code peut rapidement ressembler à une "chasse à l'aiguille dans une botte de foin". Et assure-toi que toutes les bibliothèques nécessaires sont bien installées, surtout si tu redémarres ton système ou mets à jour Python. Parfois, les dépendances oubliées peuvent causer des "soirées d'erreurs surprises".

Ce processus d'extraction et de traitement des images peut être super utile dans de nombreux domaines. Par exemple, pour créer des supports pédagogiques, analyser des vidéos sportives pour des entraînements, ou pour un montage vidéo créatif.

Une fois que tu maîtrises ces techniques, tu pourras facilement démonter n'importe quelle vidéo en images individuelles et en faire ce que tu veux ! Oublie l'ennui et la monotonie - ton nouvel arsenal ouvre un monde de possibilités infinies. Et n'oublie pas, avec MoviePy, pas besoin de super-pouvoirs pour créer quelque chose de vraiment magique.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION