MoviePy : monte et sous-titre tes vidéos en Python, sans logiciel de montage

MoviePy : monte et sous-titre tes vidéos en Python, sans logiciel de montage

De quoi avez-vous besoin

Version de Python

3.x

Packages

  • {"nom":"moviepy","version":"2.x"}

Difficulté

Débutant

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
python -m venv .venv
source .venv/bin/activate
pip install moviepy

Pour vérifier que tout est en place :

python
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 :

python
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.

python
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 :

python
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 :

python
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.

python
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 :

python
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.

python
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.