Communitygithub.com

GuilhermeGongora/VideoEditor

주제를 연구하고, 대본을 작성하고, 나레이션을 생성하고, Remotion + Three.js로 3D 장면을 구성하고, 썸네일 2개를 만들고, 렌더링 및 검토하여 완전한 세로형 교육 영상(Shorts/TikTok/Reels)을 제작합니다.

VideoEditor란 무엇인가요?

이 스킬은 사용자가 '6x1을 설명해줘' 또는 '/novo-explicativo'와 같이 주제를 입력하면 Scientia 채널 스타일의 깔끔한 3D 교육 영상을 완전 자동으로 제작합니다. 주요 기능으로는 웹 검색을 통한 최신 정보 수집, 구조화된 대본(JSON) 생성, edge-tts 신경망 음성 합성, Three.js 기반 3D 장면 구성, Remotion을 이용한 최종 렌더링, 그리고 두 가지 썸네일 제작이 포함됩니다. 사용자는 주제만 입력하면 되며, 모든 중간 결정은 스킬이 자체적으로 처리합니다. 최종 산출물은 MP4 영상, 썸네일 이미지, 게시물 자막 파일이며, 선택적으로 Google Drive에도 자동 업로드됩니다. 이 스킬은 Claude Code 환경에서 실행되며, 과학적 설명과 시각적 메타포를 결합한 'Aproximação' 레퍼런스 스타일을 따릅니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/GuilhermeGongora/VideoEditor/tree/HEAD/.claude/skills/novo-explicativo

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

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

문서

3D 설명 영상

사용자 요청 없이 완전 제공: out/<slug>.mp4 (브랜드 엔딩으로 종료) + thumbs/<slug>-1.png 및 -2.png + out/<slug>-legenda.txt (출처와 해시태그가 포함된 게시물 자막). 사용자 PC에서 npm run explicar는 모든 파일을 Google Drive에도 복사합니다. (G:\Meu Drive\Scientia\Posts\<data> · <slug> · <título>\: video.mp4, thumb-1/2.png, legenda.txt, fontes.txt). "Drive를 찾을 수 없습니다"라는 메시지가 나타나면 스크립트가 출력하는 마운트 명령어를 사용자에게 보여주세요. 사용자는 주제만 입력하면 됩니다. 혼자서 결정할 수 있는 사항에 대해 중간에 멈춰서 묻지 마세요.

품질 기준 (사용자 결정, 2026년 10월 16일): 근접 카드 영상. videos/aproximacao/roteiro.json + src/explicativo/videos/Aproximacao.tsx. 시작하기 전에 두 파일을 모두 읽고 references/referencia.md의 레시피를 복사하세요. "Ludificando" 패턴 (회색 배경, 선반, 흐림 효과, 많은 인형, 80–90초)으로 만든 영상은 거부되었습니다 — 다시 사용하지 마세요. 그런 다음 대본 작성 전에 references/ganchos.md를, 장면 구성 전에 references/estilo.md + references/biblioteca.md를 읽으세요. references/ludificando.md는 아이디어의 원천일 뿐, 규칙이 아닙니다.

1. 조사 (필수)

  • 현재 관련 정보 (법률, 숫자, 직위, 기한)는 지금 웹 검색을 통해 2개 이상의 신뢰할 수 있는 출처에서 가져와야 합니다. (Agência Brasil, Senado/Câmara, IBGE, g1, Folha…). 기억에 의존한 숫자는 안 됩니다.
  • 출처를 대본의 fontes에 기록하세요. 출처가 일치하지 않으면 가장 공식적인 출처를 사용하고 그 사실을 명시하세요.
  • 사실과 예측/의견을 구분하세요 ("Dieese는 계산합니다…", "CNI는 말합니다…").

2. 대본 → videos/<slug>/roteiro.json

근접 영상 레시피: ~60초, 7개 장면, 장면당 18–30단어 (총 약 170–190단어), 장면당 하나의 아이디어, 논리적 순서로 설명 (각 장면이 다음 장면을 유도: "그래서…", "그러자…", "만약 누군가…"). chip = 장의 짧은 이름을 대문자로 표기 ("에너지", "아주 가까이", "복사하면?").

  • 후크 = 강력한 숫자 + 질문 ("4번의 구매 중 3번이… 그런데 배터리 없는 카드가 어떻게 결제가 될까요?"). 마지막 장면 = 사람이 가져갈 실용적인 정보 (예: 비밀번호 없는 한도).
  • "양측"과 "주의/사기"는 주제가 요구할 때만 (실제 논란, 실제 사기) 포함됩니다. 필수 사항이 아닙니다.
  • 첫 문장 = 후크, 항상 질문 (사용자 규칙)이며, 그 안에 또는 바로 뒤에 강력한 사실이 있어야 합니다. 예: "배터리 없는 카드가 어떻게 결제가 될까요?". "안녕하세요"는 안 됩니다.
  • 친구에게 말하듯 짧은 문장. 숫자는 숫자로 표기 ("75표").
  • 음성이 잘못 읽을 수 있는 내용 (약어, "6x1", 소수점 "26,8")은 pronuncia에 기재.
  • 마지막 장면: 마무리 — 후크 질문에 대한 최종 실용 정보 / 답변. 금지 (사용자 규칙): 댓글, 좋아요, "저장", "팔로우", "X 댓글 달면 보내드립니다…" 요청 금지 — 말이나 화면에 모두 금지. 출처는 게시물 설명에만 남깁니다. 마지막 대사 이후에는 브랜드 엔딩만 자동으로 표시됩니다.
  • 6–14단어의 문장, 천천히 말하기 (나레이션은 문장 단위로, 각 쉼표와 마침표에서 멈춤).
  • 대본에 cta는 더 이상 없음: 엔딩은 브랜드만 표시.
  • sons: 기본값은 첫 프레임에 임팩트, 장면 전환에 스우시/후시, 숫자 카드에 "팝", 메모/알약에 "틱", 엔딩 진입 시 상승 효과를 자동으로 생성합니다. 배경 음악 없음 (레퍼런스에 없음. 사용자가 요청할 때만 "musica": "sfx/bed-scientia.mp3"로 켜기). 키워드에 2–3개의 acentos를 적당히 작성: "sons": {"acentos": [{"palavra": "75", "cena": "aprovado", "som": "sfx/ding.wav", "volume": 0.5}, {"palavra": "desliga", "cena": "liga", "som": "sfx/boom.wav", "volume": 0.5}, {"palavra": "relógio", "cena": "agora", "som": "sfx/riser.wav", "pico": 1.49, "volume": 0.35}]}. 준비된 사운드는 public/sfx/에 있음: boom (충격), ding (숫자/공개), pop (딱), riser (서스펜스, pico 사용), whoosh/swoosh. palavra는 fala에 쓰인 단어입니다 (pronuncia의 단어가 아님). 모든 사운드는 사용자 라이브러리(public/soundeffects/catalog.md)의 사운드로 교체 가능 — musica, transicao (목록 교체), aparecer, dado, abertura, final; null은 끄기.
  • composicao = 컴포넌트 이름 (예: Escala6x1).
  • marca = "SCIENTIA · <짧은 주제>" (채널명은 Scientia).
  • voz = { "principal": "masculina", "alternar": "nao" } — 대본에 velocidade를 넣지 마세요 (voz.json에서 가져옴, 현재 1.08).
  • post = Instagram/TikTok 자막 (out/<slug>-legenda.txt 파일이 됨): { "gancho": "<강력한 사실 + 질문> 📌", "pontos": [마침표 없는 짧은 문장 3개, 숫자 포함], "fontes": ["Agência Senado", "IBGE", …이름만], "hashtags": ["주제", "내용", …최대 5개, # 없이] } (#scientia는 자동 추가). 영상과 같은 톤: 개인에게 어떤 변화가 있는지, 의견 없음. 이모지는 최대 1개.
  • thumb = 영상 썸네일 (6단계 참조): { "titulos": [2개 옵션], "cena": "<배경 장면 ID>", "quadro": <장면의 프레임>, "descer": 330, "zoom": 1.45 }.

3. 나레이션

npm run narrar -- <slug> → public/explicativo/<slug>/narracao.wav + tempos.json (각 단어의 시간 정보, 음성 자체에서 가져옴). edge-tts 신경망 음성 (인터넷 필요); 인터넷이 없으면 로컬 Kokoro 음성으로 대체. 채널 음성은 voz.json에 저장됨 (엔진, 사용자가 선택한 음성, 속도). 음성, 엔진 또는 ID를 임의로 선택하거나 변경하지 마세요 — 이는 사용자의 취향입니다. 대본에서 voz 필드는 다음만 정의합니다:

  • "principal": "masculina" — 항상. 채널에서 승인된 음성은 Antonio (Microsoft)이며, 6x1 및 근접 영상에 사용된 음성입니다. 여성 음성 Thalita Multilingual은 포르투갈 포르투갈어처럼 들려 (투표함 영상) 사용이 중단되었습니다. "Multilingual" 음성은 절대 사용하지 마세요. 사용자가 요청할 때만 여성 음성을 사용하세요.
  • "alternar": "cenas" — 장면이 두 음성 사이를 번갈아 가며 사용 (듀오). 기본값: "nao".
  • 사용자가 음성에 대해 불만을 표시하면: npm run vozes (Microsoft) / npm run vozes -- eleven 및 npm run vozes -- usar <id> feminina|masculina를 보여주세요.
  • 듣기 위해 대사를 작성하세요 — 이것이 합성 음성의 억양을 가장 크게 바꿉니다:
    • 짧은 문장 (6–14단어), 숨 쉬는 부분에 쉼표, 괄호나 pronuncia 없는 약어 사용 금지;
    • 2–3 장면마다 수사학적 질문 ("이미 지불한 사람은?") — 목소리가 "?"에서 올라가 생동감을 얻습니다;
    • 대비와 반전: "그런데…", "하지만 주의:", "게다가:";
    • 중요한 숫자는 문장 끝에 단독으로 ("75표 대 1이었습니다.") 또는 반복 ("11일!")하여 사용;
    • 쉼표가 많은 긴 문장과 4개 이상 항목의 목록은 피하세요 (음성이 단조로워집니다).
  • 기본 나레이션은 레퍼런스와 동일: 문장 단위, 쉼표에서 0.12초, 마침표에서 0.32초 일시 정지, 장면 간 0.45초, Antonio 속도 1.08. 사용자가 요청하지 않으면 "estilo": "continuo"로 변경하지 마세요.
  • 더 표현력이 풍부한 로컬 음성 (사용자 GPU의 Chatterbox)을 테스트하려면: npm run vozes -- comparar <slug>.

4. 장면 → src/explicativo/videos/<Nome>.tsx

  • Escala6x1.tsx의 구조를 복사: 장면당 하나의 컴포넌트, CENAS_<NOME> 및 파일 끝에 export const VIDEO = { id: "<Nome>", roteiro: roteiro as Roteiro, cenas: CENAS_<NOME> }; (import roteiro from "../../../videos/<slug>/roteiro.json" 사용). 영상은 자동으로 등록됩니다. Composicoes.tsx를 편집하지 마세요 (편집 시 git pull에서 충돌 발생).
  • 영상 완료 후 GitHub에 저장: git add videos/<slug> src/explicativo/videos/<Nome>.tsx + commit + push (이렇게 하면 사용자의 다음 git pull이 멈추지 않습니다).
  • 히어로 객체 (계산기 + 카드처럼): 주제의 한두 가지 객체를 잘 만들고 크게 배치하여 거의 모든 장면에 등장시킵니다. 각 장면은 객체의 일부/상태를 보여줍니다 (불이 켜지는 필드, 화면의 코드, 튀어나오는 키). 인형은 조연으로만 사용 (장면당 0–1개, 절대 중심이 아님).
  • 키트 (three/Kit.tsx, ui/Kit.tsx)는 선택 사항: 장면이 필요할 때만 한 조각을 사용하세요 (예: 투표에서 Hemiciclo). 장면에 알약/눈금자를 채우지 마세요.
  • 각 장면에 대해 데이터의 하나의 시각적 은유를 선택하세요 (references/estilo.md 참조): 표 → 켜지는 의자; 시간 → 사라지는 큐브; 사람 → 인형 (인형 1개 = X); 돈 → 동전/급여명세서; 기한 → 타임라인의 표지판; 규칙/법률 → 종이 + 체크리스트.
  • 대사와 동기화: w("palavra")는 단어가 발화되는 프레임을 반환합니다. 시각적 요소는 단어와 함께 변경됩니다 (예: 음성이 숫자를 말할 때 카드 번호가 변경됨).
  • 카메라: cam(pos, look)는 장면 시작 위치에서 끝 위치로 보간 (ease(f, 0, dur) 사용).
  • 배경: Stage는 이미 다크 모드 (검정 배경, 먼지)로 제공됩니다 — 레퍼런스와 동일. 사용자가 요청하지 않으면 cenario="estudio" 또는 acabamento (흐림/블룸)를 사용하지 마세요.
  • 카메라: 객체로부터의 거리 6–8, y ≈ 1을 바라봄; 장면 내에서 10–15% 느린 줌인 (Aproximacao.tsx처럼).
  • 프레이밍: 주요 객체가 너비의 40–70%를 차지합니다. 절대 빈 프레임, 아주 작은 객체 (가는 선) 또는 참조 없이 화면 전체를 차지하는 블록을 사용하지 마세요. 항상 인간 참조 (옆에 인형) 또는 알려진 객체와 함께 크기 조정.
  • 주제 객체를 단순한 형태로 구성 (책 = 얇은 상자, 금고 = 상자 + 원기둥, 휴대폰 = 둥근 모서리 상자 + 어두운 화면, 저울 = 원기둥) — 구체적인 맥락이 추상적인 블록보다 더 잘 집중시킵니다.
  • 화면 중앙 세로 영역 (y ≈ 450–1250px)에 콘텐츠 배치. 상단 = 브랜드/칩/카드; 1300+ = 자막 및 TikTok 버튼. 오른쪽 가장자리 (앱 아이콘)에는 중요한 것을 배치하지 마세요.
  • Callout에 숫자 출처 표기 (sub="출처: …").

5. 프레임 확인

npm run quadros -- <slug> → out/quadros/<slug>/grade.jpg (각 장면 끝의 한 프레임). 그리드를 확인하세요. 확인 사항: 잘리거나 자막 뒤에 가려진 부분 없음; 텍스트 읽기 쉬움; 주요 객체 충분히 큼; 카드/칩 위에 겹쳐진 부분 없음; 시각적 요소가 문장과 일치함. 카메라/크기 조정 후 반복.

6. 썸네일 (표지)

thumb.titulos에 2개의 제목 작성 (\n으로 줄 바꿈, *별표*로 강조):

  • 3줄, 줄당 최대 ~16자; 마지막 줄은 강조 표시된 질문/호기심.
  • 하나는 사실/강력한 숫자 포함 ("75표 대 1."), 다른 하나는 사람이 가진 질문 ("언제 바뀌나요?")
  • 진실: 영상이 보여주지 않는 것을 약속하지 마세요.
  • 배경: 가장 예쁘고/읽기 쉬운 장면 (이미 구성된 cena + quadro). npm run thumb -- <slug> → thumbs/<slug>-1.png, -2.png. 전달하기 전에 두 개를 모두 확인하세요.

7. 렌더링 및 전달

npm run explicar -- <slug> → out/<slug>.mp4 + 썸네일 (3D 렌더링, GPU 없음: Codespace에서 영상 1분당 약 6–10분 소요). 최종 mp4의 3–4개 프레임을 시청하고, 오디오 끝을 확인한 후 출처와 함께 전달하세요. 사용자에게 표시: 영상, 썸네일 2개 (어느 것을 게시할지와 그 이유를 말하세요) 및 out/<slug>-legenda.txt의 자막을 복사할 수 있도록 붙여넣으세요. 의견을 묻고 사용자가 생각한 내용을 notas-do-editor.md ("Explicativos" 섹션)에 기록하세요.

Individual skills in this repo

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

관련 스킬