---
title: 타임라인 오디오
description: Sume 호스트 오디오를 concat 또는 split해 내구성 media.sume.com 파일로 만듭니다. 샘플 도메인 조인, 재합성 없음.
---

> **현재 SoT.** Timeline 1.0 audio(`sume/timeline-1.0/audio`, #3516).
> dest와 prod. 이것은 **재사용 가능한** 오디오 파일을 만듭니다. 렌더
> 하나 안에서만 필요한 조인은 [Timeline 1.0](/models/timeline)
> `audio.parts[]`에 두고 이 Job을 건너뛰세요.

Timeline audio는 Sume 호스트 오디오를 갭 없이 하나(`operation:
concat`)로 붙이거나, 한 파일을 구간(`operation: split`)으로 자르고
내구성 `media.sume.com` URL과 타이밍을 반환합니다. 조인은 샘플 도메인
입니다 — 재 TTS 없고 이음새에 침묵을 넣지 않습니다. 서버가 렌더와 같은
워커 미디어 런타임에서 ffmpeg를 컴파일합니다(`apps/api/src/routes.ts`
`createTimelineV1Audio` / `submitSumeTimelineAudioJob`).

```text
POST /v1/timeline-1.0/audio
```

**`GET /v1/timeline-1.0/audio/:id`는 없습니다.** Job 봉투로 폴링하세요:

```text
GET /v1/jobs/:id/status
GET /v1/jobs/:id/result
```

호스티드 MCP: `timeline_audio`(`packages/mcp-server/src/mcp.ts`). 쓰기는
`idempotency_key`가 필요합니다(OAuth에서는 `mcp:write`). 흐름:
`timeline_audio` → `jobs_wait` → `jobs_result`.

## Concat

필수: `operation: "concat"`와 `parts[]`(1–**20**, 순서). 각 part는
`{ url, source_in?, duration? }`입니다. 최상위에 `url`이나 `ranges`를
보내지 마세요(`audio_concat_takes_no_url` /
`audio_concat_takes_no_ranges`). 모든 URL은 이 워크스페이스의
`media.sume.com` 오디오여야 합니다. 먼저 가져오세요
(`POST /v1/media-imports`). `Idempotency-Key`는 필수입니다.

기본 `mode`는 **`async`**입니다. `mode: "sync"`를 주면 최대 **30초**
기다리고 끝난 Job을 `200`으로 주거나, `202`로 폴링합니다.

```bash
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: timeline-audio-concat-001" \
  -d '{
    "operation": "concat",
    "parts": [
      { "url": "https://media.sume.com/artifacts/artf_demo/line1.wav" },
      { "url": "https://media.sume.com/artifacts/artf_demo/line2.wav", "source_in": 0.1, "duration": 1.8 }
    ]
  }'
```

결과 `kind: timeline_audio`는 `audio_url` 하나, `duration_seconds`,
`segments[]`(`index`, `start`, `duration_seconds`)를 줍니다 — Timeline
1.0 `video[].start`를 다시 맞출 concat 오프셋입니다. 그 파일을 렌더의
`audio.url`이나 Avatar 1.0 image-to-video 오디오로 쓰세요.

part는 채널 레이아웃이 같아야 합니다(`audio_parts_channel_mismatch`).

## Split

필수: `operation: "split"`, 최상위 `url`, `ranges[]`(1–**20**). 각
range는 `{ start, end? }`입니다(`end` 생략 = 파일 끝까지). `parts`를
보내지 마세요(`audio_split_takes_no_parts`). range는 겹쳐도 됩니다.

```bash
curl -X POST https://api.sume.com/v1/timeline-1.0/audio \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: timeline-audio-split-001" \
  -d '{
    "operation": "split",
    "url": "https://media.sume.com/artifacts/artf_demo/spine.wav",
    "ranges": [{ "start": 0, "end": 12.4 }, { "start": 12.4 }]
  }'
```

결과 `kind: timeline_audio`의 `segments[]`는 각각 자신의 `audio_url`을
가집니다. 말하는 헤드 MP4에서 여러 구간이 필요하면
[오디오 분리](/models/audio-detach)를 한 번 한 뒤 여기서 split하세요.

## 출력 포맷

선택 `output.format`: **`wav`**(기본, `pcm_s16le`, 샘플 정확) 또는
**`mp3`**(더 작음; 매 이음새에 프라이밍 패딩이 다시 붙음). 다시 붙이거나
립싱크를 돌릴 파일은 wav를 유지하세요.

생산 오디오 ≤ **1800**초.

공개 요금: **Job당 $0.01 정액**(`TIMELINE_AUDIO_PUBLIC_PRICING`;
`GET /v1/catalog`에서 확인). 프로바이더 추론 없음 — 워커 ffmpeg만.

## 거부 (안정 코드)

| 코드 | 언제 |
|---|---|
| `audio_concat_requires_parts` | concat에 `parts` 없음. |
| `audio_concat_takes_no_url` / `audio_concat_takes_no_ranges` | concat에 split 필드. |
| `audio_split_requires_url` / `audio_split_requires_ranges` | split에 `url` 또는 `ranges` 없음. |
| `audio_split_takes_no_parts` | split에 `parts`. |
| `audio_range_end_before_start` | range `end` ≤ `start`. |
| `audio_parts_channel_mismatch` | concat part의 채널 레이아웃이 다름(워커). |
| `unsupported_media_source` / `source_not_found` | 호스트 밖 또는 죽은 URL. |
| 프로바이더 / ffmpeg 키 | 400 — `filtergraph`, `ffmpeg_args`, `codec`, `crf` 등. |

호스트 밖 URL(`https://example.com/…`)은 admit에서 거부됩니다. 먼저
가져오세요.

## 이 표면이 아닌 것

| 필요 | 사용 |
|---|---|
| 비디오 하나의 오디오 트랙을 wav / mp3로 | [오디오 분리](/models/audio-detach) |
| 렌더 하나 안에서만 조인 | [Timeline 1.0](/models/timeline) `audio.parts[]` |
| 여러 클립 시퀀스 | [Timeline 1.0](/models/timeline) |
| 한 프레임에 스틸 + 비디오 | [타임라인 합성](/models/timeline-compose) |
| 음성 인식 | `POST /v1/stt-1.0/generate` |

## 관련

- [Timeline 1.0](/models/timeline)
- [타임라인 합성](/models/timeline-compose)
- [오디오 분리](/models/audio-detach)
- [미디어 입력](/workflows/asset-library)
- [Job과 결과](/workflows/jobs-and-results)
- [MCP 도구와 게이트](/mcp/tools-and-gates)
