에디토리얼 쇼츠 (Fringe Lines)
이 룩은 Greg Isenberg의 쇼츠에서 모델링되었습니다. 모든 쇼츠에 이를 적용하세요:
- 토킹헤드를 6초 이상 유지하지 마세요.
- 3~5초마다 그래픽 또는 레이아웃 변경이 들어갑니다.
- 캡션은 단어 단위로 나타나며, 몇몇 주황색 이탤릭 키워드가 포함됩니다.
- 그래픽은 말하는 내용을 따르므로, 그래픽이 설명하는 단어에 맞춰 나타납니다.
0. 사전 요구사항 (머신별)
pipeline/setup.sh는 venv~/.shorts-skill과 Remotion node_modules를~/.cache/fringe-lines-video에 설치합니다.- 에피소드 대본이 존재해야 합니다:
work/<ep>/words-quinn.json및words-doom.json(pipeline/transcribe_verbatim.py에서 생성). - Remotion 소스:
pipeline/remotion/src/ShortV2.tsx(레이아웃) 및Graphics.tsx(그래픽 유형).
1. 순간 선택 (30~50초)
- 워드 파일에서 독립적인 테이크를 검색하세요:
- 강력한 오프닝 라인 (주장, 숫자, 또는 고백)이 있을 것
- 하나의 아이디어를 담을 것
- 끝 부분에 페이오프 또는 punchline이 있을 것
- 좋은 신호:
- 구체적인 숫자 (백분율, 금액, 인원수)
- 언급된 회사 또는 제품명
- 반대 시각
- 개인 실험 ("I let Codex…")
- 이전 맥락에 의존하는 클립은 피하세요 ("like I said", "that thing").
- 여러
--range를 이어붙일 수 있습니다. 문장 끝에서 자르고, 이음새에서 단어가 반복되지 않는지 확인하세요.
2. 자르기
work/<ep>/shorts.sh에 다음 줄을 추가하고 실행하세요:
b --name short-NN --range START:END [--range ...] --replace "27=>27%" --replace "claude=>Claude"
build_short.py는 다음을 수행합니다:- 필러, 더듬거림, 긴 멈춤 제거
- 활성 카메라 선택
work/<ep>/short-NN/clip.mp4및props.json작성- 평범한 v1 쇼츠 렌더링
--replace는 캡션 텍스트를 수정합니다. 빈 오른쪽은 해당 단어를 숨깁니다.- 항상 수정: 숫자 ("27"→"27%"), 제품명 (Claude, Codex, Descript, GTM, SQL), Whisper 오인식.
- 정확한 출력 타이밍을 얻으려면 다음을 출력하세요:
python3 -c "import json;p=json.load(open('work/<ep>/short-NN/props.json'));print(' '.join(f\"{w['text']}@{w['startMs']/1000:.1f}\" for w in p['words']))"
3. 스타일 스펙 작성: work/<ep>/short-NN/style.json
{
"hook": {"text": "Microsoft wants *27%* of its staff to quit", "end": 2.8},
"outro": {"text": "Grow *without* growing *headcount*", "hold": 2.0},
"emphasis": ["microsoft", "27%", "leave"],
"scenes": [
{"at": 0.0, "mode": "full"},
{"at": 3.0, "mode": "graphic", "graphic": {"type": "stat", "kicker": "Microsoft buyout offer", "value": 27, "suffix": "%", "label": "of employees offered a payout to *leave*"}},
{"at": 6.2, "mode": "card"}
]
}
시간은 자른 클립 내의 초 단위이며, 2단계의 단어 타이밍에서 가져옵니다.
일관성을 유지하는 규칙:
- 구조:
- 장면 0은 항상
full이며, 48단어의3초에서 끝납니다.hook이 약 2.5 - 주장을 말하세요; 클립을 요약하지 마세요.
- 장면 0은 항상
- 리듬:
full→graphic→card→graphic→card… 순서로 모드를 번갈아 사용하며, 40초 쇼츠에 3~6개의 그래픽을 넣습니다.- 후반부에 한 번의 강력한 반응 또는 웃음을 위해
full을 다시 사용하세요.
- 타이밍:
- 각 그래픽은 설명하는 단어보다 0.1
0.3초 전에 시작하고, 2.55초 동안 유지하세요. - 두 그래픽이 직접 이어질 수 있습니다 (예: $20 카드 다음 $100 카드).
- 각 그래픽은 설명하는 단어보다 0.1
- 강조: 10~18개의 키워드를 선택하세요: 숫자, 이름, 그리고 punchline 단어. 일치는 소문자 기준이며 구두점은 무시합니다.
- 악센트: 모든 텍스트 필드에서
*word*는 주황색 이탤릭으로 렌더링됩니다. 문자열당 하나 또는 두 개를 사용하세요. - 아웃트로: 핵심을 다시 진술하거나 시청자에게 질문하는 짧은 한 줄의 2초 엔드 카드.
- 정직성:
- 화면의 숫자는 쇼에서 말한 내용과 일치해야 합니다.
- 차트는 개략적입니다: 가상의 축이나 값 없이
lines모양을 사용하세요. - 발화자가 대략적으로 말한 경우 "roughly" 또는 "~"를 사용하세요.
그래픽 유형 (Graphics.tsx):
| 유형 | 필드 | 용도 |
|---|---|---|
stat | kicker, prefix, value (number, counts up), decimals, suffix, label | 하나의 헤드라인 숫자 |
people | kicker, value (string), label, filled (0–1) | 인원수 / 사람 비율 |
lines | kicker, series: [{label, shape: up|flat|down}], caption | 트렌드 대비 |
quote | text, by? | 화면에 표시되는 punchline |
headline | source, title, highlight | 뉴스, 발표, "평결" |
list | title, items[] | 단계, 제품, 문제점 |
새로운 그래픽 유형이 필요하면 Graphics.tsx와 그 유니언 타입에 추가하세요. 카드 스타일 유지: 흰색 또는 잉크 카드, 36px 반경, 스프링 등장, 로컬 프레임 f에서 실행되는 애니메이션.
4. 렌더링
~/.shorts-skill/bin/python pipeline/style_short.py --ep <ep> --name short-NN --spec work/<ep>/short-NN/style.json
- 얼굴 트랙 (
pipeline/face_track.py, YuNet)은 한 번 계산되어short-NN/faces.json에 캐시됩니다. 원형 PiP와 카드를 얼굴 중앙에 유지합니다. 클립을 다시 자르면 파일을 삭제하세요. - 효과음은 합성됩니다: 각 장면 전환마다 슈슉, 그래픽이 배치될 때 팝.
--sfx-db -20으로 믹싱됩니다. - 음량: −14 LUFS.
- 출력:
out/shorts/<ep>-short-NN-v2.mp4.
5. QA (항상, 보고 전에)
프레임을 추출하여 확인하세요:
for t in 1.5 5 10 15 20 25 30 35 40; do ffmpeg -v error -y -ss $t -i out/shorts/<ep>-short-NN-v2.mp4 -frames:v 1 -vf scale=270:-1 /tmp/q_$t.png; done
다음 각 항목을 확인하세요:
- 후크: 읽을 수 있어야 하며 얼굴을 가리지 않아야 합니다.
- 그래픽: y≈1340–1600에 위치한 캡션 블록과 겹치지 않아야 합니다. 카드 밖으로 텍스트가 넘치지 않아야 합니다. "+$500K" 같은 긴 stat 값은 자동으로 축소됩니다.
- PiP: 얼굴이 원의 중앙에 있어야 합니다.
- 캡션:
*가 남아 있지 않아야 하며, 키워드는 주황색으로 렌더링되어야 합니다. - 음량:
ffmpeg -i out.mp4 -af ebur128 -f null - 2>&1 | grep " I:"가 약 −14로 나와야 합니다.
사용자에게 보고:
- 쇼츠의 주제와 길이.
- 확인해야 할 숫자.
- 남아 있는 욕설 여부.