Générateur de vidéos musicales réactives — local, rapide, sans abonnement.
Transforme n'importe quel fichier audio en vidéo visualisée frame par frame,
synchronisée beat par beat, exportée en qualité broadcast.
Audio ──► Analyse librosa ──► Features (bass / kick / rms / spec / raw)
│
Rendu OpenCV + PIL 30 fps
┌────────────────────┼────────────────────┐
│ Spectre │ Atmosphère │
│ Pochette │ Particules │
│ Texte │ Vinyle │
│ Fond │ Glow / Vignette │
└────────────────────┴────────────────────┘
│
FFmpeg ──► MP4 (NVENC GPU · libx264 CPU)
| Composant | Détail |
|---|---|
| 10 styles de spectre | Barres premium · Barres néon · Symétrie miroir · Cercle radial · Arc plasma · Onde plasma · Waveform miroir · Oscilloscope · Ligne fine · Cercle + barres |
| Spectre tricolor | 3 bandes indépendantes (bass · mid · high) avec flash réactif aux kicks |
| 7 effets atmosphère | Aucune · Légère · Cinématique · Dense · Voiles · Lueur ambiante · Traces plasma |
| Particules | 5 presets · cycle de vie · fade in/out · drift organique · bloom two-pass |
| Disque vinyle | Rotatif · réactif aux beats · gradient radial + sillons colorisés · arc spéculaire · ombre dynamique kick · rim light aigus · label vignette · tailles disque/pochette indépendantes · 19 paramètres |
| Fond | Photo floue · Dégradé · Image perso · Fond flottant · Micro-oscillation |
| Texte | Artiste + Titre + Sous-titre · 12+ polices · taille · position XY · ombre paramétrable |
| Mode | Comportement |
|---|---|
📷 Photo floue |
La pochette album est utilisée comme fond, floutée et assombrie |
🌈 Dégradé |
Fond uni deux couleurs, personnalisable via color pickers |
📂 Image perso |
Image de fond indépendante de la pochette, avec flou et luminosité |
| Mode | Résolution | Durée | Usage |
|---|---|---|---|
| SHORT | 1080 × 1920 | ~1 min (centre audio) | Reel · Story · Short |
| VERTICAL | 1080 × 1920 | Fichier entier | Vertical complet |
| COMPLET | 1920 × 1080 | Fichier entier | Publication finale |
| DUAL | 1920×1080 + 1080×1920 | Complet + ~1 min | Les deux en un seul export |
- Encodage GPU automatique (NVIDIA NVENC) si disponible, sinon CPU libx264
- Preview live 30 fps dans l'éditeur avant export
- Historique des exports avec miniatures
| Preset | Style | Ambiance |
|---|---|---|
| Dark Premium | Cercle radial | Cinématique sombre |
| Clean White | Barres premium | Épuré lumineux |
| Neon Club | Barres néon | Club · Énergie |
| Reggae Smoke | Arc plasma tricolor | Rouge · Jaune · Vert |
| Chill Lo-Fi | Onde plasma | Doux · Relaxant |
| Short Vertical | Symétrie miroir | Format 9:16 |
| Vinyl Classic | Barres premium | Vinyle noir · Dégradé |
| Vinyl Gold | Cercle + barres | Vinyle doré · Flottant |
| Acid Wave | Oscilloscope | Vert néon · Dégradé |
| Purple Dream | Cercle radial | Vinyle · Violet |
| Midnight Vinyl | Symétrie miroir | Vinyle · Bleu nuit |
| Neon Tricolor | Barres néon | Rose · Violet · Cyan |
| Sunrise | Symétrie miroir | Orange · Or |
Les presets intégrés sont cachables individuellement et restaurables en un clic.
Les presets personnels sont sauvegardables, étoilables (★) et supprimables.
- Windows 10 / 11
- Python 3.11+ — python.org
- FFmpeg (avec
ffplay) — gyan.dev/ffmpeg/builds
Installer FFmpeg (étapes)
- Télécharger
ffmpeg-release-essentials.zip - Extraire dans
C:\ffmpeg\ - Ajouter
C:\ffmpeg\binau PATH Windows :Démarrer→ Variables d'environnement →Path→ Nouveau →C:\ffmpeg\bin
- Vérifier dans un terminal :
ffmpeg -version
git clone https://github.com/DoktorP3st/TAC-MP4-Studio
cd TAC-MP4-Studio
pip install -r requirements.txt
python main.pyOu via le lanceur Windows :
double-clic sur TAC.bat
1. ✦ NOUVELLE CRÉATION
2. Importer un fichier audio MP3 · WAV · FLAC · OGG · M4A · AAC · WMA
3. Importer une pochette PNG · JPG · WEBP · BMP
4. Régler les visuels
5. 🚀 Export → nommer → choisir le mode → GÉNÉRER
| Onglet | Contenu |
|---|---|
| ⚡ Presets | Bibliothèque unifiée intégrés + perso · favoris · sauvegarde · suppression |
| 📸 Image | Taille pochette · Réactivité · Vinyle · Fond (flou · luminosité · dégradé · image perso · oscillation) |
| ✨ Effets | Particules · Atmosphère · Couleur atmosphère |
| 📊 Spectre | Style · Taille · Position · Couleur mono ou 3 bandes · Flash beats |
| 📝 Texte | Artiste · Titre · Sous-titre · Police · Taille · Position · Ombre |
| 🚀 Export | Dossier de sortie · Mode (grille 2×2) · Génération |
| Touche | Action |
|---|---|
Espace |
Play / Pause preview audio |
R |
Recharger la preview |
Échap |
Retour accueil |
TAC-MP4-Studio/
│
├── main.py Point d'entrée
├── TAC.bat Lanceur Windows
├── requirements.txt
│
├── img/ Assets (logo, disque vinyle, icône)
├── fonts/ Polices TTF incluses (Liberation, Carlito, Caladea)
│
└── app/
├── audio.py Analyse audio — librosa · soundfile · scipy
├── config.py Persistance JSON — AppData (écriture atomique)
├── errors.py Exceptions métier — TACError et sous-classes
├── exporter.py Pipeline export — rendu + FFmpeg
├── loading.py Écran de chargement animé
├── logger.py Logging centralisé — fichier rotatif + console
├── models.py RenderSettings (dataclass)
├── particles.py Particules · Fumée · Voiles · Plasma · Lueur
├── presets.py Constantes · Presets visuels · Palettes
├── renderer.py Rendu frame — image · texte · fond · vignette · glow
├── spectrum.py 10 styles de spectre + orbe audio
├── vinyl.py Disque vinyle rotatif + pochette
│
└── ui/
├── app.py App — état · lifecycle · navigation · éditeur
├── editor.py EditorMixin — onglets + callbacks + gestion presets
├── pages.py PagesMixin — accueil · historique · turbo
├── preview.py PreviewMixin — preview live · waveform · audio
└── widgets.py Widgets réutilisables
App
├─ EditorMixin · PagesMixin · PreviewMixin
├─ renderer ──► spectrum · vinyl · particles
├─ exporter ──► renderer · audio
├─ errors · logger
└─ config · models · presets
Chaque composant utilise des exceptions métier typées. Les messages utilisateur sont affichés en popup, les détails techniques sont loggués dans :
%APPDATA%\DoktorP3st\TAC_MP4\logs\tac.log
| Exception | Déclencheur |
|---|---|
AudioImportError |
Fichier absent · format invalide · lecture librosa échouée |
ImageImportError |
Image absente · corrompue · format non supporté |
FFmpegError |
FFmpeg introuvable · crash encodage |
ExportError |
Dossier absent · permission refusée · export interrompu |
ConfigError |
Config JSON corrompue · écriture impossible |
PreviewError |
Crash preview · widget détruit · callback tardif |
RenderError |
Dimensions invalides · erreur OpenCV frame |
PresetError |
Preset invalide ou incomplet |
Sauvegarde automatique dans :
%APPDATA%\DoktorP3st\TAC_MP4\config.json
Dossier de sortie par défaut (modifiable dans l'app) :
%APPDATA%\DoktorP3st\TAC_MP4\Creations\
pip install pyinstaller
pyinstaller --onefile --windowed --name "TAC_MP4_Studio" ^
--add-data "img;img" ^
--add-data "fonts;fonts" ^
--collect-data customtkinter ^
--collect-data tkinterdnd2 ^
--icon "img/icone.ico" ^
main.pyLe .exe se trouve dans dist/TAC_MP4_Studio.exe.
FFmpeg doit être installé séparément sur la machine cible.
| Lib | Rôle |
|---|---|
numpy |
Calcul vectorisé — audio et rendu |
opencv-python |
Pipeline vidéo frame par frame |
Pillow |
Traitement image · texte · polices |
librosa |
Analyse audio (STFT · onset · RMS) |
soundfile |
Chargement WAV/FLAC/OGG (fast path) |
scipy |
Resampling audio · interpolation |
customtkinter |
Interface dark theme moderne |
tkinterdnd2 |
Drag & drop fichiers (optionnel) |
FFmpeg |
Encodage MP4 (NVENC / libx264) |
- Gradient radial sur le corps du disque (8 → 36 gris, teinte couleur dominante de la pochette)
- Sillons concentriques colorisés (nombre, teinte, contraste réglables)
- Arc spéculaire à position fixe — reflet de source de lumière naturelle, réactif aux basses
- Ombre dynamique sous le disque, blur qui s'intensifie sur les kicks
- Label vignette — bords assombris + anneau de séparation label/sillons
- Rim light sur la pochette — liseré coloré (couleur dominante) réactif aux aigus
- Tailles indépendantes — 2 sliders séparés : Disque / Pochette (non synchronisés)
- 19 nouveaux paramètres dans l'onglet 📸 : Taille · Sillons · Label · Reflet · Ombre · Bordure
- Nouvelle palette Onyx Studio : fonds indigo-noirs (#050507 → #1a1a24), accent indigo #6366f1
- Séparateur header dégradé animé (ACCENT → BORDER → ACCENT horizontal)
- Dot de statut animé : pulse indigo pendant les analyses et exports
- Waveform colorisée : basses indigo, médiums violet clair, aigus blanc doux
- Halo preview : cadre indigo qui s'allume autour de la preview quand elle est active
- Carte succès export : overlay centré avec ✓, nom du fichier, bouton dossier, auto-fermeture 8s
- Suppression du mode plein écran preview (bouton ⛶ et raccourci F11)
- Fix freeze bouton 16:9/9:16 — double render loop résolu via
after_cancel - Fix
_stop_audio()non-bloquant —wait()déporté dans thread daemon
- Onglet ⚡ refactorisé : bibliothèque unifiée intégrés + perso dans une seule liste
- Presets intégrés cachables individuellement (✕) et restaurables en un clic
- Badge intégré / perso · bande couleur · favoris (★) remontent en tête
- Modes d'export redessinés en grille 2×2 : icône + résolution + badge durée
- Sélection d'export colorée par mode (chaque mode a sa propre couleur de bordure)
- Taille de police ajustable par curseur
- Sous-titre indépendant
- Ombre paramétrable : intensité · couleur · décalage XY
- Nouveau mode fond
Image perso: image de fond indépendante de la pochette album - Couche d'erreurs centralisée (
errors.py) avec 8 exceptions métier typées - Logger rotatif (
logger.py) — trace complète danstac.log
- Cache LRU sur
compute_audio_features— refresh preview instantané - Cache disque vinyle (~12 ms/frame économisés)
- Vectorisation numpy de l'oscilloscope
- Redimensionnement preview BILINEAR (~2.5 ms/tick)
- 3 couleurs indépendantes par bande (bass · mid · high)
- Flash couleur synchronisé sur les kicks
- Vinyle rotatif réactif aux beats
- Choix image pochette ou noir classique
- Fond dégradé avec color pickers
- Historique des exports avec miniatures
- Mode plein écran preview
Développé par DoktorP3st