숏폼 비디오 (Short-Form Video)
스와이프를 견디는 9:16 비디오를 설계하세요. 숏폼은 작은 런치 필름이 아닙니다. 시청 유지 기계입니다. 첫 1초를 벌어주는 후크, 몇 초마다 주의를 환기시키는 패턴 인터럽트, 그리고 100%를 넘는 시청 시간을 확보하는 반복 재생 루프로 구성됩니다. 핵심은 타이밍이지 완성도가 아닙니다.
사용 시기
- 릴스 / 틱톡 / 유튜브 쇼츠 (7~60초, 세로 9:16).
- 시청 유지율 편집: 이탈 구간 수정, 패턴 인터럽트 추가, 속도 조절.
- 후크, 끊김 없는 루프, 재사용 가능한 숏폼 템플릿 (하나의 디자인, 다양한 주제).
이야기 구조 (시청 유지 계약)
숏폼 스토리텔링은 시청자의 엄지손가락과의 계약입니다. 매 초마다 다음 1초를 다시 벌어야 합니다. 이야기는 시청 유지 곡선에서 거꾸로 만들어지지, 인트로에서 앞으로 만들어지지 않습니다. 타임라인을 건드리기 전에 다음을 확정하세요.
- 비디오당 하나의 아이디어. 숏폼은 정확히 하나의 페이오프를 전달합니다. 두 번째 아이디어는 주의를 분산시키고 곡선 중간이 처지게 만듭니다. 대신 두 번째 비디오로 만드세요. 한 문장으로 핵심 전달 내용을 말할 수 없다면 아직 숏폼이 준비되지 않은 것입니다.
- 처음 ~3초 안에 루프를 열고, 마지막에 닫으세요. 후크는 질문이나 공백(열린 루프)을 제시하고, 페이오프가 그 답을 제공합니다. 루프가 열려 있기 때문에 시청자는 계속 봅니다. 따라서 절대 일찍 답하지 말고, 절대 페이오프를 준비 단계 아래에 묻지 마세요.
- 데드 에어(침묵) 금지. 모든 비트는 아이디어를 발전시키거나 주의를 환기시킵니다. 둘 다 하지 않는 것은 잘라내세요. 침묵, 느린 시작, 서두 인사("안녕하세요, 여러분, 이번 영상에서는…")는 시청자가 넘겨버리는 지점입니다.
- 곡선이 단위 작업이지, 컷이 아닙니다. 알고리즘은 초당 시청 유지율 곡선을 평평하게 유지하는 것을 배포합니다. 곡선을 평평하게 만드는 "좋은" 편집보다 곡선을 높게 유지하는 "못생긴" 편집이 승리합니다. 여러분은 곡선을 편집하는 것이며, 후크가 그 이후의 모든 것을 결정합니다. 후크부터 먼저 수정하세요.
서사적 뼈대 (후크 → 설정 → 본문 → 페이오프/루프 흐름은 아래 표에서 예산이 책정됨):
| 단계 | 이야기 역할 | 실패 시 결과 |
|---|---|---|
| 후크 | 루프 열기; 페이오프 약속 | 처음 3초 안에 스와이프 |
| 긴장 유지 | 본문 동안 공백 유지 | 중간이 지루해짐, 중간 이탈 |
| 페이오프 | 루프 닫기 — 하나의 아이디어 전달 | "시간 낭비", 공유 없음 |
| 루프 / CTA | 프레임 0으로 피드백 또는 명확한 요청 하나 | 재시청 없음, 행동 없음 |
(시청 유지 아크 표는 각 단계에 초를 할당합니다. 이 섹션은 그 뒤에 있는 서사적 논리와 순서입니다. 후크 문법은 후크 패턴을 나열합니다.)
모든 것을 결정하는 하나의 지표
시청 유지율, 제작 가치가 아닙니다. 알고리즘은 시청자를 붙잡는 것을 배포합니다. 약 87%가 3초 안에 시청 또는 스와이프를 결정하며, 배포 기준은 70% 이상의 평균 시청 완료율(쇼츠 ~73%, 틱톡 ~78%, 릴스 ~65%) 근처에 있습니다. 아래의 모든 결정은 그 곡선을 위해 이루어집니다. 0:04에 지루하게 만드는 완벽한 샷보다 지루하지 않게 잡아주는 못생긴 샷이 낫습니다.
시청 유지 아크
| 비트 | 역할 | 예산 (20초 숏폼 기준) |
|---|---|---|
| 후크 (0~1초) | 열린 루프를 만드는 한 프레임 + 한 줄 | 0~1초 |
| 설정 | 왜 봐야 하는지 — 약속, 이해관계, 또는 공백을 설명 | 1~4초 |
| 본문 | 비트 단위로 가치 전달; 비트당 하나의 아이디어 | 4~17초 |
| 페이오프 / 루프 | 루프 닫기 — 또는 프레임 0으로 피드백 | 17~20초 |
본문의 길이를 조절하고, 후크는 절대 변경하지 마세요. 60초 숏폼은 더 긴 본문과 더 많은 비트를 가지지만, 동일한 1초 후크를 사용합니다.
후크 문법 (처음 ~1초)
후크는 뇌가 닫고 싶어 하는 호기심 공백을 여는 문장 + 시각입니다. 하나의 패턴을 선택하고 고수하세요:
| 후크 유형 | 형태 | 가장 적합한 용도 |
|---|---|---|
| 열린 루프 | "X가 Y를 유지하는 이유는…" (답변 지연) | 대부분의 콘텐츠 |
| 직접 약속 | "30초 안에 ___하는 3가지 방법" | 교육 / 목록형 |
| 패턴 인터럽트 | 스냅-줌 / 휘프-팬 / 프레임 1의 시각적 불일치 | 엔터테인먼트 |
| 부정 | "___ 하지 마세요" / "당신의 ___는 틀렸습니다" | 강한 의견 |
두 가지 규칙: 후크 텍스트는 프레임 1에 화면에 자막으로 표시되어야 하며 (85%가 음소거 시청), 가장 눈에 띄는 시각 역시 첫 프레임이어야 합니다. 느린 페이드 인은 절대 사용하지 마세요. 강력한 오프닝 프레임을 유지하고, 검은색에서 페이드 업하지 마세요.
패턴 인터럽트 및 컷 리듬
패턴 인터럽트는 주의를 환기시키는 모든 변화입니다: 하드 컷, 줌 펀치, B롤 삽입, 음향 효과, 자막 팝, 각도 변경. 숏폼에서는 밀도가 높습니다. 약 2~4초마다 시각적 변화가 있어야 하며, 약 4초마다 인터럽트가 있는 비디오는 정적인 얼굴만 나오는 비디오(~41%)에 비해 약 58%의 시청 유지율을 보입니다. 가장 큰 적은 평평한 중간입니다. 틱톡은 시청 완료 곡선이 평평해지면 배포를 제한하므로, 본문을 에너지가 낮은 테이크로 연결하지 마세요.
// 모든 인터럽트를 실제 시간(wall-clock)이 아닌 FRAME 기준으로 구동 — 결정론적으로 렌더링
import { useCurrentFrame } from "remotion";
const fps = 30;
const cuts = [0, 1.2, 3.0, 5.4, 8.0, 11.2, 14.0]; // 초 — 의도적으로 불규칙
const frame = useCurrentFrame();
const shot = cuts.findIndex((t, i) => frame < (cuts[i + 1] ?? Infinity) * fps);
간격을 다양하게 하세요. 메트로놈처럼 규칙적이면 지루함으로 읽힙니다. 불규칙한 컷은 속도감으로 읽힙니다. 펀치인 줌은 새 푸티지가 필요 없는 가장 저렴한 인터럽트입니다:
import { useCurrentFrame, interpolate, spring, useVideoConfig } from "remotion";
const PunchIn = ({ at, children }) => {
const frame = useCurrentFrame(); const { fps } = useVideoConfig();
const s = spring({ frame: frame - at * fps, fps, config: { damping: 12, stiffness: 200 } });
const scale = interpolate(s, [0, 1], [1, 1.12]); // 비트에 맞춰 112%로 스냅
return <div style={{ transform: `scale(${scale})`, transformOrigin: "50% 45%" }}>{children}</div>;
};
자막
대부분의 시청자는 음소거 상태로 시청하므로, 화면 자막은 선택이 아닌 필수입니다. 콘텐츠를 전달하고 각 구문이 나타날 때 패턴 인터럽트 역할도 합니다. 줄당 4~7단어, 높은 대비, 안전 영역 내에 배치하세요. 여기서 자막 애니메이션을 다시 구현하지 마세요. caption-animation 스킬을 사용하여 단어별 타이밍, 가라오케 하이라이트, 스타일링을 처리하세요. 이 스킬은 시청 유지 타임라인에 자막을 배치하고 9:16 안전 영역 내에 두는 역할만 합니다.
루프 및 재시청
끊김 없는 루프는 각 재시청을 새로운 시청 시간으로 계산합니다. 깨끗한 8초 루프를 3번 시청하면 300% 시청 완료율로, 가장 강력한 신호입니다. 두 가지 기술: 마지막 프레임을 첫 프레임과 일치시키고 (동일한 구성, 위치, 색상), 문장 루프를 작성합니다. 후크를 페이오프가 프레임 0으로 다시 피드백되도록 작성하세요 ("…그래서 나는 절대 — " → 시작으로 루프). 재시청에 가장 좋은 길이는 약 7~15초입니다.
9:16 안전 영역
플랫폼 UI가 텍스트나 얼굴을 가리지 않도록 범용 안전 영역 안에 컴포즈하세요.
| 영역 | 픽셀 (1080×1920) | 피해야 할 것 |
|---|---|---|
| 범용 안전 (모든 플랫폼) | 중앙 900×1400 | 그 외부에 중요한 콘텐츠 배치 금지 |
| 상단 | 약 120px 확보 | 프로필 / 사운드 UI |
| 하단 | 약 320px 확보 | 자막, CTA, 해시태그, 오디오 바 |
| 오른쪽 | 약 120px 확보 | 좋아요 / 댓글 / 공유 버튼 |
후크 텍스트와 주요 피사체를 중앙 900×1400 상자 안에 넣으세요. 하단 약 320px은 편집기에서 비어 보여도 확보하세요. 플랫폼이 자체 자막과 버튼을 그리는 곳입니다.
출력 체크리스트
- 후크 텍스트가 프레임 1에 화면에 표시됨; 가장 강력한 시각이 첫 프레임 (페이드 인 없음).
- 처음 ~4초 안에 하나의 열린 루프 / 약속 설정.
- 약 2~4초마다 시각적 패턴 인터럽트; 간격 불규칙; 평평한 중간 없음.
- 자막 있음 (
caption-animation통해), 4~7단어, 안전 영역 내. - 루프 닫힘 — 첫/마지막 프레임 일치 또는 프레임 0으로 피드백되는 문장.
- 900×1400 중앙 상자 안에 컴포즈; 하단 320px / 상단 120px / 오른쪽 120px 확보.
- 모든 애니메이션 값은
useCurrentFrame()에서 파생 — CSS/라이브러리 타이머 사용 금지.
전달 및 검증 (렌더링된 스틸 → MP4)
패키징된 헬퍼 (
scripts/):scripts/contact-sheet.sh sheet.png f-hook.png f-mid.png f-end.png로 스틸을 타일링한 다음,scripts/probe-mp4.sh out.mp4 [WxH] [fps]로 인코딩을 확인하세요.scripts/README.md참조.
숏폼은 Remotion 컴포지션 (<Composition> + zod schema + defaultProps)으로 제공됩니다. 모든 컷, 펀치인, 인터럽트는 useCurrentFrame()에 의해 구동되며, Date.now() / Math.random() / 타이머는 절대 사용하지 않습니다. 산출물 = out/*.mp4 + 프로젝트 (주제별로 재렌더링). 9:16 세로 (1080×1920)가 기본입니다.
검증 루프 — 스틸 렌더링 → 검사 → 인코딩. 세 가지 프레임이 시청 유지를 결정하는 세 가지 사항(후크, 속도, 루프 이음새)을 테스트합니다.
# 후크 / 본문 중간 / 마지막 프레임의 스틸 — 배송된 프롭(실제 주제, 기본값 아님) 사용
npx remotion still Short out/f-hook.png --frame=10 --props='{"topic":"...","hook":"..."}' # ~처음 3초 즉시 읽힘
npx remotion still Short out/f-mid.png --frame=N --props='{"topic":"...","hook":"..."}'
npx remotion still Short out/f-end.png --frame=L --props='{"topic":"...","hook":"..."}' # L = durationInFrames-1
# 각 PNG 검사:
# - 후크 프레임 (~프레임 0 / 처음 3초): 후크 텍스트가 화면에 표시되고 즉시 읽힘; 가장 강한 시각이 이미 올라와 있음 (페이드 인 없음)
# - 루프 이음새: f-hook(프레임 0)과 f-end(마지막 프레임) 비교 — 동일한 구성/위치/색상으로 보이지 않는 루프 컷 확인
# - 9:16 안전 영역: 후크 + 주요 피사체가 중앙 900x1400 상자 안에 있음; 상단 약 12%, 하단 약 20-35% (자막/CTA/오디오), 오른쪽 동작 버튼 영역 확보
npx remotion render Short out/short.mp4 --props='{"topic":"...","hook":"..."}' # 스틸 검증 후 한 번 인코딩
npx remotion render Short out/demo.gif --codec=gif # README 증명 클립
주제별 / 배치별: 모든 주제를 렌더링하기 전에 스틸로 하나의 주제를 검증하세요. durationInFrames/fps를 위해 npx remotion compositions를 사용하여 중간 및 마지막 프레임을 선택하세요.
완료 전 확인 사항:
- 스틸이 후크, 중간, 마지막 프레임에서 오류 없이 깔끔하게 렌더링됨.
- 후크 프레임이 즉시 읽힘 (화면 텍스트 + 가장 강한 시각이 앞쪽에, 페이드 인 없음); 첫 번째와 마지막 프레임이 깔끔한 루프 이음새를 위해 일치함.
- 후크 + 피사체 + 자막이 모든 확인된 프레임에서 9:16 중앙 900×1400 안전 상자 안에 있음.
- 프레임 기반 전용 —
Date.now()/Math.random()/ 타이머 없음; 컷 불규칙, 평평한 중간 없음. - 실제 주제의 배송된 프롭 (
defaultProps아님)이 올바르게 렌더링됨; MP4 인코딩 완료, GIF는 선택 사항.
참고 파일
references/retention-pacing.md— 완전히 실행 가능한 Remotion<Short>컴포지션: 불규칙 컷이 있는 프레임 기반 샷 스케줄러, PunchIn 패턴 인터럽트, 화면 후크, 9:16 안전 영역 오버레이, 끊김 없는 첫 번째/마지막 프레임 루프 포함. 또한 후크 패턴 라이브러리, 시청 유지 곡선 디버깅 방법, 플랫폼별 안전 영역 맵, 템플릿×주제 배치 렌더링 패턴 포함.