📌 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, constantes
  • QtGui : 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 unique
  • name : nom de l’effet
  • description : texte descriptif (peut être chargé depuis un modèle)
  • start_time, end_time : début et fin en millisecondes
  • track : 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 nom
  • QTextEdit pour la description
  • Bouton Charger Modèle : ouvre un QFileDialog dans MODEL_DIR
  • Boutons OK/Annuler

Méthodes :

  • load_template_file() : insère le contenu d’un modèle texte dans la description
  • get_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 lecture
  • effect_double_clicked(object) : édition d’un effet
  • effect_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ée modeles/ si absent
  • load_video() : ouvre une vidéo (MP4, MOV, AVI)
  • save_project() : sauvegarde en JSON (.videff)
  • load_project() : recharge un projet JSON avec effets
  • add_effect() : ajoute un effet à l’instant courant
  • edit_effect(effect) : modifie un effet existant
  • delete_effect() : supprime l’effet sélectionné
  • play_pause(), restart_video() : contrôle de lecture
  • update_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

  1. Menu Fichier → Charger une Vidéo…
  2. Sélectionner un fichier vidéo (formats supportés : .mp4, .mov, .avi)
  3. La vidéo s’affiche dans la partie supérieure.

À ce stade, les options Ajouter un Effet deviennent actives.


3. ➕ Ajouter un effet

  1. Lire la vidéo et mettre en pause au moment voulu (ou se déplacer sur la timeline).
  2. Menu Édition → Ajouter un Effet.
  3. 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/.
  4. 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

  1. Menu Fichier → Enregistrer le Projet
  2. 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

  1. Menu Fichier → Ouvrir un Projet…
  2. Sélectionner un fichier .json.
  3. 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 :

  1. Charger une vidéo demo.mp4.
  2. Ajouter un effet Titre à 00:05s.
  3. Charger un modèle intro.txt depuis le dossier modeles/.
  4. Déplacer l’effet sur la piste 2.
  5. Ajouter un second effet Fin à 01:10s.
  6. 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 :

  1. Cliquer sur Charger Modèle…
  2. Sélectionner un fichier dans modeles
  3. Le contenu est inséré automatiquement dans la description de l’effet.

Source

Python

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *