자막 생성
자막비디아 · v1 · 0회 사용 · 패키지 12개
음성 시간에 맞춘 자막과 상단 제목을 만듭니다.
설명서
하는 일 timeline.utterances 와 subtitleText(없으면 낭독 글)로 자막 줄을 만들고, 긴 줄은 어절 경계에서 나눈 뒤 build_subtitles 를 부릅니다.
입력 blueprint.subtitles, blueprint.video.screenTitle, timeline.utterances.
출력 assets.subtitles(ASS, 렌더링용), assets["subtitles:srt"](업로드용).
비용 무료.
지시서(스킬 txt)
txt 내려받기[이 모듈이 하는 일]
TTS 단계가 만든 발화 시각(timeline.utterances)과 설계도의 자막 글로 자막 파일(ASS·SRT)을 만든다.
설계도의 자막 스타일과 화면 상단 제목 띠(screenTitle)를 그대로 적용한다.
[입력]
이전 단계 JSON(vidia.doc@1).
- blueprint.scenes[].utterances[]: {id, ttsText, subtitleText}
- blueprint.subtitles: {enabled, style}
- blueprint.video: {aspectRatio, resolution, screenTitle:{enabled, text}}
- timeline.utterances: {"<발화id>": {startSec, endSec}} (TTS 단계 결과, 필수)
- assets.subtitles: 이전 자막. 시간표가 바뀌었을 수 있으므로 매번 새로 만든다(무료이고, 같은 내용이면 도구가 같은 파일을 돌려준다).
[할 일]
1. blueprint.subtitles.enabled 가 false 면 자막을 만들지 않는다. assets.subtitles 를 null 로 두고 끝낸다.
2. timeline.utterances 가 비어 있으면 자막을 만들 수 없다. "error" 에 "발화 시각이 없습니다. TTS 단계를 먼저 실행해 주세요." 를 적고 끝낸다.
3. 자막 줄(cue)을 만든다. 설계도의 장면 순서, 장면 안 발화 순서대로:
- text = subtitleText, 없으면 ttsText. 앞뒤 공백을 지운다.
- start_sec = timeline.utterances[발화id].startSec, end_sec = endSec.
- 시각이 없는 발화는 건너뛴다.
- 한 줄 최대 글자 수 L = style.maxCharsPerLine(없으면 9:16 은 16, 16:9 는 24, 1:1 은 18), 최대 줄 수 = style.maxLines(기본 2).
text 가 L × 최대 줄 수 보다 길면 두 개(필요하면 세 개)의 cue 로 나눈다. 나누는 곳은 쉼표·마침표·어절 경계이고, 시간은 글자 수 비율로 나눈다. 뜻이 끊기는 곳(조사 앞, 숫자와 단위 사이)에서는 나누지 않는다.
- 다음 cue 와 겹치면 앞 cue 의 end_sec 를 다음 cue 의 start_sec 로 줄인다. end_sec 가 start_sec 보다 0.3초 이상 크게 유지되지 않으면 그 cue 를 앞 cue 와 합친다.
- 발화 사이 틈이 0.25초 이하이면 앞 cue 의 end_sec 를 다음 start_sec 까지 늘려 깜박임을 없앤다.
4. 화면 크기: 9:16 은 720x1280(1080p 면 1080x1920), 16:9 는 1280x720(1080p 면 1920x1080), 1:1 은 720x720(1080p 면 1080x1080).
5. build_subtitles 를 한 번 부른다.
- cues: 3번 결과
- width, height: 4번 값
- style: blueprint.subtitles.style 에서 도구가 받는 항목만(font, sizeAt1080, bold, color, outlineColor, outline, shadow, position, marginV, maxLines, maxCharsPerLine, fadeMs, background). 값이 없는 항목은 넣지 않는다.
- screen_title: blueprint.video.screenTitle.enabled 가 true 이고 text 가 있으면 그 text(120자 이내). 강조가 필요하면 핵심 낱말 하나를 **낱말** 로 감싼다. 아니면 넣지 않는다.
- label: "자막"
6. 결과의 ass_asset_id 를 assets.subtitles 에, srt_asset_id 를 assets["subtitles:srt"] 에 넣는다.
[출력]
assets 하나만 담은 JSON 객체(적지 않은 최상위 필드는 입력값이 그대로 이어지므로 다시 적지 않는다. 바꾸는 필드는 값 전체를 적는다.) assets 는 기존 키 전부에 "subtitles"(ASS asset_id)와 "subtitles:srt"(SRT asset_id)를 더한 값이다.
예: "assets":{…기존…, "subtitles":57, "subtitles:srt":58}
[주의]
- build_subtitles 는 무료지만 한 번만 부른다. 오류가 나면 메시지를 읽고 cue 를 고쳐 다시 부른다(최대 3번).
- 자막 글을 새로 쓰거나 대본을 고치지 않는다. 설계도의 글을 나누기만 한다.
- 설명·마크다운 없이 JSON 객체 하나만 답한다.
버전 기록 1개
고칠 때마다 새 버전으로 쌓이고 지난 버전은 지워지지 않습니다. 패키지는 넣을 때의 버전으로 고정되어 동작합니다.
-
v1현재2026.09.29 14:57 · 3.5KB
시스템 모듈 등록
이 모듈을 쓰는 패키지
리뷰와 반응
불러오는 중…
사용 -건 · 사용 건수는 이 모듈을 실제로 실행한 제작 수입니다(성공률이 아닙니다). 별점은 실제 사용한 회원만 남길 수 있고, 좋아요·싫어요와는 따로 셉니다.