Communitygithub.com

danbaruka/ai-video

하나의 작은 video.json 파일로 깔끔하고 애니메이션된 화이트 스타일의 짧은 세로 동영상(TikTok, Reels, YouTube Shorts, 30~90초)을 매우 적은 토큰으로 제작합니다. 세 가지 모드를 지원합니다.

ai-video란 무엇인가요?

이 스킬은 개발자나 AI 에이전트가 하나의 `video.json` 파일만으로 짧은 세로 동영상(TikTok, Reels, YouTube Shorts, 30~90초)을 제작할 수 있게 해줍니다. 'Generated' 모드는 무료 신경망 음성과 모션 디자인을 추가하고, 'Images' 모드는 스크린샷, 사진, 웹 페이지를 실제 아이폰이나 브라우저 또는 전체 화면에 배치하며, 'Filmed' 모드는 직접 촬영한 영상에 자막과 애니메이션 장면을 입힙니다. 이 스킬은 스크립트 작성, 음성 생성, 단어 단위 자막 동기화, 모든 장면 애니메이션, 배경 음악 및 효과음 추가, 텍스트가 화면을 넘어가지 않는지 확인, 그리고 MP4 렌더링까지 모든 과정을 자동으로 처리합니다. 영어, 프랑스어 등 여러 언어를 지원하며, 사용자가 '짧은 동영상', '쇼츠', '릴스', '티키톡', '애니메이션 설명 영상', '다수 동영상 제작', '얼굴 없는 영상', '애니메이션 자막' 등을 요청할 때 사용하도록 설계되었습니다.

지원 대상~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/danbaruka/claude-code-ai-video/tree/main/skills/ai-video

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

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

문서

ai-video은(는) 무엇을 하나요?

하나의 동영상은 하나의 video.json 파일입니다. 음성이 말하는 문장들과, 각 주요 아이디어에 대해 16가지 유형으로 구성된 카탈로그에서 선택된 장면으로 이루어집니다. scripts/make.mjs 스크립트가 나머지 모든 작업을 수행합니다. 절대 HTML, CSS 또는 애니메이션 코드를 직접 작성하지 마십시오. 유일한 예외는 커스텀 시각 효과가 필요한 단 한 순간(html 유형)입니다.

아이디어 ─► 스크립트(문장) ─► video.json ─► make.mjs ─► 콘택트 시트(검토) ─► --rendu ─► MP4 + 커버 + 게시글 텍스트

JSON 키는 프랑스어(phrases, texte, scene, voix, marque…)이며, 장면 유형도 프랑스어(titre, chiffre, liste…)입니다. 이 스킬에 표시된 대로 정확히 작성하십시오. 음성이 말하는 텍스트는 모든 언어가 가능합니다.

첫 번째 동영상 전(한 번만)

sh <skill>/scripts/install.sh      # node ≥ 18, ffmpeg, python3 확인; <skill>/.venv에 edge-tts 설치

<skill>은 이 파일이 있는 폴더입니다. 첫 실행 시 HyperFrames(npx를 통해), GSAP 및 로고를 다운로드합니다. 이후에는 모든 것이 캐시됩니다.

작업 흐름

  1. 주제를 한 문장으로. 사용자가 주제를 제공하지 않으면 3개를 제안하고 선택하게 하십시오.
  2. 스크립트. references/writing.md를 읽으십시오: 효과적인 훅, 구조, 길이.
    • 914개의 문장과 110170단어를 목표로 하십시오.
    • 초당 약 2.7단어, 문장 사이 0.35초를 계산하면 130단어는 약 50초입니다.
  3. 파일. 사용자 프로젝트에 videos/<id>.json을 작성하십시오. 형식은 아래와 같으며, 전체 카탈로그는 references/scenes.md에 있습니다. 미디어 파일은 videos/medias/에 넣으십시오.
  4. 빌드. node <skill>/scripts/make.mjs videos/<id>.json 명령어는 렌더링 없이 음성, 페이지, 검사 및 콘택트 시트를 만듭니다(약 1분).
  5. 검토. 하나의 이미지만 여십시오: videos/rendus/<id>-planche.jpg.
    • 프레임 1, 각 장면의 끝(모든 요소가 도착한 후), 아웃트로 카드를 보여줍니다.
    • JSON을 수정하고 명령어를 다시 실행하십시오. 음성은 캐시됩니다. 변경된 문장만 다시 생성됩니다.
  6. 렌더링. --rendu를 추가하십시오. 45초 동영상 기준 약 1분이 소요됩니다. 다음 파일이 생성됩니다:
    • videos/rendus/<id>.mp4;
    • -couverture.jpg (커버, 프레임 1);
    • <id>.txt (제목, 설명, 해시태그 및 고정 댓글 포함).
  7. 게시. references/publishing.md를 읽어 게시 시간(대상 국가별), 게시 주기 및 설명을 확인하십시오. 사용자의 명시적인 승인 없이는 절대 게시하지 마십시오.

토큰 절약: 중요한 규칙

이 스킬은 모델이 동영상당 250400줄의 HTML 및 애니메이션 코드 대신 60120줄의 JSON을 작성하기 때문에 저렴합니다. 블라인드 테스트에서 새로운 에이전트가 이 스킬을 읽는 것을 포함하여 약 65,000 토큰으로 완성된 60초 동영상을 제작했습니다. 이 효율성을 유지하려면:

  • make.mjs, lib/*.mjs, style.css 또는 생성된 index.html을 열지 마십시오. 장면 카탈로그로 충분합니다. 명령어가 실패하고 메시지가 부족한 경우에만 코드를 여십시오.

  • 해당 단계에 대해서만 참조를 읽으십시오:

    단계참조
    작성writing.md
    장면 선택scenes.md
    음성, 영상 또는 스크린샷modes.md
    게시publishing.md

    대화에서 이미 읽은 참조는 다시 읽지 마십시오.

  • 스크린샷 대신 콘택트 시트 하나. 동영상을 확인하려면 <id>-planche.jpg를 한 번 보십시오. 초당 한 프레임을 가져오거나 MP4를 프레임별로 검사하지 마십시오.

  • 검사를 신뢰하십시오. 명령어는 HyperFrames 검사(텍스트 오버플로우, 숨겨진 텍스트, 런타임 오류)를 실행하고 몇 줄로 요약합니다.

    • aucun débordement, aucune erreur는 깨끗함을 의미합니다.
    • ✗ 줄은 항상 수정해야 합니다.
    • ⚠ 줄은 읽을 가치가 있습니다: 텍스트에 영향을 미치면 수정하십시오.
  • 배치 작업은 한 번의 명령어로. 먼저 N개의 파일을 작성하십시오. 그런 다음 node make.mjs videos/a.json videos/b.json … --rendu를 백그라운드에서 실행하고 출력을 보지 않고 완료될 때까지 기다리십시오.

  • 제자리에서 수정. 문제를 수정하려면 JSON에서 해당 문장이나 장면만 변경하십시오. 전체 파일을 다시 작성하지 마십시오.

  • 에셋을 찾지 마십시오. 로고(logo:bitcoin, logo:metamask…)와 45개의 아이콘(icone:cle…)이 내장되어 있습니다. 사용자가 요청한 경우에만 웹에서 이미지를 검색하십시오.

video.json 형식

{
  "id": "wallet-key",
  "titre": "Your crypto is not in your wallet",
  "langue": "en",
  "voix": { "nom": "en-US-AndrewMultilingualNeural", "debit": "+4%" },
  "marque": { "nom": "BDan", "visuel": "icone:etincelle" },
  "prononcer": { "USDT": "U S D T" },
  "phrases": [
    { "texte": "Your crypto is not in your *wallet*.",
      "scene": { "type": "titre", "lignes": ["Your crypto", "is not in", "your *wallet*"], "visuel": "icone:portefeuille" } },
    { "texte": "The key fits in *twelve words*.",
      "scene": { "type": "chiffre", "valeur": "12", "apres": "words", "au": "twelve", "couleur": "accent" } },
    { "texte": "It's called the recovery phrase." }
  ],
  "fin": { "texte": "I'm BDan.", "sous": "Let's talk new tech.", "audio": "medias/signature.wav" },
  "publication": { "titre": "…", "legende": "…", "hashtags": ["crypto"], "commentaire": "…" }
}
  • phrases[].texte: 음성이 말하는 그대로의 텍스트입니다.

    • *word*는 강세 단어를 표시합니다: 색상이 있는 이탤릭체로 표시되고, 말할 때 펄스 효과가 있으며, 카메라가 해당 단어로 확대됩니다.
    • 문장당 최대 하나를 사용하십시오.
  • scene: 새 장면을 시작합니다.

    • 장면이 없는 문장은 이전 장면을 연장하여 읽을 시간을 확보합니다.
    • 필름 모드에서 장면이 없는 문장은 얼굴을 보여줍니다. 이 경우 "scene": "suite"는 장면을 연장합니다.
  • au ("at"): 요소가 문장의 해당 단어에서 나타납니다(예: "au": "Ledger").

    • au가 없으면 요소는 자체적으로 분산됩니다: 요소 수만큼 문장이 있으면 문장당 하나씩, 그렇지 않으면 균등한 간격으로 배치됩니다.
  • 시각 자료: 장면이 필요로 하는 곳에 사용합니다: "logo:binance", "icone:cadenas", "emoji:🔑" 또는 "medias/screenshot.png"와 같은 경로(.svg 파일은 인라인 처리됨).

  • voix: 음성입니다. nom은 음성 이름, debit는 속도입니다. fichier는 자체 녹음 파일을 가리킵니다.

  • langue: 기본값은 "fr"입니다. 영어의 경우 "en"으로 설정하고 영어 음성을 함께 사용하십시오.

  • marque: 왼쪽 하단의 작은 브랜드 알약입니다. nom은 브랜드 이름, visuel은 로고입니다.

  • prononcer: 발음 변환입니다. 화면에 표시되는 텍스트는 변경하지 않고 음성이 단어를 말하는 방식만 변경합니다.

  • fin: 아웃트로 카드로, marque 로고, texte 및 sous(부제목)를 포함합니다.

    • audio는 카드에서 녹음된 사인오프를 재생합니다.
    • audio가 없으면 카드는 2초간 무음으로 표시됩니다.
  • titre: 파일의 동영상 이름입니다. YouTube 제목은 publication에 넣으십시오.

  • 선택 사항:

    키효과
    musique음악 파일, 음성 아래에서 줄여서 재생
    couleurs색상(예: {"accent": "#2f6bff", "accent2": "#5fa3ff"})
    sons: false전환 시 휙 소리 없음
    blanc문장 사이 무음, 기본값 0.35초
    pause한 문장 후 추가 무음
    sousTitres: false자막 없음
  • 문장 1은 항상 장면이 있어야 합니다. 프레임 1은 사람들이 피드에서 보는 커버이므로 짧고 훅이 있는 titre를 사용하십시오.

16가지 장면(매개변수 및 예시는 references/scenes.md에 있음):

표시할 내용…유형
훅, 강력한 한 줄titre
숫자(가격, 기록, 백분율)chiffre
2~6개의 포인트, 도구 또는 팁liste
2~5단계의 방법etapes
A 대 B, 전/후, 신화/사실duel
브랜드, 코인, 앱logos
앱 스크린샷 또는 화면 녹화telephone
웹사이트, 페이지navigateur
사진(카드 또는 전체 화면)image
대화(AI, 지원, 사기)chat
위험, 사기, 좋은 소식alerte
트렌드, 숫자 비교graphique
명령어, 설치terminal
누군가의 인용문citation
개념과 설명carte
독창적인 시각 효과가 필요한 순간html

장면을 다양하게 사용하십시오.

  • 각 주요 아이디어에 고유한 장면을 할당하십시오: 동영상당 6~10개의 장면.
  • 동일한 유형을 연속으로 두 번 사용하지 말고, 매 동영상마다 유형 순서를 변경하십시오.
  • 고정된 스타일이 템플릿이 되어서는 안 됩니다. 세 개의 동영상이 동일한 장면 순서를 공유하면 시청자가 이탈합니다.

세 가지 모드(자세한 내용은 references/modes.md 참조)

  • Generated: JSON만 있으면 됩니다.
    • 음성은 edge-tts: 무료, 키 불필요, 여러 언어 지원.
    • voix.nom을 설정하여 음성이나 악센트를 변경하십시오.
  • Images: 스크린샷과 사진을 telephone, navigateur 또는 image에 넣고 videos/medias/에서 가져옵니다.
    • 녹음 또는 복제된 음성은 "voix": { "fichier": "medias/voice.wav" }에 넣습니다.
    • 로컬(whisper)에서 전사되어 문장과 동기화됩니다.
  • Filmed: "rush": "medias/clip.mp4"를 설정하십시오. 클립의 오디오가 음성입니다.
    • 장면이 없는 문장은 얼굴을 하단에 자막과 함께 표시합니다.
    • 장면은 해당 아이디어 길이만큼 화면을 덮습니다.
    • 스크립트에서 문장을 작성하십시오: 스킬이 단어별로 동기화합니다.

렌더링 전: 체크리스트

  • 문장 1은 주제를 명확히 진술하고, 제목이 1초 이내에 읽힙니다.
  • 모든 기술 용어는 같은 문장 또는 다음 문장에서 설명됩니다.
  • 문장당 최대 하나의 강세 단어가 있으며, 6~10개의 다양한 유형의 장면이 있습니다.
  • 숫자는 실제 확인된 출처에서 가져옵니다. chiffre 장면은 숫자가 타사 출처에서 온 경우 source를 포함합니다.
  • 콘택트 시트가 검토되었고, 검사가 깨끗하며, 'mot introuvable'(단어를 찾을 수 없음) 경고가 남아 있지 않습니다.
  • 엔딩은 시청자가 머물 이유(다음 내용, 기억할 한 줄)를 제공하며, 모호한 질문이 아닙니다.
  • 브랜드는 이에 대해 이야기하기 위해 표시되며, 파트너십을 암시하기 위해 표시되지 않습니다.
  • 가상의 대화에는 "mention": "Exemple fictif" 또는 영어로 "Example"이 포함됩니다.

문제 발생 시

메시지조치
voix : … edge_ttssh <skill>/scripts/install.sh 실행
mot « x » introuvableau는 해당 장면의 문장에 있는 단어를 정확히 반복해야 함
logo « x » introuvable파일("medias/x.svg")을 제공하거나 공백 없이 브랜드 이름 시도
텍스트 오버플로우텍스트를 줄이거나 더 넓은 장면(carte 또는 liste, duel보다는)으로 전환; CSS는 건드리지 말 것
단어 발음이 잘못됨prononcer에 추가(예: {"Ledger": "Ledjer"})

관련 스킬