Communitygithub.com

kelvinmacaco/short-build

크리에이터가 대본이 작성된 Short의 MP3 나레이션을 보낼 때 사용합니다. 음성을 전사 및 레벨 조정하고, 무료 영상(Pexels)과 배경 음악(Pixabay, Content ID 없음)을 검색하며, 클립을 자르고, lib_short로 장면별 generate.py를 작성하고, VHS 테이프 효과를 적용한 후, HyperFrames로 프레임을 확인하고 렌더링하여 바탕화면에 비디오를 제공합니다.

short-build란 무엇인가요?

이 스킬은 크리에이터가 제공한 MP3 나레이션을 바탕으로 짧은 동영상(Short)을 자동으로 제작하는 AI 에이전트용 빌드 도구입니다. 주로 Claude Code, Cursor, Codex와 같은 AI 코딩 에이전트를 위한 스킬로 설계되었으며, `short-start` 플럭스의 일부로 동작합니다. 주요 기능으로는 FFmpeg를 이용한 음성 전사 및 레벨 조정, Pexels API를 통한 무료 스톡 비디오 검색 및 다운로드, Pixabay에서 Content ID가 없는 배경 음악 선택, FFmpeg 레시피를 사용한 클립 커팅, `lib_short` 라이브러리를 활용한 동적 장면 생성(scene generation), HyperFrames 렌더러를 통한 최종 비디오 렌더링 및 품질 검사가 포함됩니다. 사용자는 `ROTEIRO.md`와 `RULES.md`에 따라 대본과 규칙을 준비해야 하며, 프로젝트의 `kit.json` 파일에 `handle`(크리에이터의 @)이 반드시 설정되어 있어야 합니다. 최종 출력물은 바탕화면에 x264 CRF 19, AAC 192k, `+faststart`로 인코딩된 MP4 파일과 함께 TikTok 및 YouTube 게시용 제목, 설명, 고정 댓글을 포함합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/kelvinmacaco/kit-shorts-virais/tree/HEAD/.claude/skills/short-build

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

Short 편집

short-start 플럭스의 일부입니다. 미디어 세부사항은 short-media, 애니메이션은 short-animation, 검토 및 렌더링은 short-review를 참조하세요. 지원: hyperframes, hyperframes-cli, media-use.

먼저 프로젝트의 RULES.md와 ROTEIRO.md를 읽으세요. 프로젝트의 kit.json에는 반드시 handle(크리에이터가 선택한 @)이 있어야 합니다. 비어 있거나 "@SEU_CANAL"이면 계속하기 전에 크리에이터에게 물어보세요.

1. 나레이션

  • mp3를 assets\audio\narracao_raw.mp3로 복사합니다.
  • silencedetect=n=-40dB:d=0.6으로 긴 멈춤을 찾습니다. 후크에 해당하는 부분의 멈춤은 짧게 자르고, 에너지 넘치는 톤이면 0.8초보다 긴 멈춤을 줄입니다. tools\ffmpeg_recipes.md의 이음새 레시피를 사용합니다.
  • build\transcribe.py로 전사하여 각 단어의 시간이 포함된 assets\audio\narracao_words.json을 생성합니다.
  • 레벨 조정: python -I -X utf8 build\level_voice.py <mp3> <words.json> video\assets\audio\narracao.mp3
  • template\video\에서 hyperframes.json, package.json, meta.json, AGENTS.md, CLAUDE.md를 video\로 복사합니다. meta.json의 id를 조정합니다.

2. 미디어

  • 내장 브라우저에서 pexels.com 페이지로 이동해 tools\pexels_search.js를 실행하여 여러 검색을 한 번에 수행합니다.
  • 썸네일을 다운로드하고 한 장(ffmpeg tile)으로 만든 다음 선택하기 전에 살펴보세요.
  • 로고, 브랜드, 팀 셔츠, 대사와 맞지 않는 것은 버립니다.
  • curl -L -A "Mozilla/5.0" -e https://www.pexels.com/로 assets\video\stock\에 다운로드합니다.
  • 배경 음악: Pixabay에서 "Content ID Registered"가 없는 트랙만 video\assets\audio\musica.mp3로 저장합니다.
  • 효과음: tools\sfx\README.md를 참조하며 video\assets\sfx\에 저장합니다.
  • 레시피(세로 1080×1920 또는 TV 창 1000×750)에 따라 클립을 잘라 video\assets\video\에 저장합니다. 후크용으로 역방향 클립을 만들어 루프에 사용합니다.
  • cut이라는 셸 함수를 호출하지 마세요. 시스템 cut 명령어가 가려집니다.

3. 장면 (build\generate.py)

  • 주석이 달린 template\build\generate.py를 시작점으로 삼습니다. SCENES = [(이름, 시작, 끝)]을 단어 시간으로 사용하며, 각 장면 내 시간은 로컬(0 = 장면 시작)입니다.
  • lib_short의 구성 요소를 사용합니다:
    • 텍스트: kline/words_js/slam/punch/shake/label;
    • 숫자: onUpdate를 사용한 카운터;
    • 좋아요 및 공유: like_block/plane_svg;
    • 상호작용: comment_card/follow_card/step_badge.
  • 모든 장면에 애니메이션을 넣습니다. 목록이 진행 상황을 요구하면 중첩 장면(예: 라이브러리의 pavio_scene, 각 항목마다 심지가 타오르다 클라이맥스에서 폭발)으로 주제별 표시기를 만듭니다.
  • 자막: write_captions(WORDS, TOTAL, SKIP, alt_from, alt_top). SKIP은 장면 타이포그래피가 이미 대사를 표시하는 부분을 다룹니다.
  • 인덱스: write_index(TOTAL, SCENES, SFX, dur_voz, 0.1, handle=HANDLE). HANDLE은 build.ps1을 통해 kit.json에서 가져옵니다.
  • @ 표시는 자막 아래에 (WM_TOP) 있어야 합니다. 수동으로 위치를 지정하지 마세요.
  • 루프: 마지막 장면은 후크의 프레임 0에 해당하는 역방향 클립과 동일한 제목으로 끝납니다.
  • 엔딩은 영상의 분위기를 따릅니다: 무겁고, 어둡고, 느린 영상에는 과격한 효과를 사용하지 않습니다.
  • HyperFrames 규칙:
    • class="clip" + data-start/data-duration;
    • 클립 자체의 visibility나 opacity는 애니메이션하지 말고 내부 요소만 애니메이션;
    • 이후의 fromTo에는 immediateRender:false 사용;
    • 각 <audio>는 고유 id와 트랙을 가짐;
    • 비디오는 항상 muted;
    • SVG 선은 그리기 효과를 위해 pathLength="1" 사용.

4. 생성, 확인 및 렌더링

  • build\build.ps1의 $alvos를 조정합니다: 촬영 장면, .fv(전체 화면), .tv(TV 창)을 포함합니다.
  • powershell -ExecutionPolicy Bypass -File build\build.ps1 -Duracao <TOTAL>을 실행합니다. 절대 출력을 Select-Object -First로 전달하지 마세요.
  • npx --yes hyperframes@<버전> check --json: 오류를 수정합니다. 예상되며 남아도 되는 오류:
    • 반투명 브랜드의 대비;
    • 루프 제목이 너무 짧음.
  • 스냅샷을 찍고(snapshot -o <폴더> --no-end --at "..."), 연락처 시트를 살펴봅니다. 다음을 확인:
    • 화면 밖으로 나가는 텍스트;
    • 읽을 수 없는 자막;
    • 가려진 요소;
    • 정지된 장면.
  • render --quality standard -o renders\<이름>_master.mp4로 렌더링하고 ebur128=peak=true로 측정합니다(목표: 약 −13.5 LUFS, 피크 −2 dBTP 미만).
  • x264 CRF 19, AAC 192k, +faststart로 바탕화면에 복사합니다.
  • 루프 확인: 프레임 0과 마지막 프레임을 나란히(hstack) 비교하여 동일해야 합니다.
  • video\REVIEW.md에 결정 사항, 측정한 내용, 시각적으로만 확인한 내용("아무도 소리를 듣지 않음")을 기록합니다.

5. 전달

비디오, 제목(TikTok 및 YouTube, 각각 5개의 # 포함), 설명, 고정 댓글을 보냅니다. 게시 시간을 알리고 48시간 후 스크린샷을 요청합니다.

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

관련 스킬