📌 Présentation
Ce projet est une application graphique développée en Python avec PySide6.
Elle permet de charger une vidéo, d’y ajouter des effets visuels temporisés, de les positionner sur une frise chronologique (timeline) multi-pistes, puis de sauvegarder/charger des projets au format JSON.
Une fonctionnalité de chargement de modèles (templates) est également intégrée pour réutiliser rapidement des descriptions d’effets stockées dans des fichiers texte.

⚙️ Dépendances
Installer les bibliothèques nécessaires avant d’exécuter le script :
pip install PySide6
Le script utilise les modules standards de Python :
sys
,json
,os
Et les modules PySide6 :
QtCore
: gestion des signaux/slots, géométrie, constantesQtGui
: gestion des événements souris, dessin (QPainter)QtWidgets
: interface graphique (QMainWindow, QWidget, QPushButton, etc.)QtMultimedia
: lecture audio/vidéo (QMediaPlayer
)QtMultimediaWidgets
: rendu vidéo (QVideoWidget
)
📂 Organisation du Code
1. Constantes
MODEL_DIR = "modeles"
: répertoire contenant les modèles d’effets (fichiers.txt
).
2. Classe Effect
Représente un effet placé sur la timeline.
Attributs principaux :
uid
: identifiant uniquename
: nom de l’effetdescription
: texte descriptif (peut être chargé depuis un modèle)start_time
,end_time
: début et fin en millisecondestrack
: piste (ligne de la timeline)rect
: rectangle affiché sur la timeline- États d’interaction :
is_resizing_left
,is_resizing_right
,is_moving
3. Classe EffectDialog
Fenêtre modale pour ajouter ou modifier un effet.
Composants :
QLineEdit
pour le nomQTextEdit
pour la description- Bouton Charger Modèle : ouvre un
QFileDialog
dansMODEL_DIR
- Boutons OK/Annuler
Méthodes :
load_template_file()
: insère le contenu d’un modèle texte dans la descriptionget_data()
: retourne(name, description)
4. Classe TimelineWidget
Widget personnalisé représentant la frise chronologique.
Fonctionnalités :
- Affichage des pistes (par défaut 3)
- Placement et dessin des effets colorés
- Affichage de la tête de lecture (playhead)
- Ajout/suppression de pistes
- Conversion temps ↔︎ position en pixels
- Gestion des événements souris :
- Sélection d’un effet
- Déplacement horizontal (temps) et vertical (piste)
- Redimensionnement gauche/droite
- Double-clic → ouverture de l’éditeur d’effet
Signaux émis :
position_seek_requested(int)
: repositionner la lectureeffect_double_clicked(object)
: édition d’un effeteffect_selected(object)
: sélection dans l’UI
5. Classe MainWindow
Fenêtre principale de l’application.
Composants :
- QMediaPlayer + QVideoWidget pour afficher la vidéo
- TimelineWidget dans un
QScrollArea
(scroll horizontal/vertical) - Boutons pour ajouter/supprimer des pistes
- Contrôles multimédia : lecture/pause, restart, label de temps
- Menu :
- Fichier : Charger vidéo, Enregistrer projet, Ouvrir projet, Quitter
- Édition : Ajouter un effet, Supprimer l’effet sélectionné
Méthodes principales :
_ensure_model_dir_exists()
: créemodeles/
si absentload_video()
: ouvre une vidéo (MP4, MOV, AVI)save_project()
: sauvegarde en JSON (.videff
)load_project()
: recharge un projet JSON avec effetsadd_effect()
: ajoute un effet à l’instant courantedit_effect(effect)
: modifie un effet existantdelete_effect()
: supprime l’effet sélectionnéplay_pause()
,restart_video()
: contrôle de lectureupdate_play_button_icon(state)
,update_time_label(position)
: mise à jour UI
📝 Format du projet JSON
Un fichier projet contient :
{
"video_path": "chemin/vers/video.mp4",
"effects": [
{
"name": "Titre",
"description": "Description de l'effet",
"start_time": 1000,
"end_time": 2000,
"track": 0
}
]
}
▶️ Exécution
Lancer l’application :
python main.py
🚀 Fonctionnalités Clés
- Lecture et visualisation de vidéo
- Ajout de plusieurs effets visuels synchronisés avec la vidéo
- Organisation des effets sur plusieurs pistes
- Redimensionnement et déplacement interactif à la souris
- Sauvegarde/chargement de projets
- Insertion de modèles d’effets depuis des fichiers texte externes
📌 Limitations & Améliorations possibles
- Pas d’export vidéo final (seulement un éditeur visuel)
- Pas de gestion avancée des effets (uniquement texte et temps)
- Améliorations envisageables :
- Ajout de raccourcis clavier
- Exportation des effets en overlay vidéo
- Personnalisation des couleurs d’effets
- Undo/Redo
Tutoriel pas à pas
Ce guide explique comment utiliser l’application pour créer, gérer et sauvegarder des effets vidéo.
1. 📂 Lancer l’application
Dans un terminal, exécuter :
python main.py
Une fenêtre s’ouvre avec deux zones principales :
- En haut : la vidéo (QVideoWidget)
- En bas : la frise chronologique (timeline) et les contrôles
2. 🎥 Charger une vidéo
- Menu Fichier → Charger une Vidéo…
- Sélectionner un fichier vidéo (formats supportés :
.mp4
,.mov
,.avi
) - La vidéo s’affiche dans la partie supérieure.
À ce stade, les options Ajouter un Effet deviennent actives.
3. ➕ Ajouter un effet
- Lire la vidéo et mettre en pause au moment voulu (ou se déplacer sur la timeline).
- Menu Édition → Ajouter un Effet.
- Une fenêtre s’ouvre :
- Nom de l’effet : saisir un titre (ex. Texte d’intro)
- Description : écrire un texte ou cliquer sur Charger Modèle… pour importer un fichier depuis le dossier
modeles/
.
- Valider avec OK.
L’effet apparaît sur la timeline, sous forme de bloc coloré.
Il occupe par défaut 1 seconde ou jusqu’à la fin de la vidéo.
4. ✏️ Modifier un effet
- Double-clic sur un bloc d’effet → fenêtre d’édition.
- Modifier le nom et la description.
- Valider avec OK.
5. 🎚️ Manipuler les effets
- Sélectionner un effet : cliquer dessus.
- Déplacer : cliquer-glisser le bloc pour le changer de moment ou de piste.
- Redimensionner : déplacer le curseur proche du bord gauche/droit puis cliquer-glisser.
- Supprimer : Menu Édition → Supprimer l’Effet Sélectionné.
6. 🎼 Gérer les pistes
- Ajouter une piste : bouton
+
à gauche de la timeline. - Supprimer une piste : bouton
-
(possible uniquement si la piste est vide).
7. 💾 Sauvegarder et recharger un projet
Sauvegarde
- Menu Fichier → Enregistrer le Projet
- Donner un nom au fichier (ex.
projet.json
).
Le fichier JSON contient :
- Chemin de la vidéo
- Liste des effets avec leur nom, description, temps et piste
Chargement
- Menu Fichier → Ouvrir un Projet…
- Sélectionner un fichier
.json
. - La vidéo et les effets sont rechargés.
8. ▶️ Contrôles de lecture
- Lecture/Pause : bouton à gauche (ou raccourci depuis la timeline).
- Revenir au début : bouton skip backward.
- Avancer/Reculer manuellement : cliquer dans l’entête de la timeline.
Un label indique la position courante et la durée totale au format mm:ss.mmm
.
9. 📑 Exemple concret
Étapes :
- Charger une vidéo
demo.mp4
. - Ajouter un effet Titre à
00:05s
. - Charger un modèle
intro.txt
depuis le dossiermodeles/
. - Déplacer l’effet sur la piste 2.
- Ajouter un second effet Fin à
01:10s
. - Sauvegarder le projet sous
demo.json
.
Résultat dans demo.json
:
{
"video_path": "demo.mp4",
"effects": [
{
"name": "Titre",
"description": "Texte du modèle intro...",
"start_time": 5000,
"end_time": 6000,
"track": 1
},
{
"name": "Fin",
"description": "",
"start_time": 70000,
"end_time": 71000,
"track": 0
}
]
}
✅ Résumé
Avec cet outil, vous pouvez :
- Charger une vidéo
- Ajouter et organiser des effets sur plusieurs pistes
- Modifier et supprimer les effets
- Sauvegarder/recharger vos projets
- Réutiliser des descriptions via des modèles
Cela en fait un éditeur léger pour synchroniser des annotations ou des effets avec une vidéo.
Exemples de modèles pour le dossier modeles
Ces fichiers peuvent être placés dans le dossier modeles
de ton projet.
Ils sont ensuite réutilisables lors de l’ajout d’un effet via le bouton Charger Modèle….
1. intro.txt
=== INTRODUCTION ===
Titre : Présentation
Texte : Bienvenue dans cette vidéo.
Durée : 5 secondes
Effet : Fondu en ouverture
----------------------
2. transition.txt
=== TRANSITION ===
Texte : Passage à la section suivante.
Effet : Glissement gauche → droite
Durée : 3 secondes
----------------------
3. highlight.txt
=== HIGHLIGHT ===
Texte : ATTENTION - point important !
Effet : Clignotement rapide
Couleur: Jaune
Durée : 4 secondes
----------------------
4. fin.txt
=== FIN ===
Texte : Merci d’avoir regardé !
Effet : Fondu en fermeture
Durée : 6 secondes
----------------------
5. credits.txt
=== CRÉDITS ===
Titre : Remerciements
Texte : Montage réalisé avec l'Éditeur d'Effets Vidéo Simplifié
Effet : Défilement vers le haut
Durée : 10 secondes
----------------------
📂 Organisation recommandée
/projet-video/
├── main.py
├── projet.json
└── modeles/
├── intro.txt
├── transition.txt
├── highlight.txt
├── fin.txt
└── credits.txt
✅ Utilisation
Lors de l’ajout d’un effet :
- Cliquer sur Charger Modèle…
- Sélectionner un fichier dans
modeles
- Le contenu est inséré automatiquement dans la description de l’effet.
0 commentaire