텍스트 기반 영상 편집이란? 전사문으로 컷을 만드는 방법
텍스트 기반 영상 편집은 전사문에서 단어를 지워 영상을 자르는 방식입니다. 단어 타이밍이 컷 목록이 되는 과정과 Sume API로 이를 만드는 방법을 설명합니다.

텍스트 기반 영상 편집은 전사문을 편집해 영상을 편집하는 방식입니다. 텍스트에서 단어나 문장을 지우면, 그에 해당하는 화면과 소리 구간이 영상에서 잘려 나갑니다. 이 방식이 가능한 이유는 전사된 단어마다 시작 시간과 끝 시간이 있어서, 남긴 단어들이 그대로 렌더링할 시간 구간이 되기 때문입니다.
Sume API에서는 이 파이프라인을 직접 만듭니다. 영상 검사로 클립을 전사하고, 남긴 단어를 구간으로 바꾼 다음, 그 구간들을 Timeline 1.0으로 렌더링하세요. 아래 내용은 2026-09-28에 확인한 영상 검사, Timeline 1.0, 오디오 분리 문서와 Sume API 레퍼런스를 기준으로 합니다. 현재 동작이라고 설명한 내용은 Sume의 코드에서 확인한 것입니다.
전사문 편집은 어떻게 컷이 되나요?
전사문의 모든 단어에는 영상 시간을 기준으로 한 시작과 끝이 있습니다. 단어를 지우면 남은 단어들이 연속된 묶음을 이루고, 남긴 단어의 묶음 하나하나가 첫 단어의 시작부터 마지막 단어의 끝까지인 구간 하나가 됩니다. 이 구간들을 차례로 이어 재생한 것이 편집된 영상이며, 구간 사이의 경계 하나하나가 컷입니다. 아래 표는 각 요소를 담는 Sume 필드를 보여 줍니다.
| 요소 | Sume 필드 | 담기는 내용 |
|---|---|---|
| 단어 | transcript.words[] | word, start, end(영상 시작부터 잰 초 단위) |
| 문장 | transcript.segments[] | segmentation.mode: "sentence"를 요청하면 start와 end가 있는 갭 없는 문장 |
| 남긴 구간이 클립에서 시작하는 지점 | video[].source_in | 소스 파일 안의 시작 지점(인포인트) |
| 편집본에서 구간이 놓이는 위치 | video[].start, video[].duration | 출력에서의 시작 시점과 재생 길이 |
| 구간의 소리 | audio.parts[] | 클립에서 분리한 소리를 같은 구간으로 자른 조각, 최대 20개 |
단어 타이밍이 담긴 전사문은 어떻게 받나요?
클립을 transcribe: true와 함께 POST /v1/video-inspect로 보내세요. frames: false를 넣으면 스틸을 건너뜁니다. 클립은 워크스페이스에 있는 media.sume.com 아티팩트나 에셋이어야 하며, language_code는 선택 사항인 힌트입니다(생략하면 자동 감지). 문장 단위로 편집하려면 segmentation을 추가하세요. 전사문은 오디오 분당 $0.01로 과금되고 duration_seconds 힌트를 기준으로 예약되며(생략하면 일 분), 프로브 자체는 과금되지 않습니다.
curl -X POST https://api.sume.com/v1/video-inspect \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: talk-transcript-001" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4",
"frames": false,
"transcribe": true,
"segmentation": { "mode": "sentence" }
}'남긴 단어는 어떻게 구간으로 바꾸나요?
어떤 단어를 지웠는지는 여러분의 편집 도구가 기록합니다. 아래 함수는 나머지 단어를 (source_in, duration) 쌍으로 바꿉니다. API 레퍼런스는 word만 필수로 표시하므로, 이 함수는 타이밍이 없는 항목을 건너뜁니다.
def kept_ranges(words, deleted):
"""(source_in, duration) for each run of kept words.
words: transcript.words[]; deleted: indexes the editor removed."""
ranges, run = [], None
for i, w in enumerate(words):
if i in deleted:
run = None # a deleted word ends the run
elif "start" in w and "end" in w:
if run is None:
run = [w["start"], w["end"]]
ranges.append(run)
else:
run[1] = w["end"] # same run, later end
return [(s, round(e - s, 3)) for s, e in ranges]컷은 어디에 두어야 하나요?
- 쉼 안에 두세요. 단어 가장자리가 잘리지 않도록 남긴 각 단어의
end뒤에 약간의 여유를 두되, 다음에 오는 지운 단어에는 닿지 않게 하세요. 여유를 두는 코드는 영상에서 무음 구간을 제거하는 방법에서 보여 줍니다. - 문장 단위로 편집한다면 문장 경계에 두세요. API 레퍼런스는
segments[]를 갭 없는 문장으로 설명하므로, 문장을 지우면 정확히 그 문장의 구간만 빠지고 남긴 문장들은 경계에서 맞닿습니다. - 구간이 Timeline 슬롯의 최소 길이인 0.2초보다 짧아질 만큼 컷을 가깝게 두지 마세요. 그렇게 짧은 구간은 이웃 구간과 합치거나 버리세요.
편집한 영상은 어떻게 렌더링하나요?
구간들을 Timeline 1.0 렌더 한 번에서 차례로 이어 재생하세요. 각 구간은 원본 클립의 video[] 슬롯 하나와, POST /v1/audio-detach로 분리한 클립 소리의 audio.parts[] 조각 하나가 되며, 둘 다 그 구간의 source_in과 duration을 씁니다. API로 영상 일부 잘라내기는 구간이 20개를 넘을 때의 처리를 포함해 이 렌더를 단계별로 만들고, 영상에서 무음 구간을 제거하는 방법은 지운 단어 대신 쉼을 기준으로 같은 종류의 컷 목록을 만듭니다.
렌더는 API 요금에 출력 분당 $0.10로 나와 있습니다. 각 단계는 따로 과금되며, 기본적으로 5.5% 에이전트 수수료가 더해집니다.
한도는 어떻게 되나요?
- Sume API는 전사문과 렌더를 제공합니다. 사람이 단어를 지우는 화면은 직접 만들어야 합니다.
- 전사문의
duration_seconds힌트는 600초(10분)가 상한이므로, 더 긴 영상은 영상 트림으로 여러 부분으로 나눈 뒤 각각 전사하세요. - 오디오 트랙이 없는 클립은
inspect_source_has_no_audio로 실패합니다. - 컷은 단어 타이밍이 가리키는 곳에만 들어갑니다. 게시하기 전에 편집본을 처음부터 끝까지 재생해 보세요.
출처
관련 글
미디어 도구 카테고리의 다른 글
- 영상 편집 컷 종류: 하드 컷, 점프 컷, J컷, L컷 등
영상 편집의 주요 컷 종류는 하드 컷, 점프 컷, J컷과 L컷, 매치 컷, 컷어웨이, 크로스 컷, 스매시 컷입니다. 각 컷의 역할과 만드는 방법을 정리했습니다.
- 세로 영상 해상도: 720p부터 4K까지 9:16 크기
세로 영상 해상도는 1080p가 1080×1920, 720p가 720×1280, 4K가 2160×3840입니다. 9:16 크기를 구하는 방법과 Sume가 렌더링할 수 있는 크기를 정리했습니다.
- 영상은 멈추고 소리만 나올 때: 원인과 해결 방법
어떤 플레이어에서든 영상은 멈추고 소리만 계속 나온다면 파일에 정지된 프레임이 들어 있습니다. 스트림 확인 방법과 Sume 렌더에서 생기는 세 가지 원인을 정리했습니다.
- WAV vs MP3 차이: 어느 쪽이 좋고 언제 무엇을 쓰나요?
WAV는 정확하지만 크고, MP3는 작지만 손실이 있습니다. 편집하거나 이어 붙이는 동안은 WAV를 유지하고 MP3는 마지막에 내보내세요. MP3를 WAV로 바꿔도 복원되는 것은 없습니다.
작성자 Sume