Video Lite v2
작은 스토리보드 JSON으로 완성된 MP4를 생성합니다. 모든 프레임은 cairo로 그린 벡터 아트(안티앨리어싱된 텍스트, 기호, 기하학, 광채, 입자, 카메라 이동, 장면 전환)이며 ffmpeg로 인코딩됩니다. 음성은 espeak-ng/MBROLA(브라질 포르투갈어 및 영어)로, 부드러운 절차적 배경 음악이 음성 아래에서 자동 조절되며, 컷과 등장 시 후시/팝 효과음이 추가됩니다. 구형 Pentium M에서도 실행 가능: 720p 동영상 약 90초를 약 7~8분에 제작(드래프트 480p: 약 4분). Node, Chromium, GPU, 모델, 네트워크가 전혀 필요 없습니다.
<skill-dir> 아래는 이 SKILL.md 파일이 있는 폴더입니다. 모든 명령어는 사용자의 프로젝트 폴더에서 실행하며, 출력물은 그곳에 생성됩니다.
골든 패스 — 정확히 이 순서대로 진행
# 1. 머신을 한 번만 확인합니다(속도 측정 포함, 약 1분). 누락된 항목과 해결 방법을 알려줍니다.
python3 <skill-dir>/scripts/doctor.py
# 음성이 없나요? Debian/Ubuntu/antiX에서는 root 권한 없이 espeak-ng + MBROLA pt-BR을 ~/.local에 설치합니다:
bash <skill-dir>/scripts/setup_voice.sh
# 2. FORMAT(작업 유형)과 THEME(분위기)로 시작합니다:
python3 <skill-dir>/scripts/compose.py formats # explainer-motion / story / listicle / explainer / promo / demo
python3 <skill-dir>/scripts/compose.py themes # mystic, neon, terminal-green, sunset, ocean, paper, mono
python3 <skill-dir>/scripts/compose.py new --format explainer-motion --theme neon --out storyboard.json
# 그런 다음 storyboard.json을 편집합니다: 모든 "TROQUE:" 플레이스홀더는 이 동영상의 실제 내용으로
# 바뀌어야 합니다(렌더링 시 남은 플레이스홀더가 있으면 거부합니다). 장면을 자유롭게 추가, 제거 또는 재정렬할 수 있습니다.
# 내레이션 속도: 초당 약 14자. 장면당 하나의 아이디어, 1~2문장.
# 3. 렌더링합니다. MP4가 작성될 때까지 차단합니다. --draft = 480p, 더 빠름: 구형 머신에서는 먼저 사용하세요.
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --draft
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4
# 선택 사항: 긴 렌더링 전에 한 프레임을 미리 봅니다(video.png 생성):
python3 <skill-dir>/scripts/render.py storyboard.json --out video.mp4 --still 12.5
# 4. 실제 파일(길이, 비디오+오디오 스트림)을 확인하고 연락처 시트 PNG를 봅니다.
python3 <skill-dir>/scripts/verify.py video.mp4 --require-audio
ffmpeg 파이프라인을 직접 작성하거나 프레임을 직접 그리지 마세요: render.py가 레이아웃, 텍스트 맞춤, 애니메이션, 타이밍 및 동기화를 담당합니다. 단계가 실패하면 메시지를 읽고 무엇을 변경해야 하는지 확인하세요. 머신이 느리고 급한가요? render.py ... --fast (입자 수 감소, 카메라 이동 없음).
스토리보드
{
"theme": "mystic",
"voice": "mb-br3",
"scenes": [
{"kind": "title", "title": "O Caibalion", "subtitle": "os sete princípios herméticos", "symbol": "☿",
"narration": "Conheça o Caibalion e seus sete princípios."},
{"kind": "kinetic", "text": "O Todo é *Mente*",
"narration": "O primeiro princípio diz: o Todo é mente."},
{"kind": "bullets", "title": "Na prática", "bullets": ["observe seus pensamentos", "mude o foco", "repita"],
"narration": ["Observe seus pensamentos.", "Mude o foco.", "E repita todo dia."]},
{"kind": "wheel", "title": "Os sete princípios", "center": "☿",
"nodes": ["Mentalismo", "Correspondência", "Vibração", "Polaridade", "Ritmo", "Causa e Efeito", "Gênero"],
"narration": "Mentalismo, correspondência, vibração, polaridade, ritmo, causa e efeito e gênero."},
{"kind": "cta", "title": "Leia o livro", "subtitle": "domínio público desde 1908",
"narration": "Leia e tire suas conclusões."}
]
}
최상위: theme, voice (pt-br, en-us, es... 또는 MBROLA mb-br3 / mb-br1 / mb-br4, 훨씬 덜 로봇 느낌; pt-br의 경우 설치 시 mb-br3 사용; "none" = 무음). 말하는 속도는 render.py에서 설정합니다(약 초당 14자); "speed": 0.9–1.15로 조정 가능(v1의 rate는 무시됨). 선택 사항: 모든 장면에 transition, "music": false(음성 아래 부드러운 코드 없음), "sfx": false(후시/팝/라이저 없음), "captions": true(내레이션을 자막으로 표시; 기본값은 꺼짐 — 화면에는 핵심 단어를, 음성으로 나머지를 전달).
모든 장면: kind(아래), narration, 선택 사항 seconds(기본값: 내레이션 길이 + 짧은 일시 중지; 장면을 더 길게만 만들 수 있음), 선택 사항 transition(fade | slide | zoom | wipe | iris | cut; 기본값: 테마 자체 순환), 선택 사항 camera(auto 느린 확대/이동, 또는 none).
음성에 항목 동기화: narration은 문장 목록이 될 수 있습니다. bullets, wheel, icons 또는 split 장면에 N개의 항목이 있고 내레이션에 N개의 문장(또는 N+1: 먼저 소개)이 있으면, 문장 k가 시작될 때 항목 k가 정확히 나타납니다:
{"kind": "bullets", "title": "Por quê", "bullets": ["roda em PC velho", "modelos grátis", "testa tudo"],
"narration": ["Três motivos.", "Roda em computador velho.", "Usa modelos grátis.", "E testa antes de dizer pronto."]}
내레이션에 링크, 이메일 또는 파일 경로를 넣지 마세요(렌더링 시 거부됨): 화면에 표시하세요(cta 부제목). 각 문장은 약 110자 미만으로 유지하세요.
장면 종류 (compose.py kinds가 이 목록을 출력합니다)
| kind | 보이는 내용 | 필드 |
|---|---|---|
title | 큰 제목이 단어별로 나타나고, 밑줄이 그어지며, 선택적으로 위에 기호 표시 | title, subtitle, symbol (선택) |
bullets | 제목 + 항목이 하나씩, 각각 아이콘과 함께 표시 | title, bullets: ["text", {"text": "…", "icon": "fa-rocket"}] |
terminal | 터미널 창에 타이핑되는 모습 | lines: ["$ comando", "saída"] |
quote | 큰 따옴표, 단어가 페이드 인, 저자가 슬라이드 인 | title (인용문), subtitle (저자) |
cta | 마무리 호출: 제목이 팝, 부제목이 빛나는 버튼 안에 | title, subtitle, symbol (선택) |
symbol | 하나의 거대한 기호가 획별로 그려진 후 채워지고 + 광채, 후광 링 | symbol, title, subtitle, spin (true/false) |
geometry | 신성 기하학이 점진적으로 그려진 후 광채 | shape (이름 하나 또는 목록), title, subtitle, labels (arrows에만 해당) |
wheel | 원 위에 2~12개의 노드가 하나씩 나타나며 중심까지 선이 연결됨; 현재 노드가 빛남 | title, nodes: ["a", {"label": "b", "icon": "fa-cog"}], center (단어 또는 기호), active (1..N: 해당 노드 강조) |
icons | 1~8개의 아이콘 그리드가 라벨과 함께 팝업 | title, items: [{"icon": "fa-cogs", "label": "motor"}] |
kinetic | 큰 단어가 음성과 동기화되어 나타남; *단어* = 강조 색상 + 광채 | text |
split | 텍스트 열 + 반대편 일러스트레이션 | title, text 또는 bullets, 그리고 symbol 또는 shape, side (right/left: 아트가 위치할 쪽) |
shape 이름: circle, triangle, triangle-down, square, hexagon, hexagram, pentagram, flower (생명의 꽃), seed (생명의 씨앗), vesica, spiral (황금), eye (삼각형 안의 눈), ouroboros, wave (진동), pendulum (리듬), arrows (원인 → 결과; "labels": ["causa", "efeito", "causa"] 사용). 결합: "shape": ["circle", "hexagram"].
symbol / icon / center는 다음을 허용합니다(compose.py symbols가 모든 이름을 나열):
- 문자:
"☿","☤","☯","✡","⚖","∞","🜂"(연금술),"♀","☉","☽"… - Font Awesome 4 이름:
"fa-cogs","fa-book","fa-rocket","fa-lightbulb-o","fa-globe","fa-terminal"… - 명명된 기호:
"mercurio","caduceu","yin-yang","balanca","fogo","agua","olho"… - 이모지:
"🔥","🚀","💡"(색상; 획별로 그리지 않고 팝으로 표시).
완전한 약 90초 예시(hermetism, mystic 테마, 모든 일러스트레이션 종류): <skill-dir>/examples/caibalion.json.
좋은 취향, 빠르게
- 장면 종류를 다양하게: 같은 종류의 장면을 3번 연속하지 마세요. 텍스트 중심(
bullets,split)과 시각적(symbol,geometry,kinetic,wheel)을 번갈아 사용하세요. - 제목은 짧게(≤ 5단어), 부제목 ≤ 10단어, 불릿은 각각 ≤ 6단어, 최대 5개의 불릿.
- N개의 항목 목록: 하나의
wheel개요, 그 다음 각 항목당 하나의 장면(symbol/geometry), 또는"active": k와 함께wheel다시 사용. - 테마:
mystic(남색/금색, 세리프, 별),neon(자홍/시안, 신스 그리드),terminal-green(코드),sunset,ocean,paper(밝은, 세리프),mono.
테스트
python3 <skill-dir>/scripts/selftest.py는 모든 장면 종류를 잠시 드래프트로 렌더링하고 ffprobe로 MP4를 확인합니다(exit 0 = 정상). --voice는 espeak + 자막도 테스트합니다.