music-video
완성된 한 곡을 24fps의 음악 비디오로 변환합니다. 노래가 마스터 오디오입니다. 장면 간격은 노래를 정확히 한 번 커버합니다.
트리거
- music video / MV / lyric video / visualizer / storyboard
- 音乐视频 / MV合成 / 歌词动画 / 歌曲动画
기능
code: 고정된 p5.js 및 p5.brush 프로젝트를 초기화하고 JavaScript로 노래를 애니메이션화합니다.hybrid: 로컬 캐릭터 이미지, 장면 스틸, 비디오 클립을 검사한 후 조합합니다. 이미지나 비디오 생성 API를 호출하지 않습니다.- 로컬 비트, 온셋, 저주파, 음량 분석을 통해 컷 포인트와 애니메이션 큐를 제공합니다.
- 원본 노래를 유일한 사운드트랙으로 하는 프레임 정확한 조립.
입력
필수:
song: 로컬 오디오 (.mp3,.wav,.m4a,.flac,.ogg,.aac)brief: 시각적 아이디어, 대상 청중, 필요한 참고 자료mode:code또는hybrid
선택 사항:
lyrics: 텍스트 또는.srt. 보컬 타이밍이 중요할 때 스토리보드 전에 필요합니다.assets:hybrid모드용 스틸 및 클립 디렉토리aspect:16:9(기본값),9:16,1:1, 또는4:3
사용자가 먼저 곡을 만들고 싶어한다면 text-to-music을 사용한 후 선택한 파일을 가지고 이곳으로 돌아오세요.
출력
<project>/output/final.mp4docs/CREATIVE_BRIEF.md,docs/STORYBOARD.md,docs/TASKS.md,docs/PROGRESS.mdaudio/analysis.json, 에셋이 있을 경우docs/inspect.json
워크플로우
저장소 루트에서 python3 skills/music-video/scripts/mv.py를 실행하세요. 이 스킬이 다른 곳에 설치된 경우 이 파일 옆에 있는 scripts/mv.py를 사용하세요. 프로젝트는 스킬 디렉토리 외부에 생성하세요.
- 비디오를 JavaScript로 그릴 때는
code를 선택하세요. 사용자가 스틸이나 클립을 제공할 때는hybrid를 선택하세요. 둘 다 명확하지 않으면 한 번 물어보세요. - 격리된 프로젝트 초기화:
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
- 노래를 분석합니다. 템포 변화는 근사치로 처리하고 오디오에서 섹션 경계를 확인하세요:
python3 skills/music-video/scripts/mv.py analyze --project ./mv-project
- 가사 타이밍을 얻습니다. 사용자가 제공하지 않았다면
NOIZ_API_KEY또는~/.config/noiz/api_key가 이미 존재할 때만 speech-to-text를 사용하세요. 키를 절대 출력하지 마세요. 둘 다 존재하지 않으면 가사나 타임스탬프를 요청하고 노래를 업로드하지 마세요. - references/opus-5.5-prompt.md를 읽고 따르세요. 장면 코드나 조립 전에 크리에이티브 브리프와 스토리보드를 작성하세요. 다른 챕터를 만들기 전에 오프닝과 메인 피크를 검토하세요.
code모드에서는 그리기 전에<project>/animation/ANIMATION_GUIDE.md를 읽으세요.audio/analysis.json에서PROJECT.bpm과PROJECT.offset을 설정하세요. 고정된 템플릿 캔버스는 1920×1080입니다. 다른 화면비를 사용하기 전에studio.html과 렌더러 창을 변경하세요. 템플릿 렌더러로 모션을 확인하세요:
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
위 명령어를 <project>/animation 내부에서 실행하세요. Chrome이 표준 위치에 없을 때 --chrome을 전달하거나 CHROME_PATH를 설정하세요. 연락처 시트는 레이아웃만 스크리닝합니다. --strip 또는 오프닝, 피크, 엔딩의 재생이 모션 리뷰입니다.
7. hybrid 모드에서는 로컬 미디어를 검사하고 필요한 클립이 없으면 중단하세요. 대체품을 생성하지 마세요.
python3 skills/music-video/scripts/mv.py inspect --project ./mv-project
- references/timeline.schema.json을 사용하여
timeline.json을 작성하세요. 간격은start_frame에서 포함되고end_frame에서 제외됩니다. - 결과를 조립하고 검사하세요:
python3 skills/music-video/scripts/mv.py assemble --project ./mv-project
타임라인
{
"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는 자신의 장면 내에서 유지됩니다. 크로스페이드를 위해 장면을 겹치지 마세요.
완료 조건
모든 항목이 참일 때만 완료하세요:
[0, ceil(duration × 24))이 정확히 한 번 커버되고, 간격이나 중복이 없음.final.mp4에 비디오 스트림과 완전한 원본 노래가 포함됨.- 오프닝, 메인 피크, 엔딩이 모션으로 검토됨.
- 마지막으로 읽은 스토리가 여운을 남길 시간이 있음.
docs/PROGRESS.md에 열려 있는 블로커가 없음.
보안
init --mode code는 JohnHeibel/ClaudeAnimationBase를 커밋 0ac8bf2b31942376cb6b8c4074715595d512acd2에서 프로젝트로 클론합니다. 해당 템플릿은 MIT 라이선스입니다. 분석, 검사, 렌더링, 조립은 로컬에서 이루어집니다. 하이브리드 모드는 미디어를 업로드하지 않으며 이미지, 비디오 또는 음악 생성 서비스를 호출하지 않습니다.
요구 사항
ffmpeg및ffprobe- Python 3.9+
analyze:uv pip install 'numpy>=2,<3'code모드:git, Node.js, Google Chromehybrid모드: 로컬 에셋만 필요
제한 사항
- 이 스킬은 음악을 작곡하거나, 효과음을 생성하거나, 이미지와 비디오를 API로 생성하지 않습니다.
- 비트 그리드는 대체로 일정한 템포를 가정합니다.
- 코드 모드의 수채화 채우기는 개별 GPU가 없으면 프레임당 몇 초가 걸릴 수 있습니다. 통합 그래픽에서는 렌더러가 이러한 채우기를 피하도록 요청하세요.
- 조립은 클립이 장면보다 짧으면 freeze하거나 시간을 조정하지 않고 거부합니다.