오디오 및 동영상 파일을 위한 음성 텍스트 변환 API

녹음된 오디오나 동영상을 업로드하면 자동 언어 감지 기능을 통해 75개 원본 언어로 화자 표시와 세그먼트별 타임스탬프가 포함된 대본을 얻을 수 있습니다. 동일한 프로젝트 안에서 자막과 더빙된 오디오를 포함해 135개 이상의 언어 및 지역별 옵션으로 번역됩니다.
화자 분리
75개 원본 언어
REST + Python SDK
upload, transcribe, read
OAuth 2.0
# 1. upload an audio or video file by link
curl -X POST https://api.rask.ai/api/library/v1/media/link \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"link": "https://example.com/interview.mp3", "name": "interview"}'

# 2. create the project - speech recognition starts automatically
#    src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"
GET /v2/projects/{project_id}/transcription
segments
# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq '.segments[] | {speaker, start, end, text: .src.text}'
전 세계 팀들이 사용하는
지원 기능

음성 텍스트 변환 API가 제공하는 모든 기능

음성 인식을 시작으로 모든 Rask 프로젝트가 진행됩니다. 대본은 화자 표시와 타임스탬프가 포함된 세그먼트 형태로 제공되며, 동일한 프로젝트 내에서 바로 편집, 번역, 자막 생성 및 음성 작업을 할 수 있습니다.

오디오 및 동영상 텍스트 변환

사전 녹음된 오디오나 동영상을 업로드하거나 링크를 입력하면, API가 음성을 세그먼트별로 텍스트로 변환해 줍니다.

화자 분리

서로 다른 화자가 자동으로 감지되며, 각 세그먼트에는 SPEAKER_00과 같은 화자 표시가 지정됩니다. 화자 수를 알고 있다면 미리 지정하거나 나중에 수정할 수 있습니다.

모든 세그먼트를 위한 타임스탬프

각 세그먼트는 HH:MM:SS,mmm 형식의 시작 시간과 종료 시간을 제공하므로 캡션, 검색, 녹음 파일 내 탐색에 바로 활용할 수 있습니다.

75개 원본 언어

75개 원본 언어에 대한 다국어 지원. 원본 언어를 비워두면 자동으로 감지되며, 2글자 코드로 직접 설정할 수도 있습니다.

동일 세그먼트 내 번역

각 세그먼트에는 원본 텍스트와 135개 이상의 언어 및 지역별 옵션 중 하나로 번역된 텍스트가 함께 포함되어, 대본과 번역본이 줄 단위로 정확하게 일치합니다.

.srt 및 .vtt 형식의 자막

완성된 모든 프로젝트에는 대본 세그먼트의 시간에 맞춰진 타겟 언어 자막 파일이 포함되어 있습니다. 자막 제작을 위해 다른 업체를 찾을 필요가 없습니다.

번역 시 전문 용어 적용

용어집을 사용하면 대본을 번역하거나 의도적으로 원본 언어로 유지할 때 제품명, 고유명사, 분야별 전문 용어를 일관되게 유지할 수 있습니다.

API를 통한 대본 편집

단어 수정, 타임스탬프 조정, 화자 재할당, 세그먼트 추가 또는 삭제가 가능합니다. 처음부터 다시 시작할 필요 없이 검토자가 최종 대본을 직접 수정할 수 있습니다.

제한 없는 확장

속도 제한, 동시 작업 할당량, 키별 제한이 없습니다. 전체 오디오 및 동영상 라이브러리에 대해 일괄 텍스트 변환 작업을 병렬로 실행하세요.
실행 화면 보기

하나의 대본이 5개 언어 버전으로 변환되는 과정을 확인해 보세요

원본 배경 오디오는 그대로 유지한 채, 동일한 클립이 영어, 프랑스어, 독일어, 포르투갈어, 스페인어로 텍스트 변환, 번역 및 음성 더빙되었습니다.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
작업 흐름

오디오 파일에서 대본까지 3단계 요청

프로젝트를 만들면 음성 인식에 이어 번역과 더빙이 한 번에 진행됩니다. 대본을 수정한 후 /generate 엔드포인트를 사용하세요.
1

오디오 또는 동영상 업로드

멀티파트 폼 데이터 형식으로 오디오나 동영상 파일을 전송하거나, 유튜브, 구글 드라이브, S3, 비메오 또는 기타 직접 링크를 입력하세요. 비용이 청구되기 전에 미디어 ID와 파일 정보를 먼저 확인할 수 있습니다.

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

프로젝트 생성

미디어 ID를 video_id로 입력하고 목표 언어를 설정하세요. 알고 있다면 원본 언어나 화자 수도 함께 지정할 수 있습니다. 바로 인식이 시작됩니다.

POST /v2/projects
3

대본 확인하기

번역된 미디어가 처리되는 동안, 대본 조각이 준비되는 대로 바로 내용을 확인할 수 있습니다. 작업이 완료되면 자막과 미디어 파일을 다운로드하세요.

GET /v2/projects/{id}/transcription
실시간 오디오가 아니라 완성된 녹음 파일을 대상으로 인식이 진행됩니다. 처리 시간은 파일의 길이, 화자 수, 목표 언어에 따라 달라집니다.
맞춤형 서비스

원하는 언어이나 형식이 목록에 없나요? 저희 팀에 문의해 보세요

목록에 없는 원본 언어, 플랫폼에 필요한 대본 형식, 더 빠른 처리 속도 또는 맞춤형 전달 방식 등, 회원님의 연동에 필요한 요구사항과 가능한 옵션을 저희 팀이 검토해 드립니다.

지원 언어 및 목소리

공개 목록에 없는 언어가 필요하신가요? 필요한 사항과 이용 가능한 옵션에 대해 저희 팀과 상담해 보세요.

전송 및 연동

웹훅, 자체 대기열 연동, S3 직접 전송, 맞춤형 엔드포인트를 지원합니다. 시스템에 맞는 방식을 알려주세요.

볼륨 및 처리량

배치 크기, 작업당 타겟 언어 수, 처리 우선순위는 고정된 제품 한계가 아니라 계약을 통해 조율할 수 있습니다.

보안 및 호스팅

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

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

동영상이 포함된 플랫폼

학습 관리 시스템(LMS), 고객 교육 플랫폼, 크리에이터 및 동영상 플랫폼, 웨비나 및 가상 이벤트 도구, 동영상 호스팅 및 워크플로 SaaS, 디지털 도입 플랫폼, 라이브 커머스 등입니다. 제품의 기능으로 녹화된 동영상의 대본, 자막, 번역본을 추가해 보세요.

현지화 및 제작 대행사

화자 이름이 표시된 대본을 검토자를 위한 초안으로 사용하고, API를 통해 내용을 수정한 뒤, 동일한 프로젝트에서 자막, 번역, 더빙본을 모두 제작할 수 있습니다.

사내 자체 동영상 제작

글로벌 유통 및 전자상거래, 글로벌 프랜차이즈, 미디어 출판사, 기업 대학 등에서 활용합니다. 녹화된 교육 영상, 웨비나, 인터뷰를 텍스트로 변환한 후 모든 시장에 맞추어 자막과 언어별 버전을 게시해 보세요.
고객 성공 사례

실제 팀, 가시적인 성과

Rask를 통해 동영상을 현지화한 기업들의 실제 수치와 이야기를 확인해 보세요.
화살표
화살표
코드

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

언어별로 제공되는 완성된 예시입니다. 오디오나 동영상 파일을 업로드하고, 프로젝트를 생성한 뒤 대기하면 화자와 타임스탬프가 포함된 대본 조각을 확인할 수 있습니다.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

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

    media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://example.com/interview.mp3"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)

    # src_lang omitted: the source language is detected automatically
    job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)

    transcript = await client.get_project_transcription(project_id=job.id)
    for seg in transcript.segments:
        print(seg.start, seg.end, seg.speaker, seg.src.text)

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}"}

with open("interview.mp3", "rb") as f:
    media = requests.post(f"{API}/api/library/v1/media", headers=h,
                          params={"kind": "audio"}, files={"data": f}).json()
while media["status"] == "processing":
    time.sleep(5)
    media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()

pid = requests.post(f"{API}/v2/projects", headers=h, json={
    "video_id": media["id"], "dst_lang": "es-mx", "num_speakers": 2}).json()["id"]
while requests.get(f"{API}/v2/projects/{pid}", headers=h).json()["status"] != "merging_done":
    time.sleep(10)

# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
    for i, s in enumerate(segments, 1):
        out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")
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());

let media = await call('POST', '/api/library/v1/media/link', { link: 'https://example.com/webinar.mp4' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }

let p = await call('POST', '/v2/projects', { video_id: media.id, src_lang: 'en', dst_lang: 'de-de' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }

const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path);   // German subtitles for your player
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. upload a local audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
  -H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | jq -r .id)

# 3. create the project once the media status is ready
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)

# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'
local file upload
audio file, multipart
<?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']];

$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
    'link' => 'https://example.com/interview.mp3']]));
while ($media['status'] === 'processing') {
    sleep(5);
    $media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}

$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
    'video_id' => $media['id'], 'dst_lang' => 'es-mx']]));
while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}

$t = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
foreach ($t['segments'] as $s) {
    echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}
Guzzle 7
plain HTTP
공식 SDK는 Python입니다. 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 사용자에게 직접 보여줄 수 있을 만큼 구체적입니다.
Two speakers
GET /v2/projects/{id}/transcription
{"segments": [
  {"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
   "src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
   "dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
  {"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
   "src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
   "dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

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

웹훅 엔드포인트를 지정하면 모든 상태 전환이 POST 요청으로 전송되므로 큐가 변경 즉시 반응할 수 있습니다. 웹훅 전달은 엔터프라이즈 온보딩의 일부입니다.
문서 읽기
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
결과물

대본 조각, 자막 및 번역된 미디어

텍스트 변환 엔드포인트에서 JSON 조각 형태로 대본을 확인하세요. 완료된 프로젝트에서는 목표 언어로 된 SRT 및 VTT 자막 파일, 번역된 동영상, 그리고 지원되는 플랜의 경우 번역된 음성만 담긴 별도의 WAV 트랙도 제공됩니다.
항목
형식
설명
segments
JSON
대본: 각 조각별 원문, 번역, 화자 표시, 시작 및 종료 시간
voiceover
WAV
지원 플랜의 경우 배경음 없이 번역된 음성만 제공
translated_audio
WAV
번역된 음성과 원래의 배경음악이 섞인 오디오
translation_srt_path
.srt
조각별 시간에 맞춘 목표 언어 자막
translation_vtt_path
.vtt
웹 플레이어용 WebVTT 자막
translated_video
MP4
보이스오버가 포함된 번역된 동영상
제어

자막을 구간별로 수정하세요

음성 인식이 초안을 만들어 줍니다. 구간별로 요청을 보내 단어, 시간 또는 화자 이름을 수정한 다음 번역된 버전을 다시 생성하세요. 재생성은 변경된 구간을 기준으로 요금 청구되며, 실행당 최소 1분이 적용됩니다.

문장 단위 편집

문장 단위 편집
모든 프로젝트는 자막을 개별 구간으로 제공하므로, 최종 자막 수정은 하나의 패치 요청으로 처리됩니다.
대본과 문장 불러오기
원본 텍스트를 수정하면 자동으로 다시 번역됩니다.
번역된 텍스트를 직접 수정하여 원하는 표현을 유지하세요.
타임스탬프 조정, 문장 추가 및 삭제
화자에게 연결된 목소리 변경하기

용어집

용어집
자막이 번역될 때 용어집을 사용하면 브랜드 이름, 고유명사, 전문 용어를 모든 버전에서 일관되게 유지하거나 필요에 따라 원문 그대로 둘 수 있습니다.

용어집 하나는 한 쌍의 언어에 적용되며 해당 목표 언어의 모든 지역별 변형에 공통으로 적용되므로 하나의 스페인어 용어집으로 es-mx 및 es-es 모두 커버할 수 있습니다. 프로젝트 기록은 glossary_version유지되므로 나중에 수정하더라도 완료된 작업이 예기치 않게 변경되지 않습니다.
입력

지원되는 파일 형식

팟캐스트, 인터뷰, 통화 녹음 같은 오디오 파일이나 지원되는 형식의 동영상을 텍스트로 변환하거나 URL을 전송하세요. 지원되지 않는 파일을 업로드하면 요금이 청구되기 전에 API에서 거부합니다.

동영상

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

오디오

4가지 형식
.mp3
.wav
.flac
.m4a

작업 전 메타데이터 확인

미디어 엔드포인트는 재생 시간, 파일 크기, 비디오 코덱, 프레임 속도, 해상도, 오디오 코덱, 샘플링 속도 및 채널 레이아웃을 반환합니다. 프로젝트는 오디오 또는 비디오 분 단위로 청구되므로 사전에 파일을 검증하고 비용을 예상해 보세요.
보안 및 규정 준수

오디오 및 음성 데이터를 위한 기업용 보안

Brask Inc는 SOC 2 Type II 인증을 획득하고 GDPR을 준수하며, Trust Center에 실시간 보안 상태를 공개하므로 녹음 파일과 자막이 철저히 검증된 보안 통제 하에 처리됩니다.

인증

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와 STT(음성 인식) API 및 자체 파이프라인 비교

STT API는 오디오를 텍스트로 변환해 줍니다. 해당 텍스트를 자막, 번역, 더빙 버전으로 만들려면 추가적인 파이프라인 작업이 필요합니다. 다음은 동일한 결과물을 만드는 두 가지 방식입니다.
필요한 기능
Rask API
부품들을 조립하는 방식
화자 이름이 포함된 자막
포함됨
대부분의 STT API에 포함됨
타임스탬프
구간별
많은 STT API에서 단어별
자막 번역
동일한 프로젝트, 135개 이상의 언어 및 지역 옵션
별도의 번역 API
.srt 및 .vtt 형식의 자막
대상 언어로 포함됨
자체 타이밍 데이터를 기반으로 제작
더빙된 오디오 및 동영상
포함됨
TTS 공급업체와 자체 믹싱
구간 수정 중
요청 한 번으로 수정 후 다시 생성
자체 복사본 편집 및 재동기화
사용량 제한
없음
제공업체에서 적용하는 정책
실시간 오디오 실시간 자막 변환
스트리밍 음성 텍스트 변환 API 사용하기
목적에 맞는 기능
가장 합리적인 가격의 텍스트 변환 기능
전용 음성 텍스트 변환 API로 비용 절감하기
오디오 시간 기준 요금제
자주 묻는 질문

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

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

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

어떤 언어로 텍스트를 변환할 수 있나요?

동영상 없이 오디오 파일만 텍스트로 바꿀 수 있나요?

화자 분리 기능을 지원하나요?

API에서 단어 단위의 타임스탬프를 제공하나요?

실시간 텍스트 변환을 지원하나요?

텍스트 변환 정확도는 어느 정도인가요?

사용자 지정 단어나 전문 용어를 추가할 수 있나요?

SRT 파일로 텍스트를 받을 수 있나요?

직접 작성한 텍스트를 사용할 수 있나요?

음성 변환은 어떻게 청구되나요?

무료 플랜이 있나요?

API 접근 권한과 API 키는 어떻게 발급받나요?

단 하루 만에 더블링을 시작해 보세요

오늘 첫 요청을 보내보시고, 대량 이용 조건이나 흔하지 않은 언어가 필요할 때 저희에게 문의해 주세요.