번역된 SRT 및 VTT 파일용 자막 API

동영상을 한 번만 업로드하면 음성 내용에 맞춰 시간 설정이 완료된 SRT 및 WebVTT 형식의 자막 파일을 모든 타겟 언어로 받아볼 수 있습니다. API로 자막을 수정하고 업데이트된 파일을 다운로드하여 동영상 플레이어, 앱, 편집 프로그램에 바로 적용하세요.
SRT 및 WebVTT
135개 이상의 언어 및 지역 옵션
REST + Python SDK
upload, create, download
OAuth 2.0
# 1. upload the video once - YouTube, Drive, S3, Vimeo or direct URL
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/onboarding.mp4", "name": "onboarding"}'

# 2. one project per subtitle language
for lang in es-mx fr-fr ja-jp; do
  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\": \"$lang\"}"
done
GET /v2/projects/{project_id}
.srt + .vtt
# When status is merging_done, download both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o onboarding.es-mx.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o onboarding.es-mx.vtt "$(echo $P | jq -r .translation_vtt_path)"
전 세계 팀들이 사용하는
주요 기능

자막 API가 제공하는 모든 기능

팟캐스트나 인터뷰를 포함한 동영상 또는 오디오 녹음 파일에서 번역된 SRT 및 WebVTT 파일을 만들어 보세요. 프로젝트마다 타겟 언어를 선택하면 자막 파일은 물론 대본, 번역본, 더빙 콘텐츠까지 함께 제공됩니다.

SRT 및 WebVTT 파일

작업이 완료된 모든 프로젝트에서는 타겟 언어로 된 .srt 파일과 .vtt 파일이 제공됩니다. 동영상 편집 프로그램과 대부분의 플랫폼에서는 SRT 파일을, 웹 동영상 재생에는 WebVTT 파일을 사용할 수 있습니다.

다른 언어로 제공되는 자막

모든 시장의 시청자들이 언어 장벽 없이 콘텐츠를 즐길 수 있도록 하세요. 하나의 영상 업로드로 es-mx, pt-br, fr-ca 등 각 타겟 언어별 프로젝트를 생성할 수 있습니다. 원본 언어는 자동으로 감지됩니다.

음성 내용에 맞춘 타이밍

각 자막은 시작 시간과 종료 시간이 포함된 대본 구간을 따르므로, 음성이 나오는 시점에 맞춰 화면에 자막이 표시됩니다.

원본 언어 자막

대본에는 타임스탬프와 함께 각 구간의 원본 텍스트가 담겨 있습니다. 몇 줄의 코드만 작성하면 이를 SRT 또는 VTT 파일로 변환하여 동일한 언어의 자막으로 활용할 수 있습니다.

대화를 위한 화자 라벨

대본의 각 구간에는 화자 라벨이 포함되어 있어, 인터뷰나 패널 토론, 대화 장면의 자막에 화자 정보를 추가할 수 있습니다.

게시 전 자막 수정하기

API를 통해 어떤 구간이든 텍스트나 타이밍을 수정하고 다시 생성할 수 있습니다. 알아듣기 어려운 단어, 이름, 억양 등을 한 번만 수정하면 모든 포맷에 일괄 적용됩니다.

모든 언어에서 일관된 용어 유지

용어집을 사용하면 제품 이름과 전문 용어가 모든 자막 언어에서 동일하게 유지되거나, 의도에 따라 원본 언어 그대로 유지될 수 있습니다.

자막과 더빙 버전 동시 제공

동일한 프로젝트에서 번역된 동영상 및 오디오 트랙도 함께 제공되므로, 단 한 번의 업로드로 자막과 더빙 버전을 모두 얻을 수 있습니다.

제한 없는 규모 확장

사용량 제한, 동시 작업 제한, 키별 속도 제한이 없습니다. 모든 타겟 언어로 전체 동영상 라이브러리에 자막을 병렬로 생성하세요.
작동 모습 보기

하나의 동영상, 5개 언어 버전

영어, 프랑스어, 독일어, 포르투갈어, 스페인어로 제공되는 동일한 동영상입니다. 각 언어 버전마다 전용 SRT 및 VTT 자막 파일이 함께 제공됩니다.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
작업 흐름

동영상 업로드부터 자막 파일 완성까지 단 3단계

프로젝트를 생성하면 텍스트 변환, 번역, 더빙 작업이 한 번에 진행됩니다. 자막을 수정한 후 /generate 엔드포인트를 사용하세요.
1

동영상 업로드

동영상 파일을 업로드하거나 YouTube, Google Drive, S3, Vimeo 또는 기타 직접 링크를 입력하세요. 한 번만 업로드하면 모든 언어의 자막을 만들 수 있습니다.

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

프로젝트 만들기

미디어 ID를 video_id로 전달하고 프로젝트당 하나의 타겟 언어를 지정하세요. 언어별 프로젝트는 동시에 실행됩니다.

POST /v2/projects
3

자막 파일 다운로드

상태가 merging_done에 도달할 때까지 확인한 후, .srt 및 .vtt 파일을 다운로드하여 저장하세요.

GET /v2/projects/{project_id}
처리 시간은 동영상 길이, 화자 수, 타겟 언어에 따라 다릅니다. 테스트 결과 3분 47초 분량의 동영상이 165초 만에 완료되었습니다.
사용자 맞춤형 서비스

목록에 없는 자막 형식이나 전달 방식이 필요하신가요? 저희 팀에 문의하세요

다른 자막 형식, 자체 스토리지로의 파일 전달, 목록에 없는 언어 또는 대량 처리 등, 저희 팀이 고객의 제작 환경에 필요한 요구사항과 이용 가능한 옵션을 검토해 드립니다.

언어 및 목소리

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

전송 및 연동

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

볼륨 및 처리량

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

보안 및 호스팅

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

자막 API를 사용하는 곳

동영상이 포함된 플랫폼

학습 관리 시스템(LMS) 및 고객 교육 플랫폼, 크리에이터 및 동영상 플랫폼, 웨비나 및 가상 행사 도구, 동영상 호스팅 및 워크플로 SaaS, 디지털 도입 플랫폼, 라이브 커머스 등 모든 언어의 자막을 동영상 업로드 기능으로 활용해 보세요.

현지화 및 제작 대행사

한 번의 업로드로 모든 고객 언어에 맞는 SRT 및 VTT 파일을 제공하세요. 검토자가 API를 통해 텍스트를 수정하면 누구나 다시 타이밍을 맞출 필요 없이 파일이 자동으로 업데이트됩니다.

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

글로벌 유통 및 전자상거래, 글로벌 프랜차이즈, 미디어 언론사, 기업 교육 센터 등. 교육 및 제품 동영상 콘텐츠를 모든 시장과 소리 없이 시청하는 시청자도 쉽게 이용할 수 있도록 만드세요.
고객 사례

실제 팀, 가시적인 성과

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

자막 API 코드 예시

언어별 전체 예시: 동영상 업로드, 자막 언어별 프로젝트 생성, 대기 후 .srt 및 .vtt 파일 저장 또는 HTML5 플레이어 추가.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio, urllib.request
from rask_sdk import clients, enums, schemas

LANGS = ["es-mx", "fr-fr", "ja-jp"]

async def subtitle(client, video_id, lang):
    job = await client.create_project(data=schemas.ProjectCreate(video_id=video_id, dst_lang=lang))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)
    # links are presigned for one hour - save the files right away
    urllib.request.urlretrieve(job.translation_srt_path, f"video.{lang}.srt")
    urllib.request.urlretrieve(job.translation_vtt_path, f"video.{lang}.vtt")

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/onboarding.mp4"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)
    await asyncio.gather(*(subtitle(client, media.id, l) for l in LANGS))

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

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

# translated subtitles: download the files
open("video.de-de.vtt", "wb").write(requests.get(p["translation_vtt_path"]).content)

# original-language captions: build a WebVTT file from the transcript segments
segs = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
cues = [f"{s['start'].replace(',', '.')} --> {s['end'].replace(',', '.')}\n{s['src']['text']}" for s in segs]
open("video.en.vtt", "w").write("WEBVTT\n\n" + "\n\n".join(cues) + "\n")
requests + polling
same-language captions
// no dependencies, Node 18+ global fetch
import { writeFile } from 'node:fs/promises';
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 langs = ['es-mx', 'pt-br', 'ko-kr'];
const tracks = await Promise.all(langs.map(async (dst_lang) => {
  let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang });
  while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
  const file = `subs/${dst_lang}.vtt`;
  await writeFile(file, await ((await fetch(p.translation_vtt_path)).text()));
  return `<track kind="subtitles" srclang="${dst_lang}" src="/${file}">`;
}));
console.log(tracks.join('\n'));   // paste inside your <video> element
fetch, Node 18+
HTML5 track elements
# 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. create the project for one subtitle language
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\": \"it-it\"}" | jq -r .id)

# 3. wait for merging_done
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
  sleep 10
done

# 4. save both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o video.it-it.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o video.it-it.vtt "$(echo $P | jq -r .translation_vtt_path)"
download .srt and .vtt
shell script
<?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']];

foreach (['es-mx', 'tr-tr'] as $lang) {
    $p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
        'video_id' => $videoId, 'dst_lang' => $lang]]));
    while ($p['status'] !== 'merging_done') {
        sleep(10);
        $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
    }
    // presigned links, valid for one hour
    file_put_contents("video.$lang.srt", file_get_contents($p['translation_srt_path']));
    file_put_contents("video.$lang.vtt", file_get_contents($p['translation_vtt_path']));
}
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 사용자에게 직접 보여주기에 충분히 명확합니다.
Observed run, 3:47 source video, en → es-mx
GET /v2/projects/{project_id}
   0s  created
  11s  transcription_started
  87s  translation_started
  99s  voiceover_started
 154s  merging_started
 165s  merging_done

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

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

자막 파일 우선, 그 외 항목도 함께 제공

완료된 모든 프로젝트에서는 두 가지 자막 형식, 대본 세그먼트, 더빙된 미디어를 모두 제공합니다. 다운로드 링크는 1시간 동안만 유효하므로 파일을 자체 스토리지에 복사해 두세요.
필드
형식
설명
translation_srt_path
.srt
편집 프로그램 및 대부분의 동영상 플랫폼에서 사용할 수 있는 타겟 언어 자막
translation_vtt_path
.vtt
HTML5 동영상 재생 및 웹 플레이어를 위한 WebVTT 자막
/transcription
JSON
모든 세그먼트에 대한 원본 텍스트, 번역, 화자 표시 및 타임스탬프
translated_video
MP4
목소리 더빙 버전을 게시하는 경우, 더빙된 동영상도 함께 제공됩니다.
translated_audio
WAV
원래의 음악 및 음향 효과와 자연스럽게 어우러지는 번역된 음성
original_video
MP4
참고용으로 저장된 원본 파일
제어

자막 한 줄을 수정하고 해당 부분만 다시 생성하세요.

자막은 대본 조각에서 생성됩니다. 텍스트나 한 줄의 타이밍을 수정하고 다시 생성하면 자막 파일과 더빙 버전이 함께 업데이트됩니다. 비용은 변경된 조각을 기준으로 청구되며, 실행당 최소 1분이 적용됩니다.

문장 단위 편집

문장 단위 편집
모든 프로젝트는 대본을 개별 조각으로 제공하므로, 틀린 단어나 늦게 나오는 자막은 간단한 수정 요청 한 번으로 해결할 수 있습니다.
대본과 문장 가져오기
원본 텍스트를 수정하면 AI가 다시 번역합니다
번역된 텍스트를 직접 수정하여 원하는 표현을 유지하세요
타임스탬프 조정, 문장 추가 및 삭제
화자에게 지정된 목소리 변경하기

전문 용어 사전

전문 용어 사전
용어집과 브랜드 이름을 추가하면 모든 언어의 자막에서 전문 용어가 일관되게 번역되며, 필요에 따라 원래 언어 그대로 유지할 수도 있습니다.

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

지원하는 파일 형식

지원되는 동영상이나 오디오 파일을 업로드하거나 지원되는 미디어 URL을 사용하세요. 각 타겟 언어별로 프로젝트를 만들고 SRT 및 WebVTT 파일을 다운로드하세요.

동영상

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 비교

다른 언어로 된 자막을 만들려면 전사, 번역, 타이밍 조절, 파일 내보내기가 필요합니다. 두 가지 방식으로 동일한 결과를 만들어내는 과정을 확인해 보세요.
필요한 항목
Rask API
개별 부품 조합 방식
타임스탬프가 포함된 전사
포함됨
음성 텍스트 변환 API
다른 언어로 제공되는 자막
135개 이상의 언어 및 지역 옵션
번역 API 및 타이밍 재조정
SRT 및 WebVTT 내보내기
모든 프로젝트에서 두 형식 모두 제공
자체 파일 작성기
일관된 용어 사용
용어집
맞춤형 후반 작업
한 줄 수정하기
수정 요청 후 다시 생성
모든 파일을 수동으로 편집
동일한 동영상의 더빙 버전
동일한 프로젝트에 포함
TTS 서비스와 자체 믹싱 조합
이용 제한
없음
사용하는 제공업체에 따라 다름
동영상에 고정된 자막
Rask 웹 앱에서 가능하며, 아직 API에서는 지원되지 않습니다
나만의 동영상 렌더링
글꼴, 크기 및 배치
동영상 플레이어에서 설정
동영상 플레이어에서 설정
자주 묻는 질문

자막 API: 자주 묻는 질문

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

Rask에 자막 API가 있나요?

API에서 제공하는 자막 형식은 무엇인가요?

원래 언어로 된 자막을 받을 수 있나요?

어떤 언어를 지원하나요?

API를 통해 동영상에 자막을 직접 입힐(burn-in) 수 있나요?

자막의 글꼴, 크기, 배치를 변경할 수 있나요?

자막에 음악과 음향 효과도 설명되나요?

화자가 구분되나요?

자막 한 줄을 어떻게 수정하나요?

다운로드 링크의 유효 기간은 얼마나 되나요?

제가 직접 만든 자막을 사용할 수 있나요?

자막 API는 어떻게 과금되나요?

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

반나절만에 더빙 시작하기

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