Sume Avatar 1.0

Sume API로 말하는 아바타 영상에 B-roll 넣기

Avatar 1.0 클립의 음성을 Timeline 스파인 하나로 쓰고 B-roll 슬롯으로 컷어웨이하세요. 돌아올 때 source_in을 start와 같게 두면 입 모양이 말과 어긋나지 않습니다.

읽는 시간 6분Sume
전체 글

Sume API로 토킹 헤드 아바타 영상에 B-roll을 넣으려면 아바타 클립의 오디오를 분리해 Timeline 1.0 렌더의 스파인으로 쓰고, video[] 슬롯에 아바타 클립과 B-roll을 번갈아 배치하세요. 음성은 모든 컷어웨이 동안 계속 재생되며, 아바타로 돌아올 때마다 source_in을 그 슬롯의 start와 같게 두면 입 모양이 다시 올바른 단어에 맞춰집니다.

아래 내용은 2026-09-26에 확인한 아바타 영상, 오디오 분리, Timeline 1.0, 타임라인 합성 문서와 Sume API 레퍼런스를 기준으로 합니다. 현재 동작이라고 설명한 내용은 Sume의 코드에서 확인한 것입니다. 렌더 문서 전반은 롱폼 영상을 조립하는 방법을 참고하세요.

무엇이 필요하고, 어떤 호출을 쓰나요?

렌더에 들어가는 모든 URL은 이미 워크스페이스에 있는 media.sume.com 아티팩트나 에셋이어야 합니다. 여기서는 모두 앞서 실행한 Sume Job의 출력입니다.

  • A-roll: POST /v1/avatar-1.0/talking-video로 만든 말하는 아바타 영상입니다. Job 하나가 다루는 추정 길이는 4–60초이며, 완료된 결과에는 media.sume.com 영상 아티팩트가 포함될 수 있습니다.
  • B-roll: 앞서 실행한 Sume Job에서 나온, Sume에 호스팅된 클립이나 스틸입니다. Sume의 모델 문서 (영문)에 따르면 말 없는 비트, B-roll, 제품 모션은 이미지 생성, 검사, 영상 생성 순서로 만들며, 영상 모델은 나중에 입힌 보이스오버에 맞춰 립싱크하지 않습니다. 그래서 말하는 샷은 아바타로 유지합니다.
  • 멈춤 구간(선택): 다중 장면 아바타 영상에는 voice.type: "silence" 비트를 넣을 수 있습니다. duration이 필수인 말하지 않는 비트로, 음성에 틈을 만들어 제품 샷이 들어갈 자리를 줍니다.
아바타 영상, 오디오 분리, 타임라인 합성, Timeline 1.0 기준 이 워크플로의 호출, 2026-09-26 확인.
단계호출반환값
A-roll 영상POST /v1/avatar-1.0/talking-video말하는 아바타 영상, 4–60초
음성 스파인POST /v1/audio-detachwav 형식의 audio_url
진행자와 스틸POST /v1/timeline-1.0/composeMP4 샷 하나, 최대 300초
조립POST /v1/timeline-1.0/renderMP4 하나, 최대 1800초

아바타의 음성을 어떻게 스파인으로 만드나요?

아바타 클립의 URL을 range 없이 POST /v1/audio-detach로 보내세요. 기본 출력은 소스의 샘플레이트와 채널을 그대로 쓰는, 샘플 단위로 정확한 wav이며 audio.url이 기대하는 형식입니다. 결과의 duration_seconds는 audio.duration_seconds가 됩니다.

여기서는 음성 인식용 형태인 sample_rate: 16000과 channels: "mono" 조합을 쓰지 마세요. API 레퍼런스에 따르면 출력은 스파인의 샘플레이트와 채널 수를 그대로 이어받으며, 32 kHz 미만인 스파인은 audio_spine_low_fidelity 경고를 냅니다.

A-roll과 B-roll 슬롯은 어떻게 배치하나요?

start는 슬롯이 스파인 위에 놓이는 위치이고, source_in은 파일 안의 인포인트입니다. 스파인이 아바타 자신의 오디오이므로 스파인의 시간과 아바타 클립의 시간은 같은 순간을 가리킵니다. 그래서 하드 컷에서는 모든 아바타 슬롯이 자신의 start와 같은 source_in을 씁니다. 현재 컴파일러에서는 슬롯 자체의 오디오가 전혀 믹싱되지 않으므로, B-roll의 소리가 목소리와 겹칠 일은 없습니다.

아바타로 돌아오는 지점은 하드 컷으로 두세요. transition이 있으면 현재 컴파일러는 들어오는 클립을 start보다 트랜지션 길이만큼 먼저 시작하므로, 여기에 맞는 source_in은 start에서 그 길이를 뺀 값이 됩니다.

B-roll 슬롯은 자신의 source_in(기본값 0)부터 재생됩니다. Sume API 레퍼런스에 따르면 슬롯보다 짧은 클립은 render.pad_mode로 채워지고, 스틸은 정지 화면으로 유지됩니다.

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: timeline-broll-001" \
  -d '{
    "audio": { "url": "https://media.sume.com/artifacts/artf_demo/avatar-voice.wav", "duration_seconds": 20 },
    "video": [
      { "source_url": "https://media.sume.com/artifacts/artf_demo/avatar.mp4", "start": 0, "duration": 5 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/broll-1.mp4", "start": 5, "duration": 4 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/avatar.mp4", "start": 9, "duration": 6, "source_in": 9 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/product.png", "start": 15, "duration": 2 },
      { "source_url": "https://media.sume.com/artifacts/artf_demo/avatar.mp4", "start": 17, "duration": 3, "source_in": 17 }
    ]
  }'

컷어웨이 중에도 진행자를 화면에 남길 수 있나요?

네. 타임라인 합성은 제품 이미지 같은 스틸 하나와 영상 하나를 한 화면에 넣습니다. stack의 기본값을 쓰면 위에 스틸이 오는 반배너 형태가 됩니다.

컷어웨이에 쓰려면 합성의 video.source_in과 video.duration을 컷어웨이로 덮을 아바타 클립 구간에 맞추고, 결과를 같은 start 위치의 video[]에 source_in: 0으로 넣으세요. 합성된 클립은 이미 컷 지점에서 시작하기 때문입니다. 합성의 output.width와 output.height는 타임라인에 맞추세요.

편집본은 어떤 프레임 레이트와 크기를 쓰나요?

output.fps를 생략하면 가장 긴 영상 소스가 프레임 레이트를 정합니다. 대부분이 아바타인 편집본에서는 프레임 레이트가 다른 B-roll이 리샘플링되는 쪽입니다. 몇 프레임마다 한 프레임이 반복되거나 빠지며, 이는 움직임에서 저더(떨림)로 보이고 output_fps_resamples_sources로 보고됩니다.

Timeline의 기본 출력은 1080×1920이지만, 아바타 영상의 resolution은 현재 720p이고 기본 aspect_ratio는 9:16입니다. output.width와 output.height를 최종 전달할 크기로 지정하고, 모양이 다른 B-roll에는 fit을 지정하세요. 값은 cover(기본값), contain, stretch, blur 중 하나입니다.

비용은 얼마인가요?

API 요금에 나온 렌더의 공개 요율은 출력 분당 $0.10이며, 예약되는 분량은 ceil(audio.duration_seconds / 60)분입니다. 그래서 위의 20초 편집본은 일 분을 예약합니다. 아바타 영상, 오디오 분리, 합성 단계는 각각 별도의 Job이며 따로 과금됩니다.

출처

관련 글

작성자 Sume