보이스오버 슬라이드쇼 만들기: 문장에 맞춰 슬라이드 넘기기

각 슬라이드를 그 내레이션 문장이 나오는 동안 보여 주면 보이스오버 슬라이드쇼가 됩니다. Sume에서는 TTS의 문장 타이밍이 렌더 한 번의 슬라이드 슬롯이 됩니다.

읽는 시간 5분Sume
전체 글

보이스오버가 들어간 슬라이드쇼를 만들려면 슬라이드마다 내레이션 문장을 하나씩 쓰고, 내레이션을 녹음하거나 생성한 뒤, 각 슬라이드를 그 문장을 말하는 시간만큼 정확히 화면에 두세요. 음악을 넣는다면 음성 아래에 작게 믹싱합니다. Sume에서는 TTS 1.0이 대본 전체를 읽고 문장마다 시작 시점과 길이를 반환하며, Timeline 1.0 렌더 한 번이 그 시간을 내레이션 위의 슬라이드 슬롯으로 씁니다.

내용은 Sume API 레퍼런스의 TTS 1.0 스키마와 Timeline 1.0 문서에서 가져왔으며, 모두 2026-09-27에 확인했습니다. Sume API 레퍼런스는 API 레퍼런스 문서의 바탕이 되는 OpenAPI 문서입니다. 현재 동작이라고 설명한 내용은 Sume의 코드에서 확인한 것입니다. 내레이션 없이 음악만 있는 슬라이드쇼는 이미지 슬라이드쇼 영상 API를 참고하세요.

슬라이드마다 문장에 맞춰 시간을 어떻게 정하나요?

대본은 슬라이드 하나에 한 문장씩 쓰세요. Sume의 규칙이 아니라 작성 관례이지만, 이렇게 하면 문장과 슬라이드가 일대일로 대응합니다. 그런 다음 POST /v1/tts-1.0/generate 한 번으로 대본 전체를 합성해 음성이 끊기지 않고 이어지게 하세요.

  • segmentation: { "mode": "sentence" }에는 timestamps: { "words": true }가 필요하며, 빈틈없는 segments[]를 반환합니다. 각 세그먼트는 다음 세그먼트가 시작하는 지점에서 정확히 끝납니다.
  • 컷은 기본적으로 문장의 마지막 단어에서 70 ms 뒤에 놓이고(boundary_lead_ms, 0–500), 그 뒤의 쉼은 다음 세그먼트가 흡수합니다. 그래서 각 슬라이드는 문장이 끝난 직후에 바뀝니다.
  • 현재 코드에서 각 세그먼트에는 index, text, start, end, duration_seconds가 담깁니다. 첫 세그먼트는 0에서 시작하고, 마지막 세그먼트는 파일의 duration_seconds에서 끝납니다.
  • WAV나 raw로 출력하면 문장마다 샘플 단위까지 정확한 audio_url도 따로 붙습니다. MP3에서는 타이밍만 받습니다.
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: trip-slideshow-narration-v1" \
  -d '{
    "transcript": "We landed at dawn. The old tram climbs to the castle. Dinner was by the river.",
    "voice": { "id": "YOUR_VOICE_ID" },
    "output_format": { "container": "wav", "encoding": "pcm_s16le", "sample_rate": 44100 },
    "timestamps": { "words": true },
    "segmentation": { "mode": "sentence" }
  }'

타이밍을 어떻게 영상으로 만드나요?

Timeline 1.0 렌더 한 번(POST /v1/timeline-1.0/render)이 내레이션을 오디오 스파인으로 재생하면서 문장마다 스틸 하나를 띄워 둡니다. 입력에는 규칙 세 가지가 적용되며, 어떤 TTS 값을 어느 필드에 복사할지는 아래 표에 정리했습니다.

  • 모든 URL은 이미 워크스페이스에 있는 media.sume.com 아티팩트나 에셋이어야 합니다. 앞서 실행한 Sume Job의 출력이 그 예이며, 호스트 밖 URL은 unsupported_media_source로 거부됩니다. 공개 API 레퍼런스에는 내 컴퓨터의 파일을 올리는 업로드 경로가 문서화되어 있지 않으므로, 예를 들어 이미지 API로 Sume가 생성한 스틸을 쓸 계획을 세우세요.
  • 스틸은 정지 화면으로 유지됩니다. motion은 받기는 하지만 motion_ignored 경고와 함께 무시되므로, 사진이 줌되거나 팬되지 않습니다.
  • 트랜지션은 선택 사항입니다. 트랜지션 하나는 최대 1초이면서 이웃한 두 슬롯 중 짧은 쪽의 절반을 넘을 수 없으며, 선언한 시작 시점이 계속 기준이 됩니다.
Sume API 레퍼런스, Timeline 1.0, 현재 코드 기준, 2026-09-27 확인.
TTS 결과Timeline 1.0 필드
audio_urlaudio.url: 내레이션 스파인
duration_secondsaudio.duration_seconds: 출력 길이, 1–1,800초
segments[i].startvideo[i].start: video[0].start는 0이어야 하고, 이후 시작 값은 커져야 함
segments[i].duration_secondsvideo[i].duration: 최소 0.2초
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: trip-slideshow-render-v1" \
  -d '{
    "audio": { "url": "https://media.sume.com/artifacts/artf_demo/narration.wav", "duration_seconds": 8.16 },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/slide-1.png", "start": 0, "duration": 2.43 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/slide-2.png", "start": 2.43, "duration": 2.61 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/slide-3.png", "start": 5.04, "duration": 3.12 }
    ],
    "soundtrack": {
      "url": "https://media.sume.com/artifacts/artf_demo/music.mp3",
      "loop": true, "duck_db": 8, "fade_out_seconds": 2
    }
  }'

보이스오버 아래에 음악은 어떻게 넣나요?

위 예시처럼 같은 렌더에 soundtrack을 추가하세요. 이 url도 Sume에 호스팅된 파일이어야 합니다. gain_db의 기본값은 −16 dB로, 스파인 아래에 까는 배경 음악 레벨입니다. loop는 짧은 트랙을 내레이션이 끝날 때까지 반복하고, fade_out_seconds(최대 10)는 음악을 페이드아웃하며, duck_db(0–20)는 내레이션이 나오는 동안 음악을 낮춥니다. 배경 음악은 영상에 배경 음악 넣기에서 자세히 다룹니다.

내레이션 슬라이드쇼의 비용과 한도는 어떻게 되나요?

유료 Job 두 개가 필요하며, 각각 기본적으로 5.5% 에이전트 수수료가 더해집니다. 렌더 문서는 먼저 POST /v1/timeline-1.0/plan으로 확인하세요. 이 호출은 과금되지 않으며, Job을 만들지 않고 길이와 과금되는 분 수를 반환합니다.

  • 내레이션: 1,000자당 $0.0475이며, 공백과 문장 부호도 글자 수에 포함됩니다. 요청당 최대 20,000자, 오디오 1,200초까지입니다.
  • 렌더: API 요금에 나온 출력 분당 $0.10이며, 예약되는 분량은 ceil(audio.duration_seconds / 60)분입니다.
  • 렌더 한 번은 슬롯 1–200개를 받아 1–1,800초 길이의 영상을 만듭니다.
  • 출력 길이는 항상 정확히 audio.duration_seconds이므로, 여기에 TTS 값을 넣으면 마지막 슬라이드가 내레이션과 함께 끝납니다.

출처

관련 글

활용 사례 카테고리의 다른 글

활용 사례 글 전체 보기

작성자 Sume