Communitygithub.com

fabrica-videos-reels

Reels를 제작합니다. 대본과 스토리보드를 먼저 승인받은 후 녹화, 음성-영상 동기화, 최종 렌더링까지 진행합니다. 사용자가 비디오, Reels, 새 대본을 요청하거나 이미 대본이 작성된 비디오를 계속할 때 사용하세요.

fabrica-videos-reels란 무엇인가요?

이 스킬은 '대본 우선' 접근법을 따르는 에이전틱 비디오 제작 워크플로우입니다. 사용자가 주제나 슬러그를 제공하면, 먼저 대본(`roteiros/<slug>.md`)과 스토리보드(`roteiros/<slug>-animacoes.md` + 앵커 JSON)를 대화형으로 작성하고 승인받습니다. 그런 다음 Remotion 기반의 React 컴포넌트(`src/videos/<Nome>.tsx`)를 생성하여 각 장면을 구현하고, 실제 녹화된 영상과 Whisper 자막을 동기화합니다. 이 스킬은 포르투갈어로 작동하며, CLI 명령어를 통해 자동으로 자막 생성, 배치 동기화, 프리뷰 렌더링, 최종 MP4 출력을 수행합니다. 또한 HDR/SDR 변환, 4K 60fps 고해상도 유지, 선택적 해상도/프레임레이트 다운스케일, 시리즈 제작, 사운드 추가 등 고급 기능을 지원하며, 모든 단계에서 사용자의 승인을 받도록 설계되었습니다.

지원 대상✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/eduardogalbiati/fabrica-de-video-skills/tree/HEAD/.claude/skills/fabrica-videos-reels

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

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

문서

/fabrica-videos-reels — 대본에서 MP4까지

Fábrica de Vídeos Agêntica 스킬입니다(fabrica-videos 스킬 참고). '대본 우선' 방식입니다: 클라이언트가 녹화 전에 대본과 스토리보드를 승인합니다. 만약 이미 대본 없이 녹화했다면 fabrica-videos-rapido 스킬을 사용하세요.

포르투갈어로, 간단한 언어로 말하세요(비디오를 요청하는 사람은 거의 프로그래머가 아닙니다). 진행 상황을 코드가 아닌 렌더링된 미리보기로 보여주세요.

Remotion 코드를 작성하기 전에 CLAUDE.md(디자인 시스템 규칙, 각 파일 위치, 명령어)를 읽고, 공식 Remotion 스킬이 설치되어 있다면 remotion-best-practices도 읽으세요.

완전하고 승인된 예시는 Exemplo 비디오입니다: roteiros/exemplo*.{md,json} + src/videos/Exemplo.tsx. 그 구조를 복사하세요.

모든 명령어는 프로젝트 루트의 터미널에서 실행됩니다. 아래 표에서 TRABALHO = trabalho 폴더(git 외부)입니다.

0. 비디오가 어떤 단계에 있는지 확인하세요

짧은 slug를 선택하고(예: minha-ideia) 이미 존재하는 것을 확인하세요:

존재하는 것…다음 단계로 가세요
아무것도 없음1. 대본
승인된 roteiros/<slug>.md, -animacoes.md 없음2. 스토리보드
스토리보드, src/videos/<Nome>.tsx 없음3. 제작
완성된 컴포지션 + 새 녹화(사용자가 저장 위치 알려줌)4. 녹화
TRABALHO\out\<slug>-final.mp45. 전달

한 줄로 현재 단계를 알려주고 진행하세요. 1단계와 2단계는 대화입니다: 제안하고, 듣고, 다듬고; 승인을 받아야만 넘어갑니다.

1. 대본 → roteiros/<slug>.md

  • 여기서 클라이언트와 대화하며 대본을 작성합니다. 질문: 주제(또는 참조 링크/비디오), 기둥(브랜드 주제 중 하나), 목표 길이(30–60초 ≈ 2.5단어/초).
  • roteiros/exemplo.md와 동일한 구조: 예상 시작 시간, 대사, 카드가 있는 블록; 일반 대중을 위한 비유 사전; 녹화용 연속 텍스트; 필요한 스크린샷; 링크와 함께 확인된 사실.
  • 음성(사람에 맞게 조정; 그 규칙은 브랜드에 있음): 1인칭, 짧은 문장, 구체적인 숫자; 처음 3초 안에 후크; 절대 "혁명적"/"미래가 왔다" 사용 금지; 질문 + CTA로 마무리. 경보는 주장이 아닌 질문이 됩니다. 뉴스를 만들어내지 마세요.

2. 스토리보드 → roteiros/<slug>-animacoes.md + roteiros/<slug>.ancoras.json

  • 비트별(2–3초마다 시각적 전환): 시간, 문구, 상단에 나타나는 것(1080×960 영역).
  • 새 부품을 만들기 전에 src/pecas/의 부품을 재사용하세요: RedeNeural + Bisturi(AI의 "두뇌"), GradeConexoes, LoopPensando, Lupa, ContadorBarra, TrocaPrints, TextoRiscado(모드 riscar/somar), OlhoRiscado, LinhaVersoes; 헬퍼 TituloCena, Halo, RotuloMono, aparece (util.tsx).
  • ancoras.json: { "cena": "그 장면에서 처음으로 말하는 단어" } 말하는 순서대로. 앵커에 고유명사를 피하세요(Whisper가 잘못 인식합니다: "Qwen"→"quen", "Claude"→"clou", "OpenAPI"→"OpenAI", 또한 "Vercel", "MCP", "JSON"). 한 장면 내부의 비트(예: 텍스트를 지우는 순간)도 앵커가 됩니다.

3. 제작 → src/videos/<Nome>.tsx

  1. Exemplo.tsx의 뼈대를 복사하세요: zod 스키마(pilar, video, enquadramento, mostrarGuia, nome, cargo, prints, encerramento, tempos), 외부 TelaDividida, 장면당 하나의 <Sequence> + <Cena>(6프레임 페이드), 끝에 2초 Encerramento. src/videos/index.tsx에 <Folder name="Videos"> 안에 calculateMetadata(길이 = duracaoFala + 2초)와 함께 등록하세요.
  2. 각 장면은 자체 컴포넌트이며 useCurrentFrame()을 호출합니다(부모 컴포넌트의 객체/배열 함수 내에서 hook을 호출하지 마세요: 프레임이 잘못 나옵니다). src\relogio.tsx에서 useCurrentFrame, useVideoConfig, Sequence를 가져오세요. remotion에서 가져오지 마세요: 프레임은 초당 30으로 기록되고 시계는 비디오가 60으로 출력될 때 나머지를 처리합니다.
  3. 새 부품은 src/pecas/로 이동합니다(일반적이며 props 포함), src/animacoes/tema.ts의 토큰을 따릅니다.
  4. 스크린샷 및 부품 이미지(작은 파일): 이 폴더의 public\<slug>\에 저장하고 npm run preparar를 실행하세요.
  5. 녹화 전 테스트용 임시 음성: roteiros\<slug>.fala.txt(UTF-8)에 연속 텍스트를 저장하고 다음을 실행하세요:
    npm run fala -- <slug> roteiros\<slug>.fala.txt
    
    → TRABALHO\public\previa\fala-<slug>.mp4 (시스템 음성, 1080×960). 그런 다음 npm run legendar + npm run batidas(섹션 4)를 실행하여 src/videos/<slug>.tempos.json을 생성하고, video prop = "previa/fala-<slug>.mp4"로 설정하세요.
  6. 확인: npx tsc 및 가이드가 켜진 연락처 시트:
    npm run folha -- <Id> src\videos\<slug>.tempos.json
    
    → TRABALHO\out\folha-<Id>.jpg (각 장면 끝의 1프레임). 이미지를 확인하세요: 빨간색 없음(상단 270, 하단 320, 측면 96, 오른쪽 버튼), 겹치는 것 없음, 텍스트가 잘 맞음.
  7. 미리보기 렌더링:
    npm run renderizar -- <Id> "trabalho\out\previa-<slug>.mp4" previa
    
    (가벼움, 540×960; 미리보기라고 말하세요) 그리고 그에게 보내세요.

4. 실제 녹화 → 동기화 및 프레이밍

  1. 새 녹화를 찾으세요(어디에 저장했는지 물어보세요). 원본을 TRABALHO\originais\로 복사하세요(절대 이동하거나 변경하지 마세요) 그리고 변환하세요:
    npm run converter -- "trabalho\originais\<arquivo>" <slug>
    
    → TRABALHO\public\gravacao-<slug>.mp4 (세로, H.264, 일반 색상, 녹화의 해상도 및 프레임 속도 유지: 4K 60은 4K 60으로 유지되고 최종 비디오도 그렇게 출력됩니다. HDR은 예외: SDR로 변환되며 변환기가 알립니다. 명령 끝에 ate=12를 붙이면 처음 12초만 변환하여 빠른 테스트를 수행합니다). 변환기는 ffprobe로 파일을 확인하고, **4K HDR(최신 iPhone)**인 경우 zscale + tonemap으로 HDR을 처리합니다(이것 없이 색상이 바래집니다). 각 세션의 첫 번째 HDR 녹화에서는 변환된 파일에서 한 프레임을 추출하여 그에게 보여주고 휴대폰과 비교하게 하세요.
  2. npm run legendar -- "trabalho\public\gravacao-<slug>.mp4" (백그라운드, 약 1-2분) → legendas/gravacao-<slug>.json. 녹화에 긴 일시 중지, 오류 또는 반복 테이크가 있는 경우 진행하기 전에 정리하세요(fabrica-videos-corte 스킬): 그 이후의 비디오는 gravacao-<slug>-limpa.mp4이고, 자막은 정리된 비디오의 자막입니다.
  3. npm run batidas -- legendas\gravacao-<slug>.json roteiros\<slug>.ancoras.json src\videos\<slug>.tempos.json "<vídeo>". 앵커가 누락된 경우 자막을 읽고 문구를 조정하세요. 그가 대사의 의미를 변경한 경우 애니메이션을 조정하세요(예: "한 사람에 의해서만" → TextoRiscado modo="somar" 지우기 대신) 그리고 그에게 알리세요.
  4. duracaoFala ≤ 비디오 길이(그렇지 않으면 아래에 이미지가 없는 순간이 남습니다): 위 명령 끝에 비디오가 있으면 batidas가 자동으로 제한합니다; 없으면 수동으로 수정하세요.
  5. 프레이밍(얼굴이 자막 영역(y 985–1125)과 하단 영역(y 1600) 사이에 있어야 함): 약 12개 지점에서 자르기를 테스트하세요:
    ffmpeg -ss <t> -i <video> -frames:v 1 -vf "crop=1080:960:0:<offset>" "trabalho\out\enq-<t>.png"
    
    각 이미지를 확인하세요. enquadramento = "50% <offset/960*100>%" (1080×1920 소스의 경우). 비디오 전체에 머리 전체가 프레임 안에 있어야 합니다. 턱이 하단 영역에 닿을 수 있습니다; 입은 절대 닿지 않습니다. 그가 카메라에 가까이 올 때도 테스트하고 머리 꼭대기가 나가지 않는 가장 큰 오프셋을 사용하세요.
  6. 이름 태그 확인: 얼굴을 가리면 상단 절반에 배치됩니다(TelaDividida의 기본값임).
  7. 최종 렌더링을 백그라운드에서 실행하세요:
    npm run renderizar -- <Id> "trabalho\out\<slug>-final.mp4"
    
    ffprobe로 길이/해상도를 확인하고 비디오를 보내세요.
    • 들어가는 품질이 나오는 품질입니다. renderizar는 녹화의 해상도와 프레임 속도를 읽고 그대로 출력합니다: 4K 60으로 녹화하면 2160×3840 60으로 출력됩니다. 최종 결과에 npx remotion render를 직접 사용하지 마세요: 항상 1080×1920 30으로 출력됩니다.
    • 매개변수로만 축소하며, 그가 스킬 호출에서 요청한 경우에만 축소합니다(예: /fabrica-videos-reels <slug> 1080p): 1080p는 해상도를, 30fps는 프레임 속도를 줄입니다(npm run renderizar -- <Id> "<saída>.mp4" 1080p 30fps). 매개변수가 없으면 축소하지 마세요.
    • HDR은 규칙에 포함되지 않습니다: Remotion은 일반 색상으로만 그립니다. 녹화가 HDR로 온 경우 최종 결과가 SDR로 출력된다고 그에게 알리세요.
    • 4K 60으로 렌더링하면 1080p 30보다 그릴 이미지가 8배 많습니다. 시간이 걸릴 것이라고 미리 알리세요.

5. 전달

  • fabrica-videos-entrega 스킬로 마무리하세요(기술 검토, 표지, 프레임 시트 및 NOTAS.md). 아래 사항은 이 흐름에 해당하는 부분입니다.
  • 그가 나중에 편집 앱에서 자막을 추가할 경우 자막을 어디에 둘지 설명하세요: 구분선 바로 아래(기둥 색상으로) (가이드의 녹색 영역), 최대 2줄. 그가 이미 비디오에 자막을 포함시키길 원한다면 fabrica-videos-legendas 스킬을 참조하세요(LegendaQueimada 요청, 위치 faixa).
  • 자막이 자주 틀리는 이름을 알리세요.
  • 게시물 설명: 그가 요청하면 NOTAS.md에 제안을 작성하세요(후크, 정확한 숫자가 포함된 2-3문장, 질문 + 동일한 CTA, 출처, 최대 3개의 이모지, 4-6개의 해시태그, 연구가 뒷받침하지 않는 과장 금지).
  • entregas\AAAA-MM-DD-<slug>\에 기록: NOTAS.md(컴포지션 ID, 사용된 명령어, 녹화 및 최종 파일 경로, 길이, 프레이밍, 그가 대사에서 변경한 내용), capa.jpg 및 연락처 시트. 최종 비디오는 TRABALHO\out\에 남습니다.
  • 승인 후 녹화 파일을 TRABALHO\public\에서 제거하고 trabalho\arquivo\AAAA-MM-DD-<slug>\로 이동하세요(Remotion은 렌더링할 때마다 public 전체를 복사합니다. 폴더가 가득 차면 모든 것이 느려집니다). 새 경로를 NOTAS.md에 기록하세요.
  • 절대 게시, 예약 또는 전송하지 마세요. 게시하는 사람은 클라이언트입니다.

이미 해결된 함정 (반복하지 마세요)

  • Halo: <Halo> 사용(div에 filter: blur), 투명 요소에 box-shadow 사용하지 마세요(어두운 "알약"이 됩니다).
  • 여러 단어 강조: *10 tarefas*는 단어별이 아닌 구절로 처리해야 합니다(TextoImpacto/Destaque 참조).
  • 점에 중앙 정렬된 레이블(예: v1)은 96px 여백을 침범하지 않도록 추가 여유가 필요합니다.
  • PowerShell: --props='{...}'에 직접 JSON을 넣으면 따옴표가 사라집니다. 파일에 저장하고 --props=arquivo.json을 사용하세요.
  • 프로젝트 내부의 녹화 또는 비디오는 저장소로 이동합니다: 항상 TRABALHO에 두세요.
  • Studio 포트는 3210입니다.

시리즈 (동일 주제에 대한 여러 릴)

  • 에피소드당 하나의 slug(<serie>-<n>-<tema>)를 사용하고, 클라이언트가 요청하면 에피소드당 하나의 세션을 사용하세요. 병렬 세션은 동일한 폴더를 공유합니다: 각 세션은 자체 slug의 파일만 수정합니다; src/videos/index.tsx를 편집하기 전에 다시 읽고 자체 <Composition>만 추가하세요; 공유 부품은 변경하지 마세요.
  • 모든 세션에 적용되는 사실과 결정(변경된 숫자, CTA, 기둥)은 모든 세션에 즉시 전달되어야 합니다. 그렇지 않으면 각 비디오가 다른 규칙을 가지게 됩니다.
  • 시리즈 최종 화면: Encerramento 대신 src/pecas/TelaFinalReels.tsx, 대사 종료 후 4초(길이 = duracaoFala + telaFinalSeg). 그가 편집 앱에서 릴로 덮는 두 개의 빈 9:16 공간(400×711): 하나는 다음 챕터용(마지막은 첫 번째로 돌아감), 다른 하나는 시리즈를 시작한 릴용입니다.

사운드 (선택 사항, 그가 요청하거나 이미 승인한 경우에만)

  • public 내 사운드 폴더에 있는 네 개의 짧은 사운드(라이센스가 명확한 자신의 사운드 사용: 저장소에는 사운드가 포함되지 않음): abertura.mp3(후크에서 라이저, 볼륨 ~0.35), tecla.mp3(들어오는 각 항목마다, ~0.3), whoosh.mp3(전환/확대 시, ~0.2), blip.mp3(숫자 또는 최종 응답이 도착할 때, ~0.3).
  • 각 사운드는 @remotion/media의 <Audio>가 있는 짧은 <Sequence>이며, 장면과 동일한 시간에 연결됩니다. 경로와 볼륨은 스키마 props에 있습니다(빈 문자열은 비활성화).
  • 렌더링 후 ffmpeg -i <video> -af volumedetect -vn -f null -로 피크를 측정하세요(0dB 미만이어야 하며 사운드는 음성보다 낮아야 합니다). 당신은 들을 수 없습니다: 청취 확인은 그에게 맡기세요.

녹화 교훈

  • 대본 없이 녹화하는 사람은 종종 문장 단위로 말하고, 긴 멈춤을 가지며, 시작하기 전에 워밍업하고, 마음에 들지 않는 문장을 반복하고, 끝에 프레임을 벗어납니다. fabrica-videos-corte 스킬이 이 모든 것을 해결합니다.
  • 사람이 녹화할 때 대사를 바꾸는 것은 일반적입니다. 앵커를 신뢰하기 전에 전체 자막을 읽고 실제로 말한 내용에 맞게 화면과 게시물 자막을 조정하세요.
  • 대사가 대본보다 짧을 때, 생략된 세부 사항과 숫자가 화면에 기록됩니다.
  • 사실을 변경할 때(예: 업데이트된 숫자) 모든 곳에서 변경하세요: 대사, 화면, 제목, 게시물 자막 및 표지.

Individual skills in this repo

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

관련 스킬