music-video
Transformez une chanson finie en clip vidéo à 24 images par seconde. La chanson est l'audio maître. Les intervalles des scènes la couvrent exactement une fois.
Déclencheurs
- music video / MV / lyric video / visualizer / storyboard
- 音乐视频 / MV合成 / 歌词动画 / 歌曲动画
Capacités
code: initialiser un projet p5.js et p5.brush épinglé, puis animer la chanson en JavaScript.hybrid: inspecter les images de personnages, les scènes fixes et les clips vidéo locaux, puis les assembler. Aucune API de génération d'images ou de vidéos n'est appelée.- Analyse locale du beat, des onsets, des basses fréquences et de la loudness pour les points de coupe et les indices d'animation.
- Assemblage image par image avec la chanson originale comme seule bande sonore.
Entrées
Obligatoire :
song: audio local (.mp3,.wav,.m4a,.flac,.ogg,.aac)brief: l'idée visuelle, le public cible et toute référence nécessairemode:codeouhybrid
Optionnel :
lyrics: texte ou.srt. Requis avant le storyboard lorsque le timing vocal compte.assets: répertoire d'images et de clips pourhybridaspect:16:9(par défaut),9:16,1:1ou4:3
Si l'utilisateur souhaite d'abord créer une chanson, utilisez text-to-music, puis revenez ici avec le fichier choisi.
Sorties
<project>/output/final.mp4docs/CREATIVE_BRIEF.md,docs/STORYBOARD.md,docs/TASKS.mdetdocs/PROGRESS.mdaudio/analysis.json, etdocs/inspect.jsonlorsque les assets existent
Workflow
Exécutez python3 skills/music-video/scripts/mv.py depuis la racine du dépôt. Si cette compétence est installée ailleurs, utilisez le scripts/mv.py à côté de ce fichier. Créez le projet en dehors du répertoire de la compétence.
- Choisissez
codelorsque la vidéo est dessinée en JavaScript. Choisissezhybridlorsque l'utilisateur fournit des images ou des clips. Demandez une fois lorsque ni l'un ni l'autre n'est clair. - Initialisez un projet isolé :
python3 skills/music-video/scripts/mv.py init \
--project ./mv-project --song ./song.mp3 --lyrics ./lyrics.txt --mode code
python3 skills/music-video/scripts/mv.py init \
--project ./mv-project --song ./song.mp3 --lyrics ./lyrics.srt \
--assets ./clips --mode hybrid --aspect 16:9
- Analysez la chanson. Traitez les changements de tempo comme approximatifs et confirmez les limites des sections à partir de l'audio :
python3 skills/music-video/scripts/mv.py analyze --project ./mv-project
- Obtenez le timing des paroles. Si l'utilisateur ne l'a pas fourni, utilisez speech-to-text uniquement si
NOIZ_API_KEYou~/.config/noiz/api_keyexiste déjà. N'imprimez jamais la clé. Si aucune des deux n'existe, demandez les paroles ou les timestamps et ne téléchargez pas la chanson. - Lisez references/opus-5.5-prompt.md et suivez-le. Rédigez le brief créatif et le storyboard avant le code de la scène ou l'assemblage. Revoyez l'ouverture et le pic principal avant de construire les autres chapitres.
- En mode
code, lisez<project>/animation/ANIMATION_GUIDE.mdavant de dessiner. DéfinissezPROJECT.bpmetPROJECT.offsetà partir deaudio/analysis.json. Le modèle de toile épinglé est 1920×1080 ; modifiezstudio.htmlet la fenêtre du rendu avant d'utiliser un autre format. Vérifiez le mouvement avec le rendu du modèle :
node render.mjs --sheet=1,2,3 --out=../output/sheets/pilot.jpg
node render.mjs --strip=START:END --out=../output/sheets/pilot-motion.jpg
node render.mjs --clip --range=START:END --out=../output/pilots/opening.mp4
Exécutez ces commandes dans <project>/animation. Passez --chrome ou définissez CHROME_PATH lorsque Chrome n'est pas dans un emplacement standard. Un planche contact ne fait que vérifier la disposition. Un --strip, ou la lecture de l'ouverture, du pic et de la fin, est la revue de mouvement.
7. En mode hybrid, inspectez les médias locaux et arrêtez-vous si un clip requis est manquant. Ne générez pas de remplacement.
python3 skills/music-video/scripts/mv.py inspect --project ./mv-project
- Écrivez
timeline.jsonen utilisant references/timeline.schema.json. Les intervalles sont inclusifs àstart_frameet exclusifs àend_frame. - Assemblez et sondez le résultat :
python3 skills/music-video/scripts/mv.py assemble --project ./mv-project
Timeline
{
"fps": 24,
"width": 1920,
"height": 1080,
"audio": "audio/source.mp3",
"scenes": [
{
"id": "opening",
"start_frame": 0,
"end_frame": 240,
"source": "output/pilots/opening.mp4",
"source_start": 0,
"fit": "cover",
"transition": "fade",
"fade_frames": 6
}
],
"overlays": []
}
fade reste à l'intérieur de sa propre scène. Ne chevauchez pas les scènes pour créer un crossfade.
Achèvement
Terminez uniquement lorsque chaque élément est vrai :
[0, ceil(duration × 24))est couvert exactement une fois, sans trou ni chevauchement.final.mp4a un flux vidéo et la chanson originale complète.- L'ouverture, le pic principal et la fin ont été revus en mouvement.
- La dernière histoire lue a le temps de se poser.
docs/PROGRESS.mdn'a aucun blocage ouvert.
Sécurité
init --mode code clone JohnHeibel/ClaudeAnimationBase au commit 0ac8bf2b31942376cb6b8c4074715595d512acd2 dans le projet. Ce modèle est sous licence MIT. L'analyse, l'inspection, le rendu et l'assemblage restent locaux. Le mode hybride ne télécharge pas de médias et n'appelle aucun service de génération d'images, de vidéos ou de musique.
Prérequis
ffmpegetffprobe- Python 3.9+
analyze:uv pip install 'numpy>=2,<3'- Mode
code:git, Node.js et Google Chrome - Mode
hybrid: assets locaux uniquement
Limitations
- Cette compétence ne compose pas de musique, ne génère pas d'effets sonores et ne crée pas d'images ou de vidéos via une API.
- La grille de beat suppose un tempo globalement stable.
- Les remplissages aquarelle en mode code peuvent prendre plusieurs secondes par image sans GPU dédié. Demandez au rendu d'éviter ces remplissages sur les graphiques intégrés.
- L'assemblage rejette un clip plus court que sa scène au lieu de le figer ou de le retimer.