동영상 더빙을 위한 텍스트 음성 변환 API

동영상 또는 오디오 녹음 파일과 함께 시간 설정된 대본을 보내면, 타임라인에 딱 맞는 음성이 만들어집니다. 135개 이상의 언어 및 지역 옵션에서 음성 라이브러리의 AI 목소리나 목소리 복제 기능을 선택하고, 하나의 프로젝트에서 더빙, 동영상, 자막을 모두 다운로드하세요.
대본을 더빙으로 변환
AI 목소리 및 목소리 복제
REST + Python SDK
script in, voiceover out
OAuth 2.0
# 1. send your script as timed segments - one speaker per line
curl -X POST https://api.rask.ai/v2/transcriptions \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"segments": [
    {"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
     "src": {"text": "Welcome to the new dashboard.", "lang": "en"},
     "dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}}
  ]}'

# 2. voice the script over your video
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}"
GET /v2/projects/{project_id}
voiceover links
# When status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{status, voiceover, translated_audio, translated_video}'
전 세계 팀들이 사용하는
주요 기능

동영상을 위해 텍스트 음성 변환 API가 제공하는 모든 기능

작성한 대본을 화면에 알맞은 더빙으로 바꿔보세요. 각 화자에 맞는 목소리, 구간별 타이밍, 배경 오디오, 자막 및 번역을 하나의 프로젝트에서 처리할 수 있습니다. 추가로 립싱크(별도 과금)도 이용할 수 있습니다.

입력한 대본을 말로 변환

직접 작성한 텍스트 구간이나 SRT 파일로 자막을 만들면, API가 해당 대본에 맞춰 목표 언어로 음성을 생성합니다.

목소리 라이브러리

모든 목표 지역마다 성별이 지정된 AI 목소리 프리셋이 있습니다. 목소리 엔드포인트를 통해 프로젝트에 사용할 목소리를 확인하고, 목소리 ID를 이용해 각 화자에게 지정해 보세요.

사용자 지정 목소리 및 목소리 복제

저장된 커스텀 목소리 복제 기능을 브랜드의 고유한 목소리로 활용하거나, 지원되는 목소리 복제 언어에서 즉석 목소리 복제를 통해 화면 속 화자의 원래 목소리를 그대로 유지해 보세요.

영상 화면에 맞춘 타이밍

각 구간마다 시작 시간과 종료 시간이 지정되어 있어 대사가 동영상에서 정확한 위치에 나타납니다.

캐릭터 목소리와 대화

각 대사에 화자를, 각 화자에게 목소리를 지정하면 대화나 여러 캐릭터의 목소리가 명확하고 일관성 있게 유지됩니다.

135개 이상의 언어 및 지역 옵션

한 언어로 대본을 작성하고 다른 언어로 음성을 입혀보세요. Rask가 번역을 처리하며, 모든 목표 지역에 맞춤형 AI 목소리가 제공됩니다.

오디오 전용 트랙

일부 요금제에서는 배경음악이 없는 WAV 파일 형식의 오디오를 다운로드하여 직접 편집하거나, 전체 믹싱 파일 및 완성된 동영상을 다운로드할 수 있습니다.

원하는 문장만 수정하고 다시 생성하세요.

특정 구간의 텍스트나 화자의 목소리를 변경한 후 다시 생성할 수 있습니다. 처음부터 다시 녹음할 필요가 없으며, 수정된 구간에 대해서만 비용이 청구됩니다.

제한 없는 규모 확장

이용량 제한, 동시 작업 할당량, 키별 속도 제한이 없습니다. 긴 콘텐츠와 전체 동영상 카탈로그를 동시에 여러 개 처리하세요.
작동 모습 보기

한 영상이 다섯 가지 언어로 말하는 모습을 들어보세요.

동일한 영상 클립이 영어, 프랑스어, 독일어, 포르투갈어, 스페인어로 각각 더빙되었으며, 원본 배경음악은 유지된 채 영상 타이밍에 완벽히 맞추어져 있습니다.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
작업 흐름

대본에서 음성 해설까지 단 3단계

프로젝트를 생성하면 대본에 대한 음성 생성이 시작됩니다. 텍스트나 목소리를 변경한 후 /generate 엔드포인트를 사용하세요.
1

동영상 또는 오디오 업로드

파일이나 지원되는 미디어 URL을 사용하여 음성 해설을 입힐 동영상 또는 오디오 녹음본을 업로드하세요. 타임라인을 기반으로 대본의 타이밍이 설정됩니다.

POST /api/library/v1/media/link
2

대본 보내기

타임스탬프와 화자 정보가 포함된 텍스트 구간이나 SRT 파일에서 대본을 생성한 후, 대본 ID(transcript_id)와 목표 언어로 프로젝트를 만드세요.

POST /v2/transcriptions
3

목소리 선택 및 다운로드

목소리 목록을 확인하고, 각 화자에게 기본 설정 또는 복제된 목소리를 지정한 다음, 필요시 다시 생성하여 음성 해설, 동영상, 자막 파일을 다운로드하세요.

GET /v2/projects/{id}/voices
처리 시간은 프로젝트에 따라 다릅니다. 프로젝트 전체의 음성이 생성되어 파일로 전달되므로, 이 API는 실시간 대화보다는 완성된 동영상에 적합합니다.
사용자 맞춤형 서비스

라이브러리에 없는 목소리가 필요하신가요? 저희 팀에 문의하세요.

브랜드 목소리, 카탈로그에 없는 언어, 더 높은 처리량 또는 자체 전송 방식 등 음성 해설 연동에 특별한 요구사항이 있다면, 저희 팀이 요구사항과 가능한 옵션을 검토해 드립니다.

언어 및 목소리

공개 카탈로그에 없는 언어이나 목소리가 필요하신가요? 요구사항과 가능한 옵션에 대해 저희 팀과 상의해 보세요.

전송 및 연동

웹훅(Webhook), 자체 대기열로의 전송, S3로의 직접 전달, 맞춤형 엔드포인트 등을 지원합니다. 파이프라인에서 원하는 전달 방식을 알려주세요.

볼륨 및 처리량

일괄 처리 규모, 작업당 목표 언어 수, 처리 우선순위는 고정된 제품 한도가 아니라 계약 조건에 따라 결정됩니다.

보안 및 호스팅

데이터 보관 위치, SSO 및 SAML, 보존 규칙, 보안 검토 지원은 기업용 온보딩 과정에서 처리됩니다.
사용 사례

동영상에 텍스트 음성 변환 API를 사용하는 대상

동영상이 포함된 플랫폼

학습 관리 시스템(LMS) 및 고객 교육 플랫폼, 크리에이터 및 동영상 플랫폼, 웨비나 및 가상 이벤트 도구, 동영상 호스팅 및 워크플로 SaaS, 디지털 채택 플랫폼, 라이브 커머스. 사용자가 제품을 벗어나지 않고도 대본을 입력하거나 업로드하여 여러 언어로 동영상 음성을 생성할 수 있습니다.

현지화 및 제작 대행사

AI 목소리나 고객의 맞춤형 목소리로 클라이언트 동영상의 승인된 대본에 음성을 입히고, 자체 믹싱을 위한 음성 전용 WAV 파일을 전달하세요. 검토 후 한 줄을 수정하고 해당 세그먼트만 다시 생성할 수 있습니다.

자체적인 지속적 동영상 제작

글로벌 소매 및 전자상거래, 글로벌 프랜차이즈, 미디어 발행사, 기업 대학. 작성된 대본으로 교육, 제품, 마케팅 동영상의 음성을 제작하고 제품이 변경되면 텍스트를 업데이트하세요.
고객 사례

실제 팀, 가시적인 성과

Rask AI를 통해 기업이 동영상을 현지화한 방식을 수치로 확인해 보세요.
화살표
화살표
코드

텍스트 음성 변환 API 코드 예시

각 언어별 완전한 예시: 시간대별 세그먼트로 대본 전송, 프로젝트 생성, 라이브러리에서 목소리 선택, 음성 재생성 및 다운로드.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

async def wait(client, job):
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)
    return job

async def main():
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

    script = await client.create_transcription(data=schemas.TranscriptionCreate(segments=[
        schemas.SegmentCreate(speaker="SPEAKER_00", start="00:00:00,500", end="00:00:04,800",
            src=schemas.SegmentTextCreatePatch(text="Welcome to the new dashboard.", lang="en"),
            dst=schemas.SegmentTextCreatePatch(text="Bienvenido al nuevo panel.", lang="es-mx")),
    ]))

    job = await wait(client, await client.create_project(data=schemas.ProjectCreate(
        video_id=VIDEO_ID, dst_lang="es-mx", transcript_id=script.id)))

    # pick a female AI voice preset from the library for SPEAKER_00
    voices = await client.get_project_voices(project_id=job.id)
    preset = next(v for v in voices if v.gender == "female")
    await client.patch_project(project_id=job.id, data=schemas.ProjectPatch(voice={**job.voice, "SPEAKER_00": preset.id}))

    job = await wait(client, await client.generate_project(project_id=job.id))
    print(job.voiceover, job.translated_video)

asyncio.run(main())
github.com/braskai/rask-sdk
async, typed models
import time, requests

AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
API  = "https://api.rask.ai"
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
                      data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}

def wait(pid):
    while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
        time.sleep(10)
    return p

script = requests.post(f"{API}/v2/transcriptions", headers=h, json={"segments": [
        {"speaker": "SPEAKER_00", "start": "00:00:00,500", "end": "00:00:04,800",
         "src": {"text": "Welcome to the new dashboard.", "lang": "en"},
         "dst": {"text": "Bienvenido al nuevo panel.", "lang": "es-mx"}},
    ]}).json()

pid = requests.post(f"{API}/v2/projects", headers=h, json={
    "video_id": VIDEO_ID, "dst_lang": "es-mx", "transcript_id": script["id"]}).json()["id"]
project = wait(pid)

voices = requests.get(f"{API}/v2/projects/{pid}/voices", headers=h).json()
preset = next(v for v in voices if v["gender"] == "female")
requests.patch(f"{API}/v2/projects/{pid}", headers=h,
               json={"voice": {**project["voice"], "SPEAKER_00": preset["id"]}})
requests.post(f"{API}/v2/projects/{pid}/generate", headers=h)
print(wait(pid)["voiceover"])
requests + polling
no SDK required
// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
  method: 'POST',
  headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
  body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then((r) => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());
const wait = async (id) => { let p; while ((p = await call('GET', `/v2/projects/${id}`)).status !== 'merging_done') await sleep(10000); return p; };

const script = await call('POST', '/v2/transcriptions', { segments: [
  { speaker: 'SPEAKER_00', start: '00:00:00,500', end: '00:00:04,800',
    src: { text: 'Welcome to the new dashboard.', lang: 'en' },
    dst: { text: 'Bienvenido al nuevo panel.', lang: 'es-mx' } },
] });

const { id } = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang: 'es-mx', transcript_id: script.id });
const project = await wait(id);

const voices = await call('GET', `/v2/projects/${id}/voices`);
const preset = voices.find((v) => v.gender === 'female');
await call('PATCH', `/v2/projects/${id}`, { voice: { ...project.voice, SPEAKER_00: preset.id } });
await call('POST', `/v2/projects/${id}/generate`);
console.log((await wait(id)).voiceover);
fetch, Node 18+
plain HTTP
# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials" | jq -r .access_token)

# 2. your script as an SRT file in the target language
TRANSCRIPT_ID=$(curl -s -X POST "https://api.rask.ai/v2/transcriptions/srt?dst_lang=es-mx" \
  -H "Authorization: Bearer $TOKEN" -F "dst=@script_es-mx.srt" | jq -r .id)

# 3. voice it over the video
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\", \"transcript_id\": \"$TRANSCRIPT_ID\"}" | jq -r .id)

# 4. when status is merging_done, read the voiceover links
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{status, voiceover, translated_video}'
POST /v2/transcriptions/srt
script from an SRT file
<?php
use GuzzleHttp\Client;

$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
    ['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];

$script = $json($http->post('/v2/transcriptions', ['headers' => $h, 'json' => ['segments' => [[
    'speaker' => 'SPEAKER_00', 'start' => '00:00:00,500', 'end' => '00:00:04,800',
    'src' => ['text' => 'Welcome to the new dashboard.', 'lang' => 'en'],
    'dst' => ['text' => 'Bienvenido al nuevo panel.', 'lang' => 'es-mx'],
]]]]));

$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
    'video_id' => $videoId, 'dst_lang' => 'es-mx', 'transcript_id' => $script['id']]]));

while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['voiceover'];
Guzzle 7
plain HTTP
Python은 공식 SDK입니다. Node, PHP, cURL 탭은 동일한 엔드포인트를 사용하는 일반 HTTP 예시입니다.
진행 상황

음성 프로젝트의 진행 상황 보고 방식

음성 생성은 문서화된 상태를 갖춘 프로젝트로 실행되므로, 긴 콘텐츠의 경우에도 실제 진행 상황을 보여줄 수 있습니다. 세 가지 그룹만 관리하시면 됩니다.

성공, 여기서 중지

merging_done
음성 생성이 완료되었습니다. 프로젝트를 한 번 더 호출하여 다운로드 링크를 확인하세요.

진행 중이며 계속 상태를 확인합니다

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
그리고 다음 상태와 _done 일치합니다. 단계별 진행 상황 화면에 깔끔하게 맞춤 설정할 수 있습니다.

실패 시 중단하고 보고하며

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words 및 forbidden_link 사용자에게 직접 보여주기에 충분히 명확합니다.
Voice options in a project, es-mx
GET /v2/projects/{project_id}/voices
{"label": "Renata",      "gender": "female", "sample_src": "https://..."}   AI voice preset
{"label": "Gerardo",     "gender": "male",   "sample_src": "https://..."}   AI voice preset
{"label": "Maria Lopez", "gender": "auto",   "sample_src": "https://..."}   custom voice clone
{"label": "Voice Clone", "gender": "auto",   "sample_src": null}            instant voice clone

또는 상태 확인 과정을 완전히 건너뛰세요

웹훅 엔드포인트를 지정하면 상태가 바뀔 때마다 POST 요청이 전송되므로, 대기열이 변경 즉시 반응합니다. 웹훅 전송 기능은 엔터프라이즈 플랜에서 제공됩니다.
문서 읽기
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
결과물

음성 오디오, 동영상, 자막

새로운 음성과 SRT 및 VTT 자막이 포함된 동영상을 다운로드하세요. 지원되는 플랜에서는 음성 오디오만 WAV 파일로 다운로드하거나 원래 배경 오디오와 섞어서 다운로드할 수도 있습니다.
필드
형식
설명
translated_video
MP4
새로운 음성이 입혀져 바로 게시할 수 있는 동영상
voiceover
WAV
편집용으로 배경 소음 없이 생성된 음성만 포함
translated_audio
WAV
번역된 음성과 원래 배경 오디오가 섞인 파일
translation_srt_path
.srt
번역된 언어의 자막
translation_vtt_path
.vtt
웹 플레이어용 WebVTT 자막
original_video
MP4
참고용으로 저장된 원본 파일
제어

대사나 목소리를 바꾸고, 해당 부분만 다시 생성하세요

스크립트는 문장 단위로 저장됩니다. 한 줄의 텍스트를 수정하거나 특정 화자의 목소리를 변경한 후 다시 생성하면, 변경된 문장만 최소 1분 기준으로 비용이 청구됩니다.

문장 단위 편집

문장 단위 편집
모든 프로젝트는 타임스탬프, 화자, 텍스트가 포함된 문장 단위로 스크립트를 제공하므로, 간단한 수정 요청으로 바로 고칠 수 있습니다.
대본과 문장 가져오기
원본 텍스트를 수정하면 AI가 다시 번역합니다
번역된 텍스트를 직접 수정하여 원하는 표현을 유지하세요
타임스탬프 조정, 문장 추가 및 삭제
화자에게 지정된 목소리 변경하기

전문 용어 사전

전문 용어 사전
Rask AI가 스크립트를 다른 언어로 번역할 때, 용어 사전을 사용하면 브랜드 이름과 전문 용어를 모든 버전에서 동일하게 유지하거나 필요에 따라 원문 그대로 둘 수 있습니다.

하나의 용어 사은 하나의 언어 쌍을 다루며 해당 타겟 언어의 모든 지역별 변형에 적용되므로, 하나의 스페인어 사전으로 es-mx 및 es-es 지원합니다. 프로젝트는 glossary_version을 기록하므로, 나중에 수정해도 완료된 작업이 예기치 않게 변경되지 않습니다.
입력

지원하는 파일 형식

지원되는 형식의 동영상을 업로드하거나 URL을 입력하세요. 스크립트는 API를 통한 텍스트 문장이나 SRT 파일 형식으로 가져올 수 있습니다.

동영상

7개 형식
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

오디오

4개 형식
.mp3
.wav
.flac
.m4a

비용 발생 전 상세 정보 확인

미디어 엔드포인트는 재생 시간, 파일 크기, 동영상 코덱, 프레임 레이트, 해상도, 오디오 코덱, 샘플 레이트 및 채널 레이아웃을 반환합니다. 음성 녹음은 글자 수가 아니라 동영상 재생 시간(분)을 기준으로 청구되므로, 미리 파일을 검증하고 비용을 예상해 보세요.
보안 및 규정 준수

스크립트와 목소리를 위한 기업 수준의 보안

Brask Inc는 SOC 2 Type II 인증을 획득하고 GDPR을 준수하며, 트러스트 센터에서 실시간 운영 상태를 공개합니다. 맞춤형 목소리 복제는 화자의 동의 하에 이루어집니다.

인증

SOC 2 Type II
GDPR
CAI 및 C2PA 회원

암호화

전송 중 TLS 1.2 암호화
저장 시 AES-256 암호화
SSE-S3 관리형 키
최소 12개월마다 키 교체

콘텐츠 보호

폐쇄형 AI 환경
일반 모델 학습에 절대 사용되지 않음
자유로운 내보내기, 잠금 현상 없음

액세스

SSO 및 SAML
역할 기반 접근 제어
OAuth 2.0 클라이언트 자격 증명

기업

데이터 보관 지역 선택 옵션
맞춤형 SLA
전담 계정 관리자

목소리 권리 보호

사용 권한이 포함된 합성 목소리
동의 기반 목소리 복제
AI 안전 제어 및 사람의 직접 검토
비교

Rask API와 직접 구축하는 성우 파이프라인 비교

스트리밍 텍스트 음성 변환 API는 텍스트를 오디오 데이터로 변환하여 실시간으로 사용할 수 있게 해줍니다. 공개된 동영상에 들어갈 성우 녹음에는 타이밍 맞추기, 화자별 목소리 지정, 오디오 믹싱, 자막 생성, 그리고 종종 번역 작업까지 필요합니다. 동일한 성우 작업을 두 가지 방식으로 구현한 결과입니다.
필요한 항목
Rask API
개별 부품 조합 방식
동영상에 맞춘 스크립트 타이밍
시작 및 종료 시간이 포함된 구간
직접 구현하는 싱크 맞춤 로직
화자 또는 캐릭터별 목소리
프로젝트별 목소리 맵
요청별로 관리되는 목소리 ID
일관된 브랜드 목소리
맞춤형 목소리 복제
별도의 복제 서비스 제공업체
다른 언어로 된 같은 대본
같은 프로젝트 내에서의 번역
번역 API와 새로운 타이밍
배경음악 및 효과음
보이스오버와 함께 믹싱됨
직접 진행하는 믹싱 단계
.srt 및 .vtt 형식의 자막
포함됨
사용자의 타이밍 데이터를 바탕으로 생성됨
목소리만 포함된 오디오 트랙
지원 요금제의 WAV 파일
직접 이어 붙여야 하는 오디오 조각
한 줄 수정하기
수정된 구간 다시 생성하기
파일 재합성 및 재믹싱
이용 제한
없음
제공업체에서 정한 규정
실시간 스트리밍 음성 에이전트
스트리밍 TTS API 사용
맞춤 제작됨
자주 묻는 질문

텍스트 음성 변환 API: 자주 묻는 질문

원하시는 내용을 찾지 못하셨나요? 영업팀에 문의해 주세요.

Rask에 텍스트 음성 변환 API가 있나요?

음성 에이전트나 콜센터에도 사용할 수 있나요?

API에서 스트리밍 오디오 출력을 지원하나요?

스크립트는 어떻게 전송하나요?

어떤 목소리를 사용할 수 있나요?

나만의 목소리를 사용할 수 있나요?

어떤 언어를 지원하나요?

SSML 태그나 사용자 지정 발음을 지원하나요?

감정과 표현력을 조절할 수 있나요?

음성을 생성하려면 동영상이 꼭 필요한가요?

요금이 글자수 기준인가요?

무료 체험이나 무료 크레딧이 있나요?

API 이용 권한과 API 키는 어떻게 발급받나요?

반나절만에 더빙 시작하기

오늘 첫 요청을 보내보세요. 대량 계약 조건이나 다른 곳에 없는 언어가 필요할 때 저희에게 연락해 주세요.