타임라인 오디오
이 문서는 영문 원고를 AI로 번역한 내용이라 표현이 어색할 수 있습니다.
현재 SoT. Timeline 1.0 audio(
sume/timeline-1.0/audio, #3516). dest와 prod. 이것은 재사용 가능한 오디오 파일을 만듭니다. 렌더 하나 안에서만 필요한 조인은 Timeline 1.0audio.parts[]에 두고 이 Job을 건너뛰세요.
Timeline audio는 Sume 호스트 오디오를 갭 없이 하나(operation: concat)로 붙이거나, 한 파일을 구간(operation: split)으로 자르고
내구성 media.sume.com URL과 타이밍을 반환합니다. 조인은 샘플 도메인
입니다 — 재 TTS 없고 이음새에 침묵을 넣지 않습니다. 서버가 렌더와 같은
워커 미디어 런타임에서 ffmpeg를 컴파일합니다(apps/api/src/routes.ts
createTimelineV1Audio / submitSumeTimelineAudioJob).
GET /v1/timeline-1.0/audio/:id는 없습니다. Job 봉투로 폴링하세요:
호스티드 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로 폴링합니다.
결과 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는 겹쳐도 됩니다.
결과 kind: timeline_audio의 segments[]는 각각 자신의 audio_url을
가집니다. 말하는 헤드 MP4에서 여러 구간이 필요하면
오디오 분리를 한 번 한 뒤 여기서 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로 | 오디오 분리 |
| 렌더 하나 안에서만 조인 | Timeline 1.0 audio.parts[] |
| 여러 클립 시퀀스 | Timeline 1.0 |
| 한 프레임에 스틸 + 비디오 | 타임라인 합성 |
| 음성 인식 | POST /v1/stt-1.0/generate |

