라이브러리의 모든 동영상을 위한 동영상 텍스트 변환 API

동영상 파일이나 YouTube, Google Drive, Vimeo 링크를 보내면 화자 표시와 타임스탬프가 포함된 검색 가능한 텍스트를 75개 언어로 받아볼 수 있습니다. 자동 언어 감지 기능도 제공됩니다. 하나의 동영상이나 전체 라이브러리를 텍스트로 변환한 다음, 텍스트와 자막을 번역하여 전 세계 시청자에게 다가가세요.
파일 및 동영상 링크
대량 텍스트 변환
REST + Python SDK
link in, transcript out
OAuth 2.0
# 1. send the video as a link - YouTube, Google Drive, Vimeo, S3 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://youtu.be/...", "name": "camera review"}'

# 2. create the project - the language of the video is detected automatically
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\"}"
GET /v2/projects/{project_id}/transcription
plain text
# The transcript as plain text with timestamps and speakers
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'
전 세계 팀들이 사용하는
주요 기능

동영상 텍스트 변환 API의 기능

동영상 파일이나 링크를 보내면 라이브러리에 있는 모든 동영상에 대해 화자와 타임스탬프가 포함된 텍스트를 얻을 수 있습니다. 동일한 프로젝트를 통해 각 텍스트를 번역, 자막, 더빙 버전으로 변환할 수 있습니다.

파일이나 링크에서 동영상 텍스트 변환하기

동영상 파일을 업로드하거나 YouTube, Google Drive, Vimeo, S3 또는 다이렉트 링크를 게시하세요. API가 직접 동영상을 가져오므로 별도로 다운로드할 필요가 없습니다.

여러 화자 구분 및 표시

여러 화자가 등장하는 인터뷰, 패널 토론, 웨비나는 모든 세그먼트에 화자 표시가 포함되어 반환되므로 누가 어떤 말을 했는지 항상 쉽게 파악할 수 있습니다.

자동 언어 감지

영어를 포함해 75개 원본 언어로 동영상을 텍스트로 변환하세요. 원본 언어를 비워두면 각 동영상의 언어가 자동으로 감지됩니다.

검색 가능한 텍스트

모든 세그먼트에 시작 시간과 종료 시간이 포함되어 있어 사용자가 동영상의 텍스트 내용을 검색하고 특정 문구가 나오는 순간으로 바로 이동할 수 있습니다.

다양한 언어의 텍스트 제공

각 세그먼트에는 135개 이상의 언어 및 지역 옵션 중 원하는 번역도 함께 제공되므로, 하나의 텍스트로 전 세계 다양한 언어의 시청자들을 만족시킬 수 있습니다.

.srt 및 .vtt 형식의 자막

또한 각 프로젝트는 청각 장애가 있는 시청자나 소리를 끄고 시청하는 시청자를 위해 세그먼트에 맞춰진 타임스탬프가 포함된 타겟 언어 자막 파일을 제공합니다.

일반 텍스트 또는 구조화된 데이터

JSON 세그먼트로 텍스트를 읽거나, 검색 색인, 기사, 프로그램 설명 및 메모에 사용할 수 있도록 텍스트를 일반 텍스트로 결합할 수 있습니다.

전문 용어 수정

API를 통해 모든 세그먼트의 이름, 제품 용어, 전문 용어를 수정하세요. 용어집을 사용하면 텍스트가 번역될 때도 동일한 용어가 일관되게 유지됩니다.

제한 없는 규모 확장

속도 제한, 동시성 할당량, 키별 제한이 없습니다. 여러 동영상 또는 전체 라이브러리에 걸쳐 대량 텍스트 변환을 병렬로 실행하세요.
작동 모습 보기

하나의 대본을 5개 언어 버전으로

이 영상 클립의 대본은 영어, 프랑스어, 독일어, 포르투갈어, 스페인어 버전으로 각각 자막과 원본 배경 오디오가 포함되어 생성되었습니다.
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
작업 흐름

영상 링크에서 대본까지의 3단계 요청

프로젝트를 생성하면 대본 작성, 번역, 자막 생성 및 더빙 버전 제작이 한 번에 진행됩니다. 대본을 수정한 후 /generate 엔드포인트를 사용하세요.
1

영상 보내기

멀티파트 폼 데이터로 동영상 파일을 업로드하거나 YouTube, Google Drive, Vimeo, S3 또는 직접 링크를 게시하세요. 비용이 청구되기 전에 미디어 ID와 동영상 메타데이터를 먼저 확인할 수 있습니다.

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

프로젝트 만들기

미디어 ID를 video_id로 전달하고 타겟 언어를 지정하세요. 언어가 자동으로 감지되도록 하려면 원본 언어 항목을 비워 두세요. 즉시 대본 작성이 시작됩니다. video_id

POST /v2/projects
3

텍스트 확인하기

대본 조각이 준비되는 즉시 읽어올 수 있으므로, 번역된 미디어가 계속 처리되는 동안 녹화물 색인 작업을 먼저 시작할 수 있습니다. 프로젝트가 완료되면 자막 및 미디어 파일을 다운로드하세요.

GET /v2/projects/{id}/transcription
대본 작성 기능은 실시간 스트리밍이 아닌 녹화된 영상에서 작동합니다. 처리 시간은 영상 길이와 화자 수에 따라 다르며, 한 테스트에서는 3분 47초짜리 영상이 165초 만에 완료되었습니다.
사용자 맞춤형 서비스

목록에 없는 대량의 작업이나 다른 언어로 대본을 작성해야 하시나요? 저희 팀에 문의해 주세요.

대용량 대본 작업, 목록에 없는 원본 언어, 검색 색인에 필요한 대본 형식, 또는 자체 저장소로의 전달까지, 저희 팀이 고객님의 요구사항과 사용 가능한 옵션을 검토해 드립니다.

언어 및 목소리

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

전송 및 연동

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

볼륨 및 처리량

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

보안 및 호스팅

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

동영상 대본 API를 사용하는 사람들

동영상이 포함된 플랫폼

LMS 및 고객 교육 플랫폼, 크리에이터 및 영상 플랫폼, 웨비나 및 가상 이벤트 도구, 영상 호스팅 및 워크플로 SaaS, 디지털 도입 플랫폼, 라이브 커머스. 제품의 기능으로 영상 업로드에 검색 가능한 대본과 자막을 추가해 보세요.

현지화 및 제작 대행사

고객 영상을 대량으로 텍스트로 변환하고, 검토자에게 화자 라벨이 포함된 대본을 제공하며, 동일한 프로젝트에서 자막과 번역본을 받아보세요.

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

글로벌 유통 및 전자상거래, 글로벌 프랜차이즈, 미디어 출판사, 사내 대학, 콘텐츠 크리에이터. 모든 영상을 검색 및 이용 가능하게 만들고, 대본을 기사나 설명에 재활용해 보세요.
고객 사례

실제 팀, 가시적인 성과

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

동영상 대본 API 코드 예시

언어별 완성된 예시: 링크나 파일로 영상 전송하기, 대기하기, 일반 텍스트 대본 저장 또는 타임스탬프별 검색하기.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

VIDEOS = ["https://youtu.be/aaa", "https://youtu.be/bbb", "https://vimeo.com/123"]

async def transcribe(client, i, link):
    media = await client.create_media_link(data=schemas.MediaCreateLink(link=link))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)
    job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="en-us"))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)
    t = await client.get_project_transcription(project_id=job.id)
    with open(f"video_{i}.txt", "w") as f:   # plain text, one segment per line
        f.write("\n".join(f"{s.speaker}: {s.src.text}" for s in t.segments))

async def main():
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
    await asyncio.gather(*(transcribe(client, i, v) for i, v in enumerate(VIDEOS)))   # no rate limits

asyncio.run(main())
github.com/braskai/rask-sdk
bulk, async
import os, 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}"}

media = requests.post(f"{API}/api/library/v1/media/link", headers=h,
                      json={"link": "https://youtu.be/..."}).json()

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

while project["status"] != "merging_done":
    time.sleep(10)
    project = requests.get(f"{API}/v2/projects/{project['id']}", headers=h).json()

print(project["translated_video"])
requests
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://drive.google.com/file/d/...' });
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, dst_lang: 'fr-fr' });
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`);
const index = segments.map((s) => ({ t: s.start, speaker: s.speaker, text: s.src.text, fr: s.dst.text }));
console.log(JSON.stringify(index, null, 2));   // ready for your search index
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 video file
VIDEO_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=video" \
  -H "Authorization: Bearer $TOKEN" -F "[email protected]" | 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\": \"$VIDEO_ID\", \"dst_lang\": \"de-de\", \"num_speakers\": 3}" | jq -r .id)

# 4. when status is merging_done, save the transcript as plain text
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq -r '.segments[].src.text' > webinar.txt
local video file
multipart upload
<?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://vimeo.com/123456']]));
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' => 'pt-br']]));
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]));
file_put_contents('video.txt', implode("\n", array_map(fn($s) => $s['src']['text'], $t['segments'])));
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 and forbidden_link are specific enough to show directly to your own user, for example a video without speech.
Plain text transcript, two speakers
jq -r on /transcription
00:00:00,320  SPEAKER_00  Welcome back. Today we test three cameras in low light.
00:00:06,180  SPEAKER_01  I brought the footage from last week's night shoot.
00:00:10,940  SPEAKER_00  Let's start with the smallest sensor, the hardest case.
00:00:15,500  SPEAKER_01  At ISO 6400 the noise is visible, but the colors hold up.

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

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

모든 영상에서 제공되는 기능

완료된 각 프로젝트는 JSON 조각 형태의 대본, 타겟 언어로 된 SRT 및 VTT 형식의 자막 파일, 그리고 번역된 영상과 오디오를 제공합니다. 다운로드 링크는 사전 서명되어 1시간 동안 유효합니다.
필드
형식
설명
/transcription
JSON
모든 세그먼트의 화자 레이블, 타임스탬프, 원본 텍스트 및 번역
translation_srt_path
.srt
세그먼트 시간에 맞춰진 타겟 언어 자막
translation_vtt_path
.vtt
웹 플레이어용 WebVTT 형식의 동일한 자막
translated_video
MP4
음성 더빙이 포함된 번역된 동영상
translated_audio
WAV
번역된 음성과 원래 배경 오디오가 섞인 파일
original_video
MP4
참고용으로 저장된 원본 동영상
제어

대본의 이름과 전문 용어 수정하기

자동 자막 생성 기능으로 동영상의 대부분을 처리할 수 있지만, 이름이나 억양, 전문 용어는 사람이 직접 확인해야 할 때가 있습니다. 요청 한 번으로 특정 구간의 텍스트, 타이밍, 화자를 수정한 다음 번역된 버전을 다시 생성해 보세요. 변경된 구간을 기준으로 요금은 1분 단위로 최소 부과됩니다.

문장 단위 편집

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

전문 용어 사전

전문 용어 사전
용어집을 추가하면 번역된 대본 전체에서 제품 이름과 전문 용어가 항상 일관되게 유지되며, 필요에 따라 원문 그대로 유지할 수도 있습니다.

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

지원하는 파일 형식

7가지 형식의 동영상 파일과 4가지 형식의 오디오 녹음 파일을 변환하거나, 유튜브, 구글 드라이브, 비메오 같은 주요 플랫폼의 링크를 보낼 수 있습니다. 지원되지 않는 파일은 이용 시간이 차감되기 전에 거부됩니다.

동영상

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 AI와 여러 도구를 조합한 자막 생성 방식의 차이점

동영상 대본 하나로 작업이 끝나는 경우는 드뭅니다. 팀에서는 화자 표시, 자막, 다양한 언어 번역도 필요로 합니다. 동일한 작업을 두 가지 방식으로 처리하는 과정은 다음과 같습니다.
필요한 항목
Rask API
개별 부품 조합 방식
유튜브, 드라이브, 비메오 또는 S3의 동영상 링크
직접 지원
먼저 다운로드 후 변환
여러 화자 구분을 위한 화자 표시
포함됨
화자 분리 추가 기능 또는 수동 태깅
각 동영상의 언어
자동 감지
파일별 설정 또는 개별 감지
다른 언어로 된 대본
135개 이상의 언어 및 지역 옵션
언어별 번역 API
.srt 및 .vtt 형식의 자막
포함됨
자막 도구 또는 자체 파일 작성기
전문 용어 수정
구간별 수정 요청 한 번
모든 도구에서 복사본 편집
더빙된 동영상 버전
동일한 프로젝트에 포함
TTS 서비스와 자체 믹싱 조합
이용 제한
없음
각 공급사의 정책에 따름
실시간 회의를 위한 실시간 자막
스트리밍 음성 텍스트 변환 API 사용
일부 제공업체에 내장되어 있습니다.
아직 지원하는 곳이 없는 언어
당사가 직접 구축합니다
지원되지 않음
자주 묻는 질문

동영상 자막 생성 API: 자주 묻는 질문

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

Rask에 동영상 자막 생성 API가 있나요?

YouTube 동영상이나 동영상 링크로도 자막을 만들 수 있나요?

여러 동영상의 자막을 한 번에 만들 수 있나요?

화자가 여러 명일 때는 어떻게 처리하나요?

어떤 언어를 지원하나요?

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

일반 텍스트 형식으로 자막을 받을 수 있나요?

AI 요약, 주요 주제 추출, 감성 분석 기능도 제공되나요?

회의 녹화 파일의 자막도 만들 수 있나요?

파일 크기 제한이 있나요?

동영상 자막 작성 비용은 어떻게 청구되나요?

무료 플랜이 있나요?

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

반나절만에 더빙 시작하기

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