긴 텍스트 TTS·오디오북 만들기: 나눠 합성하고 이어 붙이기
긴 텍스트나 책은 TTS 요청 한도에 맞게 나누고, 모든 조각을 같은 설정으로 합성한 뒤, 오디오를 최대 30분짜리 파일로 이어 붙이세요.

긴 텍스트를 음성으로 바꾸려면 문단이나 문장 경계에서 요청 하나에 들어가는 크기의 조각으로 나누고, 모든 조각을 같은 음성과 설정으로 합성한 뒤, 오디오를 순서대로 이어 붙이세요. Sume에서는 텍스트 음성 변환 요청 하나가 최대 20,000자를 받고 1,200초 이하의 오디오만 만들어야 하며, 타임라인 오디오 concat은 part를 최대 20개까지 빈틈없이 이어 붙여 최대 1,800초(30분)짜리 파일 하나로 만듭니다.
한도는 2026-09-27에 확인한 Sume API 레퍼런스의 TTS 스키마와 타임라인 오디오 문서에서 가져왔습니다. Sume API 레퍼런스는 API 레퍼런스 문서의 바탕이 되는 OpenAPI 문서입니다. 현재 동작이라고 설명한 내용은 Sume의 코드에서, 가격은 API 요금 페이지를 만드는 코드에서 확인했습니다. 요청 하나만 보낼 때는 텍스트 음성 변환 API를 참고하세요.
요청 하나와 파일 하나의 한도는 얼마인가요?
조각 하나는 서로 다른 상한 두 가지를 통과해야 합니다. 보내는 텍스트의 글자 수 상한과, 돌아오는 오디오의 길이 상한입니다. 합친 파일은 챕터마다 하나, 또는 오디오 30분마다 하나로 계획하세요.
| 한도 | 값 |
|---|---|
| TTS 요청당 텍스트 | 1–20,000자의 transcript. 공백과 문장 부호도 포함. |
| TTS 요청당 오디오 | 1,200초. 넘으면 tts_duration_exceeded로 실패하며 크레딧은 확정되지 않음. |
| 타임라인 오디오 concat당 part 수 | 1–20개, 순서대로, 모두 같은 채널 레이아웃. |
| 합친 파일당 오디오 | 1,800초. |
| concat 입력 | TTS 출력 같은 워크스페이스의 media.sume.com 오디오. |
텍스트는 어떻게 나눠야 하나요?
- 문단 경계에서 자르고, 문단이 너무 길면 문장 경계에서 자르세요. 그래야 한 문장이 두 조각으로 갈리지 않습니다.
- Sume는 초당 글자 수를 문서화하지 않으므로 직접 재세요.
timestamps: { "words": true }를 보내면 현재 코드는 결과에duration_seconds를 추가합니다. 첫 조각을 합성한 다음, 그 조각의 글자당 초를 기준으로 나머지 조각의 크기를 정하세요. tts_duration_exceeded로 실패한 조각은 크레딧이 확정되지 않습니다. 그 조각을 반으로 나눠 각각 보내세요.- PDF나 전자책은 먼저 텍스트를 추출하세요.
transcript는 합성할 일반 텍스트입니다.
각 조각은 어떻게 합성하나요?
조각마다 POST /v1/tts-1.0/generate를 하나씩 보내고, 텍스트를 뺀 나머지는 모두 똑같이 유지하세요. 같은 음성, language, output_format, generation_config를 씁니다. 조각들을 이어 붙일 것이므로 WAV(pcm_s16le)로 요청하세요.
조각마다 book-ch03-part02처럼 고유한 Idempotency-Key를 주세요. 같은 키와 본문으로 재시도하면 두 번째 유료 Job 대신 원래 Job이 idempotency_hit: true와 함께 반환됩니다.
curl -X POST https://api.sume.com/v1/tts-1.0/generate \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: book-ch03-part02" \
-d '{
"transcript": "Chapter three. The rain had not stopped for a week...",
"avatar_handle": "acme_narrator",
"language": "en",
"output_format": { "container": "wav", "encoding": "pcm_s16le", "sample_rate": 44100 },
"timestamps": { "words": true }
}'조각들을 오디오 파일 하나로 어떻게 합치나요?
조각이 모두 끝나면 오디오 URL을 읽는 순서대로 operation: "concat", 그리고 이 경로에 필수인 Idempotency-Key와 함께 POST /v1/timeline-1.0/audio로 보내세요. 이어 붙이기는 샘플 도메인에서 이뤄지므로 다시 합성하지 않고 이음새에 무음도 넣지 않습니다. GET /v1/jobs/:id/status와 GET /v1/jobs/:id/result를 폴링하세요. 결과에는 audio_url 하나, 그 duration_seconds, 그리고 각 part의 start가 담긴 segments[]가 있으며, 이 값을 구간 마커로 쓸 수 있습니다.
출력은 기본적으로 WAV(pcm_s16le)입니다. mp3는 더 작지만 모든 경계에 프라이밍 패딩이 다시 붙으므로, 다시 이어 붙이지 않을 최종 파일에만 요청하세요.
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: book-ch03-join" \
-d '{
"operation": "concat",
"parts": [
{ "url": "https://media.sume.com/artifacts/artf_demo/ch03-part01.wav" },
{ "url": "https://media.sume.com/artifacts/artf_demo/ch03-part02.wav" },
{ "url": "https://media.sume.com/artifacts/artf_demo/ch03-part03.wav" }
]
}'긴 텍스트 TTS 비용은 얼마인가요?
음성은 대본 글자 수에 따라 1,000자당 $0.0475로 과금되며, 기본적으로 5.5% 에이전트 수수료가 더해집니다. 따라서 100,000자 원고의 음성 비용은 수수료 전 약 $4.75입니다. concat은 Job마다 타임라인 오디오 페이지에 나온 요율로 과금되며, 이 페이지는 요율을 GET /v1/catalog에서 확인하라고 안내합니다.
이 워크플로가 처리하지 않는 것은 무엇인가요?
- 책 한 권을 파일 하나로 만들기. 합친 파일은 최대 1,800초이므로 긴 책은 여러 파일로 나뉩니다.
- 쉼과 크로스페이드. concat은 무음을 넣지 않고 part를 연달아 재생하므로, 조각 사이의 쉼은 클립에 이미 들어 있는 무음이 전부입니다.
- 배포. 이 워크플로는 오디오 파일을 만드는 데서 끝납니다. 업로드하기 전에 유통사의 파일 요건을 확인하세요.
출처
관련 글
활용 사례 카테고리의 다른 글
- 여러 목소리로 TTS 만들기: 대사마다 음성 하나씩
TTS 요청은 음성 하나로 말합니다. 대화라면 각 화자의 대사를 그 화자의 음성으로 합성한 뒤, 클립을 대본 순서대로 이어 붙이세요.
- 가상 착용(Virtual Try-On) 영상 API: 사람에게 옷 입히기
Sume API로 가상 착용 영상을 만들려면 사진을 담아 sume-virtual-try-on이나 sume-virtual-fitting을 호출하거나, 스틸을 만든 뒤 움직임을 입히세요.
- AI로 흰 배경 제품 사진 만드는 방법
배경 제거 도구로 제품을 오려 낸 PNG를 흰 바탕에 합치거나, 이미지 모델이 사진을 흰 배경으로 다시 렌더링하게 하세요. 두 방법 모두 Sume로 할 수 있습니다.
- AI 앨범 커버 생성기: 3000×3000 정사각형 아트
정사각형 앨범 아트를 생성한 뒤 업스케일하세요. Apple은 최소 3000×3000을 권장합니다. Sume에서 2400×2400으로 생성해 1.25배 업스케일하면 3000×3000이 됩니다.
작성자 Sume