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

영상에서 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 힌트를 받으며, 힌트를 생략하면 언어를 자동으로 감지합니다.
| 영상 검사 | STT 1.0 | |
|---|---|---|
| 경로 | transcribe: true를 넣은 POST /v1/video-inspect | POST /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도 전사문을 돌려주지 않습니다. 원본 전사문은 그 리소스의 공개 계약에 포함되지 않기 때문입니다.
출처
관련 글
미디어 도구 카테고리의 다른 글
- 영상 비트레이트 확인 방법: 크기와 길이로 계산하기
영상의 평균 비트레이트는 바이트 단위 크기 × 8 ÷ 초 단위 길이입니다. Sume의 무료 프로브가 두 값인 size_bytes와 duration_seconds를 반환합니다.
- 짧은 클립을 반복(루프)해 영상 길이 늘리는 방법
짧은 클립을 노래나 보이스오버 길이만큼 반복하세요. 오디오와 길이가 같은 Timeline 1.0 슬롯 하나에 클립을 넣고 render.pad_mode를 loop로 설정합니다.
- Instagram 스토리 광고 사이즈: 9:16 규격과 Facebook 스토리
Meta는 Instagram과 Facebook 스토리 광고에 9:16, 1440×2560을 권장합니다. 끝까지 재생되는 길이, 세이프 존, Sume로 만드는 방법을 정리했습니다.
- Instagram Reels API 업로드 영상 요구 사항
Instagram API는 공개 video_url의 Reels를 cURL로 가져옵니다. MP4·MOV, H.264·HEVC, 23–60 fps, 3초–15분, 300 MB 규칙마다 Sume MP4를 맞추는 법.
작성자 Sume