Pipeline
Comment ça marche
Six étapes, un pipeline déterministe : de l'import brut à la vidéo YouTube publiée.
01
Ingestion
Point d'entrée du pipeline. Les médias (vidéos et pistes audio) sont importés via l'interface web ou la CLI, puis soumis à une validation technique avant d'être acceptés dans le système.
- →Formats vidéo supportés : MP4, MKV, MOV, AVI, WebM
- →Formats audio supportés : MP3, WAV, FLAC, AAC, OGG
- →Validation via FFprobe : codec, durée, résolution, bitrate
- →Statuts :
pending→readyouerror - →Import via CLI :
app:video:import,app:audio:import - →Import via yt-dlp pour les sources en ligne
02
Détection
Chaque vidéo importée est découpée automatiquement en scènes distinctes. FFmpeg analyse les changements de frame pour détecter les coupures, puis chaque scène est extraite avec ses timecodes précis.
- →Algorithme : détection de scènes par seuil de différence de frames
- →Paramètre de sensibilité configurable par vidéo
- →Extraction des timecodes start/end pour chaque scène
- →Génération automatique de thumbnails par scène
- →Filtres de durée min/max pour écarter les scènes inutilisables
- →CLI :
app:scene:detect {videoId}
03
Analyse
Double analyse de chaque scène : rythme et énergie audio via Essentia, contenu visuel via un modèle de vision. Ces scores permettront ensuite de sélectionner les scènes les plus adaptées à un audio donné.
- →Analyse audio : BPM, énergie, danceability via Essentia
- →Analyse audio des pistes : point de départ optimal (drop, intro)
- →Vision IA : classification du type de scène (action, dialogue, paysage…)
- →Score de dynamisme calculé par scène
- →Traitement asynchrone via Symfony Messenger
- →CLI :
app:scene:analyse,app:audio:analyse
04
Curation
Enrichissement des métadonnées depuis des sources externes. Les vidéos sont rattachées à leurs œuvres via TMDB, les audios à leurs artistes via Spotify. La curation manuelle reste possible pour affiner les données.
- →TMDB : titre, année, genre, synopsis, poster, note
- →Spotify : artiste, album, popularité, genres musicaux
- →yt-dlp : récupération de métadonnées YouTube à l'import
- →Curation manuelle via l'interface web (inclusion/exclusion de scènes)
- →Tags et filtres personnalisés par scène
05
Génération
Le cœur du pipeline. À partir des paramètres définis (durée cible, nombre de scènes, audio choisi, mode de sélection), RANDM sélectionne les scènes, les ordonne, les coupe sur les temps forts et assemble le trailer final via FFmpeg.
- →Mode beat-sync : découpe calée sur les temps forts de l'audio
- →Sélection pondérée par scores d'analyse (énergie, dynamisme)
- →Ordering configurable : aléatoire, chronologique, par score
- →Concaténation et rendu final via FFmpeg avec filtres
- →Suivi asynchrone via Symfony Messenger + statuts en temps réel
- →CLI :
app:trailer:generate {trailerId}
06
Diffusion
Une fois rendu, le trailer peut être publié sur YouTube directement depuis l'interface. L'upload est asynchrone, le titre et la description sont générés automatiquement à partir des métadonnées.
- →Upload via YouTube Data API v3
- →Titre et description générés depuis les métadonnées des scènes
- →Visibilité configurable : public, non répertorié, privé
- →Suivi du statut d'upload et récupération de l'URL YouTube
- →CLI :
app:trailer:upload {trailerId}