API로 영상 일부 잘라내기: 중간 구간을 빼고 다시 잇기

영상 트림은 Job 하나에 구간 하나만 남깁니다. 중간 구간을 잘라내려면 남길 구간들을 Sume Timeline 1.0 Job 하나에서 차례로 이어 렌더링하세요.

읽는 시간 5분Sume
전체 글

Sume API로 영상의 일부를 잘라내려면 남길 부분들을 POST /v1/timeline-1.0/render 한 번으로 차례로 이어 렌더링하세요. 남길 구간마다 영상에서 분리한 오디오의 audio.parts[] 조각 하나와, source_in으로 영상의 같은 구간을 읽는 video[] 슬롯 하나를 만듭니다. 영상 트림만으로는 Job당 [start, end) 구간 하나만 남기므로, 잘라낸 자리를 이어 붙일 수 없습니다.

아래 내용은 2026-09-27에 확인한 Sume의 Timeline 1.0, 오디오 분리, 영상 트림, 타임라인 오디오, 영상 검사 문서와 Sume API 레퍼런스를 바탕으로 합니다. 현재 동작이라고 설명한 내용은 Sume의 코드에서 확인한 것입니다. 트림 한 번에 대한 내용은 영상 트림, 필터, 오디오 분리에서 다룹니다.

영상 트림으로는 왜 중간 구간을 잘라낼 수 없나요?

트림은 클립 하나의 [start, end)만 담은 새 MP4를 반환합니다. 60초 클립에서 20–35초를 빼려면 [0, 20)과 [35, 60) 두 구간을 남겨 이어 붙여야 합니다. Timeline 렌더 한 번으로 두 구간을 소스 파일에서 바로 읽을 수 있으므로, 그 밖에 필요한 Job은 오디오 분리뿐입니다.

  • 소스는 앞서 실행한 Sume Job의 출력처럼 이미 워크스페이스에 있는 media.sume.com 아티팩트나 에셋이어야 합니다. Timeline, 트림, 오디오 분리는 공개 인터넷에서 파일을 가져오지 않습니다.
  • REST 에셋 업로드 경로는 공개 API 레퍼런스에서 숨겨져 있으며, 미디어 가져오기는 YouTube 링크나 임의의 영상 URL을 받지 않습니다.

잘라낼 구간은 어떻게 찾나요?

전사문을 쓰세요. transcribe: true를 넣은 POST /v1/video-inspect는 words[]를 반환하며, 각 단어에는 영상 시작부터 잰 초 단위의 start와 end가 있습니다. 단어 사이의 틈이 곧 쉼입니다. 어떤 단어도 잘리지 않도록 컷은 쉼 안에 두세요. segmentation.mode: "sentence"를 주면 갭 없는 문장 segments[]가 반환되므로, 문장을 통째로 뺄 수 있습니다.

전사문은 STT 1.0 요율인 오디오 분당 $0.01로 과금됩니다. 프로브와 스틸은 과금되지 않으므로, 화면을 보고 컷 지점을 찾는 데는 비용이 들지 않습니다.

렌더 요청은 어떻게 구성하나요?

POST /v1/audio-detach로 소스의 오디오를 분리하세요. 기본 출력은 Timeline 오디오가 요구하는 형식인, 샘플 단위로 정확한 wav입니다. 그다음 남길 구간마다 오디오 part 하나와 영상 슬롯 하나를 작성하세요.

  • 오디오 part: url은 분리한 wav, source_in은 구간의 시작, duration은 구간의 길이입니다. part는 샘플 도메인에서 틈 없이 이어지고 각자 자신의 url을 지정하므로, 여러 part가 같은 파일을 읽을 수 있습니다.
  • 영상 슬롯: source_url은 원본 MP4이고, source_in과 duration은 오디오 part와 같습니다. start는 그 앞에 남긴 구간 길이의 누적 합이며, video[0].start는 0입니다.
  • audio.duration_seconds는 남긴 구간 길이의 합입니다. part에 선언한 길이의 합이 이보다 작으면 렌더는 audio_parts_shorter_than_duration으로 거부됩니다.
  • transition은 빼고, 기본 출력이 1080×1920이므로 output.width와 output.height를 소스 크기에 맞추세요. 과금되지 않는 POST /v1/timeline-1.0/plan으로 본문을 먼저 확인할 수 있습니다.
curl -X POST https://api.sume.com/v1/timeline-1.0/render \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: talk-cut-001" \
  -d '{
    "audio": {
      "duration_seconds": 45,
      "parts": [
        { "url": "https://media.sume.com/artifacts/artf_demo/talk.wav", "source_in": 0, "duration": 20 },
        { "url": "https://media.sume.com/artifacts/artf_demo/talk.wav", "source_in": 35, "duration": 25 }
      ]
    },
    "output": { "width": 1920, "height": 1080 },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4", "start": 0, "duration": 20, "source_in": 0 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/talk.mp4", "start": 20, "duration": 25, "source_in": 35 }
    ]
  }'

남길 구간이 20개를 넘으면 어떻게 하나요?

audio.parts[]는 항목 20개가 상한인 반면, video[]는 슬롯을 최대 200개까지 받습니다. 남길 구간이 더 많으면 operation: "concat"으로 POST /v1/timeline-1.0/audio를 호출해 오디오부터 이어 붙이세요. 이 Job은 같은 { url, source_in, duration } 형태의 part를 1–20개 받아 audio_url 하나와 segments[]를 반환합니다. 문서에 따르면 segments[]는 video[].start를 다시 맞출 때 기준이 되는 오프셋입니다. 20개씩 묶어 이어 붙인 뒤 그 결과들을 다시 이어 붙이고, 최종 파일을 audio.url로 넘기세요.

비용은 얼마이고, 한도는 어떻게 되나요?

렌더는 ceil(audio.duration_seconds / 60)분을 예약하므로, 45초짜리 예제는 일 분을 예약합니다. 각 단계는 따로 과금되며, 기본적으로 5.5% 에이전트 수수료가 더해집니다. 오디오 분리 한 번의 출력은 최대 900초이므로 더 긴 소스에는 range를 지정한 분리가 두 번 필요하며, 이때 각 part의 source_in은 자기 파일의 시작부터 셉니다.

Timeline 1.0, 오디오 분리, 타임라인 오디오, 영상 검사, API 요금 기준, 2026-09-27 확인.
단계호출과금한도
컷 지점 찾기POST /v1/video-inspect전사 시 오디오 분당 $0.01소스 ≤ 1,800초
오디오POST /v1/audio-detachJob당 정액, GET /v1/catalog에 표시소스 ≤ 1,800초; 출력 ≤ 900초
확인POST /v1/timeline-1.0/plan과금 없음Job 없음, 예약 없음
렌더POST /v1/timeline-1.0/render출력 분당 $0.10출력 1–1,800초; 오디오 part ≤ 20개; 슬롯 1–200개, 각 ≥ 0.2초
오디오 잇기POST /v1/timeline-1.0/audioJob당 정액, GET /v1/catalog에 표시part 1–20개; 생성 오디오 ≤ 1,800초

출처

관련 글

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

미디어 도구 글 전체 보기

작성자 Sume