Éditer des vidéos en Python avec MoviePy : du montage aux sous-titres
Cet article s'inspire du chapitre 4.4 "Éditer des vidéos avec le module MoviePy" du livre "Python sans détour" de Laurent Berger et Pascal Guézet (Éditions D-BookeR).
Vous souhaitez automatiser l'édition de vos vidéos, ajouter des sous-titres ou créer des montages complexes ? Le module MoviePy transforme Python en un véritable studio de post-production accessible à tous.
Pourquoi MoviePy ?
L'utilisation des logiciels de montage vidéo traditionnels se fondent sur une approche manuelle. Si vous devez traiter des centaines de vidéos, ajouter des watermarks dynamiques ou créer des compositions vidéo complexes, MoviePy sera plus adapté car il permet d'automatiser vos workflows vidéo.
Les bases : charger et manipuler une vidéo
MoviePy rend l'édition vidéo étonnamment simple. Voici comment charger une vidéo :
import moviepy.editor
video = moviepy.editor.VideoFileClip("/tmp/megamind.avi")
# Accéder aux propriétés
print(video.duration) # Durée en secondes
print(video.fps) # Images par seconde
print(video.size) # Résolution [largeur, hauteur]
Extraire un segment de vidéo
Besoin de découper une vidéo ? La méthode subclip() est votre alliée :
# Supprimer la première et la dernière seconde
extrait = video.subclip(1, video.duration - 1)
# Sauvegarder le résultat
extrait.write_videofile("/tmp/extrait.mp4")
MoviePy gère automatiquement le codec approprié en fonction de l'extension du fichier (libx264 pour MP4, libvorbis pour OGV). Vous pouvez même créer des GIF animés avec write_gif() !
Ajouter des sous-titres automatiquement
L'une des fonctionnalités très appréciées est l'ajout automatique de sous-titres. MoviePy utilise ImageMagick pour faire cela.
Format des sous-titres (SRT)
Les sous-titres suivent le format SubRip standard :
1
00:00:00,000 --> 00:00:02,000
Sous-titres avec moviepy
2
00:00:02,001 --> 00:00:04,000
Ils sont définis dans un fichier srt
Implémenter les sous-titres en Python
Voici comment intégrer ces sous-titres à votre vidéo :
import moviepy.editor
import moviepy.video.tools.subtitles
# Charger la vidéo
video = moviepy.editor.VideoFileClip("/tmp/megamind.avi")
# Créer un générateur de style pour les sous-titres
generateur = lambda texte: moviepy.video.VideoClip.TextClip(
texte,
font='Buxton-Sketch',
fontsize=20,
color='white',
method='caption',
size=video.size,
align='South' # Positionner en bas de la vidéo
)
# Charger les sous-titres
sous_titres = moviepy.video.tools.subtitles.SubtitlesClip(
"/tmp/sous_titres.srt",
make_textclip=generateur
)
# Composer la vidéo finale
video_finale = moviepy.editor.CompositeVideoClip([video, sous_titres])
video_finale.write_videofile("/tmp/video_soustitree.mp4")
align accepte plusieurs valeurs pour positionner le texte : 'North', 'South', 'East', 'West', ou 'Center'.Exemple de sous-titre généré avec MoviePy :

Créer des compositions de plusieurs vidéos
MoviePy permet la création de montages complexes où plusieurs vidéos sont affichées simultanément. Imaginez un écran divisé ou une mosaïque de vidéos :
import moviepy.editor
# Charger plusieurs vidéos et extraire les 4 premières secondes
videos = [
moviepy.editor.VideoFileClip(fichier, audio=False).subclip(0, 4)
for fichier in ["/tmp/video1.avi", "/tmp/video2.avi", "/tmp/video3.avi"]
]
# Redimensionner et positionner chaque vidéo
composition = [
videos[0].resize((360, 132)).set_position((0, 0)),
videos[1].resize((180, 132)).set_position((200, 80)),
videos[2].resize((180, 132)).set_position((0, 400))
]
# Assembler les vidéos
resultat = moviepy.video.compositing.CompositeVideoClip.CompositeVideoClip(
composition,
size=(768, 576)
)
# Ajouter une piste audio
piste_audio = moviepy.editor.AudioFileClip("/tmp/audio.mp3")
resultat.audio = piste_audio
resultat.write_videofile("/tmp/composition.mp4")
Cette technique est particulièrement utile pour créer des tutoriels, des comparaisons côte à côte, ou des écrans divisés dynamiques.
Modifier les images frame par frame
MoviePy peut traiter chaque image individuellement. Cela ouvre la porte à des effets personnalisés illimités :
import moviepy.editor
def modifier_image(lire_image, tps_img):
image = lire_image(tps_img)
# Entre 2 et 3 secondes : inverser les canaux rouge et bleu
if 2 < tps_img < 3:
return image[:, :, [2, 1, 0]]
# Entre 3 et 6 secondes : dessiner un carré rouge qui grandit
if 3 <= tps_img < 6:
img = image.copy()
taille = int((tps_img - 3) * 100)
img[0:taille, 100:100+taille, :] = [255, 0, 0]
return img
# Entre 6 et 9 secondes : faire disparaître le carré
if 6 <= tps_img <= 9:
img = image.copy()
taille = int(300 - (tps_img - 6) * 100)
img[0:taille, 100:100+taille, :] = [255, 0, 0]
return img
return image
# Appliquer la fonction à toute la vidéo
video = moviepy.editor.VideoFileClip("/tmp/megamind.avi")
video_modifiee = video.fl(modifier_image)
video_modifiee.write_videofile("/tmp/video_modifiee.mp4")
À noter :
- les images sont représentées sous forme de tableaux NumPy
- les couleurs sont au format BGR (Bleu, Vert, Rouge) ou RGB selon le contexte
- la fonction reçoit deux paramètres :
lire_image(fonction) ettps_img(temps en secondes)
Exemple de modification localement sur un frame avec MoviePy :

Combiner OpenCV, sounddevice et MoviePy
Pour aller plus loin, vous pouvez créer un système complet d'enregistrement vidéo qui capture simultanément l'image (via OpenCV) et le son (via sounddevice), puis fusionne le tout avec MoviePy.
import cv2
import sounddevice
import soundfile
import moviepy.editor
# 1. Enregistrer la vidéo sans son avec OpenCV
flux_video = cv2.VideoCapture(0)
# ... capture des images ...
# 2. Enregistrer l'audio avec sounddevice/soundfile
with soundfile.SoundFile('audio.wav', mode='w', samplerate=44100) as file:
# ... acquisition audio ...
pass
# 3. Fusionner avec MoviePy
clip_video = moviepy.editor.VideoFileClip('video.avi')
clip_audio = moviepy.editor.AudioFileClip('audio.wav')
clip_video.audio = clip_audio
clip_video.write_videofile('video_finale.mp4')
Cette approche modulaire permet de contrôler finement chaque aspect de l'enregistrement.
Cas d'usage pratiques
MoviePy est particulièrement utile dans les cas suivants :
- Automatisation de contenu : générer automatiquement des vidéos avec des données variables (rapports, visualisations)
- Traitement par lot : ajouter un watermark à des centaines de vidéos
- Création de contenus éducatifs : insérer des annotations, des zones de focus, des sous-titres
- Post-production programmatique : appliquer des filtres ou des effets en fonction de critères spécifiques
- Agrégation de vidéos : créer des compilations, des résumés ou des mosaïques
Conseils et bonnes pratiques
- Performance : Le traitement vidéo est gourmand en ressources. Pour les projets lourds, envisagez d'utiliser des résolutions réduites pendant les tests.
- Gestion mémoire : Fermez toujours vos clips avec
clip.close()pour libérer les ressources. - Codecs : Familiarisez-vous avec les différents codecs disponibles. Le choix du codec impacte la qualité et la taille du fichier final.
- ImageMagick : Pour les fonctionnalités de texte, assurez-vous qu'ImageMagick est correctement installé et configuré, particulièrement sous Windows.
- Versions : MoviePy a évolué. Certaines fonctionnalités (notamment la gestion Unicode sous Windows) varient selon les versions.
Pour aller plus loin : "Python sans détour"
Cet article s'inspire directement du livre Python sans détour de Laurent Berger et Pascal Guézet, publié aux éditions D-BookeR. Ce livre adopte une approche résolument pratique et concrète de Python.
Pourquoi ce livre se démarque
Dans un océan de livres Python, "Python sans détour" fait le pari de l'efficacité immédiate. Plutôt que de vous noyer dans la théorie avant de voir des résultats, les auteurs vous proposent :
- 7 thématiques concrètes : manipulation de fichiers, web scraping, calcul scientifique, traitement multimédia, cartographie, interfaces graphiques et deep learning
- une première partie "guide de survie" : environ 100 pages consultables à la volée selon vos besoins
- 260 pages de pratique intensive avec des exemples réels et motivants
- codes sources complets disponibles sur GitHub
- compatibilité multiplateforme : Windows, macOS, Linux (y compris Raspberry Pi)
Public visé
Le livre s'adresse particulièrement aux :
- Débutants impatients qui veulent rapidement créer des choses intéressantes
- Étudiants et lycéens qui apprennent Python dans un contexte éducatif
- Autodidactes qui préfèrent apprendre par la pratique
- Enseignants en quête d'exemples motivants pour leurs cours
Au-delà de MoviePy
Le chapitre sur MoviePy n'est qu'une partie d'un vaste panorama. Vous découvrirez également comment
- écrire des données dans un tableur avec Pandas
- tracer des courbes avec Matplotlib
- créer des itinéraires interactifs avec Folium
- identifier des objets avec TensorFlow
- construire des interfaces graphiques avec Tkinter et PySimpleGUI
- et bien d'autres choses encore.
Conclusion
MoviePy démontre la puissance de Python dans le domaine du traitement vidéo. Que vous soyez créateur de contenu, data scientist, ou simplement curieux, cet outil ouvre des possibilités créatives fascinantes.
Pour maîtriser MoviePy et bien d'autres bibliothèques Python essentielles,"Python sans détour" constitue un excellent compagnon. Sa philosophie pragmatique et ses exemples concrets vous permettront de passer rapidement de l'idée à la réalisation.
