콘텐츠로 이동

자막

This content is for v0.4. Switch to the latest version for up-to-date documentation.

자막(caption)은 자체 트랙에 놓이는 시간 지정 텍스트이며, 엔진이 텍스트 제너레이터와 같은 텍스트 렌더러로 그립니다. 이 페이지에서는 자막 트랙, 큐와 스타일, 그리고 SubRip과 WebVTT 파일을 가져오는 방법을 설명합니다. 다 읽고 나면 영상에 자막을 달 수 있습니다.

"kind": "caption"인 트랙에는 클립이 없습니다. 대신 captions가 다음을 담습니다.

  • cues: 각각 timeline_range와 text를 가진 CaptionCue. text는 일반 문자열이며 \n으로 줄을 바꿉니다. 큐는 타임라인 순서이고 서로 겹치지 않습니다. 트랙은 한 번에 큐 하나만 보여 줍니다.
  • style: 트랙의 모든 큐를 그리는 TextStyle. 텍스트 제너레이터와 같은 스타일입니다. 기본값은 캔버스 짧은 변의 5% 크기의 흰 글자이며, 아래쪽 가운데 근처에 놓입니다. color는 글자 색, outline은 글리프 둘레의 띠, background는 줄마다 뒤에 깔리는 상자를 정합니다.

트랙의 스타일은 하나입니다. 두 번째 화자를 다른 색으로 그리는 것처럼 일부 큐를 다른 스타일로 그리려면 그 큐들을 별도의 자막 트랙에 두세요. 동시에 보이는 자막도 각각 트랙 하나씩을 차지합니다.

자막 트랙은 앞에 있는 트랙들 위에, 뒤에 있는 트랙들 아래에 그려집니다. 맨 위에 그리려면 마지막에 두세요.

{
"id": "subs",
"name": "Subtitles",
"kind": "caption",
"captions": {
"style": {
"font_family": "Hanken Grotesk",
"font_size": 0.06,
"background": { "color": { "red": 0, "green": 0, "blue": 0, "alpha": 0.6 }, "padding": 0.3 }
},
"cues": [
{
"timeline_range": { "start": 0, "end": 240000 },
"text": "The tide comes in twice a day."
},
{
"timeline_range": { "start": 240000, "end": 480000 },
"text": "Every word lands on time."
},
{
"timeline_range": { "start": 480000, "end": 720000 },
"text": "One cue at a time."
}
]
}
}

alpha2/captions의 parseCaptions는 엔진 자체의 파서로 SubRip("srt")이나 WebVTT("webvtt") 텍스트를 읽고, captionTrack은 큐로 트랙을 만듭니다.

import init, * as wasm from "alpha2/wasm";
import { captionTrack, parseCaptions } from "alpha2/captions";
await init();
const { rows, skipped } = parseCaptions(wasm, vttText, "webvtt");
const tracks = rows.map((cues, index) =>
captionTrack(`subtitles-${index}`, "Subtitles", cues, { font_family: "Hanken Grotesk" }),
);
  • 타임스탬프는 정확합니다. 1밀리초가 120틱입니다.
  • rows에는 자막 트랙 하나 분량의 큐가 한 행씩 들어 있습니다. 파일에서 겹치는 큐는 서로 다른 행으로 갑니다. 트랙은 한 번에 큐 하나만 보여 주기 때문입니다. 한 행에는 트랙이 담을 수 있는 최대치인 4096개까지 들어갑니다.
  • 마크업은 버리고 큐의 일반 텍스트만 남깁니다. WebVTT voice, 클래스, 인라인 타임스탬프는 유지되지 않습니다.
  • skipped는 큐로 읽을 수 없었던 블록의 수입니다.

에디터에서는 importCaptions가 자막 파일을 실행 취소 한 단계로 가져옵니다. Python에서는 alpha2.compose.Captions가 SubRip, WebVTT, 큐 목록, 단어 타임스탬프를 받습니다.