자막(Captions)
목표: 시청자가 노력 없이 읽는 자막을 만드는 것입니다. 각 자막은 짧고 완전한 의미 덩어리로, 정확한 단어 타이밍에 맞춰 영상 내내 같은 위치에 표시됩니다.
이 작업은 편집 순서의 5단계입니다: A-롤 컷, B-롤, 프레이밍, 헤드라인, 자막. 프레이밍이 완료된 영상에, 헤드라인 이후에 실행되므로 자막이 헤드라인을 가리지 않게 할 수 있습니다.
이 스킬은 Claude Code와 Runneth를 위해 제작되었습니다.
시작하기 전: 도구
Runneth에서는 모든 것이 이미 설치되어 있습니다. 이 섹션은 건너뛰세요.
Claude Code에서는 이 스킬이 video-editing-setup 스킬이 설치하는 무료 비디오 도구가 필요합니다. ~/.video-editing-tools/bin/ffmpeg -version이 실행되는지 조용히 확인하세요. 실행된다면 ~/.video-editing-tools/bin에 있는 도구들(ffmpeg, ffprobe, python)을 이 스킬에서 ffmpeg, ffprobe 또는 python3라고 표시된 곳에 사용하고 계속 진행하세요. 실행되지 않는다면 먼저 video-editing-setup 스킬을 따라 한 후 여기로 돌아오세요.
폰트: Figtree Bold, 이 스킬이 사용하는 유일한 폰트입니다. 무료 Google Fonts 폰트입니다. 컴퓨터에 있거나 프로젝트 옆 fonts 폴더에 있는지 조용히 확인하세요. 없다면 다음과 같이 물어보세요: "이 스킬은 무료 Google Fonts 폰트인 Figtree를 사용합니다. 다운로드할까요?" '예'라는 답변을 받으면 Google Fonts(fonts.google.com/specimen/Figtree)에서 Figtree Bold 파일을 다운로드하여 프로젝트 옆 fonts 폴더에 넣고 계속 진행하세요. 이 확인은 Runneth에서도 적용됩니다.
필요한 것
- 프레이밍이 완료되고 헤드라인이 있는(또는 그 타이밍이 있는) 영상.
- 스크립트(있는 경우). 이름과 제품 단어가 올바르게 표기되도록 하기 위함입니다.
- 헤드라인이 화면에 표시되는 시점과 위치.
0단계: 먼저 스타일 물어보기
다음 질문을 하나씩, 각 답변을 기다리며 하세요:
- "자막을 한 번에 한 단어씩 표시할까요, 아니면 여러 단어씩 표시할까요?"
- 여러 단어씩 표시하는 경우만: "현재 발화 중인 단어를 다른 색상으로 강조할까요?"
- '예'인 경우만: "어떤 색상을 사용할까요?" 기본값으로 밝은 노란색(#FFFF3A)이나 브랜드 색상을 제안하세요.
1단계: 각 단어와 시간 얻기
- 영상 자체의 음성을 단어 타임코드와 함께 전사합니다(Faster-Whisper
base,word_timestamps=True,vad_filter=False). 타임코드는 이 특정 영상에서 나와야 합니다. 모든 컷이 타임코드를 이동시키기 때문입니다. - 스크립트의 철자를 사용하여 이름, 브랜드, 제품 단어를 표기하고, 전사본의 타이밍은 그대로 유지합니다.
- 모든 말한 단어는 자막을 가집니다. 말하지 않은 것은 자막을 가지지 않습니다.
2단계: 의미 단위로 덩어리 나누기 (여러 단어씩 표시하는 경우만)
- 보통 덩어리당 1~3단어, 최대 약 5단어로, 구절을 온전히 유지하면서 너비도 맞을 때 사용합니다.
- 함께 유지: 명사와 그 수식어("수면 음료"), 이름("Claude skill"), 동사와 그 조사("잠자리에 들다"), 짧고 완전한 생각("하지만 그게 내 느낌이었어").
- 각 덩어리는 의미를 담은 단어로 끝납니다. 작은 단어(the, a, of, to, and, because, that, I)는 다음 덩어리의 시작으로 넘깁니다.
- 각 덩어리는 첫 단어부터 다음 덩어리가 시작될 때까지 표시되므로, 문장 중간에 화면이 비어 깜빡이는 일이 없습니다.
- 목록 전체를 시청자 입장에서 한 번 읽고 어색한 끊김이 있으면 수정합니다.
3단계: 디자인
모든 자막은 Figtree Bold, 흰색, 검은 외곽선을 사용합니다. 상자, 그림자, 팝인, 바운스 등은 없습니다. 자막은 그냥 나타납니다. 대부분 소문자로, I, 이름, 브랜드는 대문자로 표기하며 끝에 마침표나 쉼표를 붙이지 않습니다.
- 한 번에 한 단어: 약 140px 크기에 6px 외곽선, 한 번에 한 단어씩 화면에 표시됩니다. 각 단어는 다음 단어가 시작될 때까지 유지됩니다. 긴 단어는 약 720px 너비에 맞게 축소됩니다. 2단계의 덩어리 나누기는 건너뜁니다.
- 여러 단어씩: 약 60px 크기에 3px 외곽선, 2단계에서 만든 덩어리를 사용합니다.
- 단어 강조 포함: 덩어리 안에서 현재 발화 중인 단어가 선택한 색상으로 변경됩니다(노래방 스타일).
- 단어 강조 없음: 덩어리 전체가 흰색으로 유지됩니다.
4단계: 위치
- 중앙, 가슴 높이, 1080x1920 영상에서 약 y 1260~1305: 턱 아래, 앱의 자막과 버튼 위.
- 안전 영역 내: 안전 영역은 post-preview 스킬에서 제공합니다. 1080x1920 프레임에서 모든 것을 x 100
880, y 2901340 안에 유지하세요(Reels, Stories, Feed, TikTok, Facebook 모두에서 안전한 하나의 상자). 가장자리 가까이 배치할 때는 post-preview에서 해당 위치가 정확히 덮는 영역을 확인하세요. 따라서 중앙 정렬된 자막은 모든 글자(외곽선 포함)를 x 200~880(약 680px 너비) 안에, y 1340 위에 유지합니다. 각 덩어리의 너비를 측정하고, 너무 긴 덩어리는 분할합니다. - 헤드라인과 겹치지 않음. 헤드라인이 화면에 표시되는 동안 자막은 명확한 간격을 두고 아래에 위치합니다. 헤드라인이 낮게 위치할 때는 자막이 헤드라인과 겹치지 않도록 안전 영역 내에서 아래로 이동합니다.
- 영상 내내 같은 위치, 그래서 시선이 항상 어디를 봐야 할지 알 수 있습니다.
- 자막은 입 아래에 위치하며, 얼굴을 가리지 않습니다. 모든 자막은 눈, 코, 입을 피합니다. 자막 위치가 얼굴을 가릴 정도로 얼굴이 낮게 위치한다면 프레이밍이 잘못된 것입니다. 프레이밍 단계로 보내 수정하세요(또는 수정되는 동안 안전 영역 내에서 자막을 아래로 이동하세요).
5단계: 생성 및 합성
- 자막을 ASS(Advanced SubStation Alpha) 자막 파일로 작성합니다. 단어 강조가 있는 경우 색상이 발화와 함께 이동하도록 단어별로 하나의 이벤트를 사용합니다. 글자 간격은 인라인
\fsp태그에 넣습니다. - 렌더러가 올바른 폰트 두께를 사용하도록 Figtree Bold 파일만 있는 fonts 폴더를 가리킵니다:
ass=captions.ass:fontsdir=fonts. - 원본 품질 영상(x264, slow, CRF 14~18)에서 한 번에 합성하고, 사운드는 변경 없이 그대로 복사합니다.
6단계: 공개 전 확인
- 모든 단어, 한 번씩, 정시에: 자막 목록을 전사본과 단어 대 단어로 비교합니다.
- 각 덩어리에서 한 프레임씩: 안전 영역 내, 잘린 부분 없음, 헤드라인과 겹치지 않음, 자막이 입 아래에 있음. 얼굴 감지기를 사용하거나 각 프레임을 읽습니다. 얼굴의 어떤 부분이라도 자막이 가리면 검사에 실패합니다.
- 단어 강조가 있는 경우: 색상이 현재 발화 중인 단어에 정확히 적용되는지 영상의 여러 지점에서 확인합니다.
7단계: 편집자로부터 배우기
편집자가 분할, 단어 또는 디자인을 변경할 때 이유를 물어보세요(편집자가 이미 말하지 않은 경우). 그 이유를 아래 "편집자로부터의 자막 규칙"에 "무엇이 참이어야 하는지" 형태로 기록하세요. AI가 스스로 생각해낸 이유에는 "(AI)"라고 표시하며 이 규칙을 절대 변경하지 않습니다.
편집자로부터의 자막 규칙
(처음에는 비어 있음. 편집자가 제시하는 각 규칙을 여기에 추가합니다.)