Découper une vidéo, la recadrer au format vertical, y poser un titre ou des sous-titres : on croit qu'il faut Premiere ou CapCut. Faux. MoviePy, une bibliothèque Python, fait tout ça en quelques lignes de code. Son intérêt n'est pas de remplacer ton éditeur préféré, mais d'automatiser ce qui te prend des heures à la main. Cent vidéos à recadrer pour les shorts ? Un seul script, et c'est plié.
Dans ce tutoriel, tu vas installer MoviePy, découper un extrait, assembler des clips, poser du texte, changer la vitesse et exporter le résultat. Tout le code tourne sur n'importe quel PC équipé de Python 3.
1. Installer MoviePy
MoviePy délègue l'encodage à FFmpeg, qu'il embarque automatiquement via la dépendance imageio-ffmpeg. Pas besoin de l'installer à la main. Crée un environnement propre et installe le paquet :
python -m venv .venv
source .venv/bin/activate
pip install moviepyPour vérifier que tout est en place :
from moviepy import VideoFileClip
print("MoviePy prêt")2. Découper un extrait
Prends une vidéo, par exemple vacances.mp4, et garde uniquement la partie entre la 10e et la 30e seconde. subclipped reçoit le début et la fin en secondes :
from moviepy import VideoFileClip
clip = VideoFileClip("vacances.mp4").subclipped(10, 30)
clip.write_videofile("extrait.mp4")write_videofile encode le fichier. Si tu viens de l'ancienne version de MoviePy (1.x), c'est subclip au lieu de subclipped : la bibliothèque a renommé ses méthodes en 2024.
3. Assembler plusieurs clips
Concaténer des vidéos se fait avec concatenate_videoclips. Attention : les clips doivent partager la même résolution et le même framerate, sinon MoviePy lève une erreur.
from moviepy import VideoFileClip, concatenate_videoclips
part1 = VideoFileClip("part1.mp4")
part2 = VideoFileClip("part2.mp4")
montage = concatenate_videoclips([part1, part2])
montage.write_videofile("montage.mp4")4. Poser du texte et des sous-titres
TextClip crée un calque de texte, que tu superposes à la vidéo avec CompositeVideoClip. with_duration fixe la durée d'affichage, with_position son emplacement :
from moviepy import VideoFileClip, TextClip, CompositeVideoClip
clip = VideoFileClip("extrait.mp4")
titre = (
TextClip("Vacances 2026", font_size=60, color="white",
font="DejaVu-Sans-Bold")
.with_duration(3)
.with_position(("center", "top"))
)
final = CompositeVideoClip([clip, titre])
final.write_videofile("avec_titre.mp4")Pour des sous-titres dynamiques, génère un TextClip par phrase et place-les à la bonne seconde avec with_start. La police DejaVu-Sans est présente sur la plupart des systèmes Linux.
5. Recadrer au format vertical (9:16)
Les shorts et les stories imposent le format portrait. Croppe au centre, puis redimensionne à la résolution cible :
from moviepy import VideoFileClip
clip = VideoFileClip("paysage.mp4")
largeur, hauteur = 1080, 1920
cadre = clip.cropped(
x_center=clip.w / 2,
y_center=clip.h / 2,
width=clip.h * 9 / 16,
height=clip.h,
)
vertical = cadre.resized((largeur, hauteur))
vertical.write_videofile("vertical.mp4")6. Accélérer ou ralentir
with_speed_scaled multiplie la vitesse : 2.0 pour deux fois plus rapide, 0.5 pour moitié moins vite.
from moviepy import VideoFileClip
clip = VideoFileClip("extrait.mp4")
rapide = clip.with_speed_scaled(2.0)
rapide.write_videofile("rapide.mp4")7. Extraire l'audio
Besoin de la bande-son seule pour un podcast ? Une ligne suffit :
from moviepy import VideoFileClip
clip = VideoFileClip("extrait.mp4")
clip.audio.write_audiofile("piste.mp3")8. Le script complet
Voici un pipeline qui enchaîne tout : découper, titrer, accélérer et exporter en vertical.
from moviepy import VideoFileClip, TextClip, CompositeVideoClip
clip = VideoFileClip("vacances.mp4").subclipped(0, 20)
titre = (
TextClip("Best of", font_size=70, color="white", font="DejaVu-Sans-Bold")
.with_duration(4)
.with_position(("center", "center"))
)
resultat = (
CompositeVideoClip([clip.with_speed_scaled(1.5), titre])
.resized((1080, 1920))
)
resultat.write_videofile("best_of_vertical.mp4")MoviePy ne remplacera pas un vrai logiciel de montage pour les projets créatifs, mais pour tout ce qui est répétitif (recadrage, sous-titres, normalisation de volume), c'est imbattable. Écris ton script une fois, et traite tes vidéos par centaines pendant la pause café. La documentation couvre aussi les transitions, les masques et les effets de fondu, quand tu voudras aller plus loin.
Prochaine étape logique : brancher MoviePy sur un pipeline qui reçoit des clips d'une API, les assemble et les publie. L'automatisation, c'est ça, la vraie force de Python.






