영상에서 SRT 자막 파일을 만드는 방법

영상에서 SRT 파일을 만들려면 타임스탬프와 함께 전사하고, 타이밍이 있는 문장마다 번호를 붙인 블록으로 쓰세요. Sume STT는 타이밍이 담긴 JSON을 반환합니다.

읽는 시간 5분Sume
전체 글

영상에서 SRT 파일을 만들려면 음성을 타임스탬프와 함께 전사하고, 줄마다 번호, start --> end 타이밍 줄, 텍스트로 이루어진 번호 블록을 하나씩 쓰세요. Sume의 음성 인식은 .srt 파일이 아니라 JSON을 반환하지만, 여기에는 SRT에 필요한 정보가 담겨 있습니다. 문장 단위 분할을 요청하면 segments[]를 받으며, 각 구간에는 text와 초 단위의 start, end가 들어 있어 구간 하나가 블록 하나가 됩니다.

Sume 관련 내용은 2026-09-27에 확인한 영상 검사 문서와 Sume API 레퍼런스의 STT 1.0 스키마에서 가져왔습니다. SRT 레이아웃 자체는 Sume 기능이 아니라 일반 텍스트로 된 자막 형식입니다. 원본 전사문 필드는 단어별 타임스탬프를 주는 음성 인식 API를 참고하세요.

영상에서 타이밍이 있는 문장은 어떻게 받나요?

타이밍이 있는 문장을 돌려주는 Sume 호출은 두 가지입니다. 둘 다 segmentation: { "mode": "sentence" }와 선택 사항인 language_code 힌트를 받으며, 힌트를 생략하면 언어를 자동으로 감지합니다.

영상 검사와 Sume API 레퍼런스 기준, 2026-09-27 확인.
영상 검사STT 1.0
경로transcribe: true를 넣은 POST /v1/video-inspectPOST /v1/stt-1.0/transcribe
입력video_url: 이전 Sume Job의 출력물처럼 워크스페이스에 있는 media.sume.com 클립audio_url: 영상의 사운드트랙 같은 공개 HTTPS 오디오 파일
단어 시각영상 시작부터 잰 초오디오 시작부터 잰 초
구간이 담기는 곳검사 리소스의 transcript.segments[]Job 결과의 segments[]
과금프로브와 스틸은 과금 없음. 전사는 STT 1.0 요율로 과금STT 1.0 요율
curl -X POST https://api.sume.com/v1/video-inspect \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: srt-transcript-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
    "frames": false,
    "transcribe": true,
    "segmentation": { "mode": "sentence" }
  }'

구간으로 SRT 파일은 어떻게 쓰나요?

검사는 기본적으로 최대 30초 기다린 뒤, 완료된 검사를 200으로 돌려주거나 폴링할 Job을 202로 돌려줍니다. 나중에 GET /v1/video-inspect/:id로 읽으세요. 그다음 구간마다 블록을 하나씩 쓰세요.

  • 블록에는 순서대로 1, 2, 3 번호를 매기세요. STT 1.0은 구간 번호를 영부터 매깁니다.
  • 시각은 밀리초 앞에 쉼표를 넣어 HH:MM:SS,mmm 형식으로 쓰세요.
  • 번호 아래에 타이밍 줄을, 그 아래에 텍스트를 쓰고, 블록마다 끝에 빈 줄을 넣으세요.
  • 구간에는 갭이 없습니다. 각 구간은 다음 구간이 시작하는 지점에서 끝나므로, 말이 멈춘 동안에도 줄이 화면에 남습니다. 블록을 마지막으로 발화한 단어에서 끝내려면 words[]에서 그 단어의 end를 가져오세요.
def timecode(t):
    ms = round(t * 1000)
    h, ms = divmod(ms, 3_600_000)
    m, ms = divmod(ms, 60_000)
    s, ms = divmod(ms, 1000)
    return f"{h:02}:{m:02}:{s:02},{ms:03}"

def segments_to_srt(segments):
    blocks = []
    for n, seg in enumerate(segments, start=1):
        times = f"{timecode(seg['start'])} --> {timecode(seg['end'])}"
        blocks.append(f"{n}\n{times}\n{seg['text'].strip()}\n")
    return "\n".join(blocks)

SRT 대신 WebVTT 파일을 만들 수 있나요?

네, 같은 구간으로 만들 수 있습니다. WebVTT 파일은 WEBVTT 줄과 빈 줄로 시작하고, 밀리초 앞에 쉼표 대신 마침표를 쓰며, 블록 번호가 필요 없습니다. 루프의 나머지 부분은 그대로입니다.

별도 파일로 내보내는 대신 줄을 화면에 입히려면, SRT 자막 파일을 영상에 입히는 방법에서처럼 cue로 보내세요.

비용은 얼마이고, 어떤 제한이 있나요?

  • 전사는 API 요금에 나온 STT 1.0 요율인 오디오 분당 $0.01로 과금되며, 기본적으로 5.5% 에이전트 수수료가 더해집니다. 검사의 프로브와 스틸은 과금되지 않습니다.
  • duration_seconds가 없으면 전사는 1분을 예약하며, 이 힌트의 최댓값은 600초입니다. 검사는 최대 1,800초 길이의 원본을 읽습니다.
  • 오디오 트랙이 없는 클립은 검사에서 inspect_source_has_no_audio로 실패합니다. 먼저 frames: false 검사로 probe.has_audio를 확인하세요.
  • 전사문은 자막 파일이 아니라 JSON 필드로 돌아옵니다. 자막 Job도 전사문을 돌려주지 않습니다. 원본 전사문은 그 리소스의 공개 계약에 포함되지 않기 때문입니다.

출처

관련 글

미디어 도구 카테고리의 다른 글

미디어 도구 글 전체 보기

작성자 Sume