Rask AI API用于视频配音、翻译和转写

一个 API 搞定整个视频本土化工作流:转写语音、翻译、使用 AI 声音或语音克隆配音、添加口型同步并下载字幕。只需上传一次,为每个目标语言创建一个项目,即可收集视频、音轨、字幕和转写文本。
声音克隆
口型同步和字幕
REST + Python SDK
three requests, start to finish
OAuth 2.0
# 1. exchange your client id and secret for a token (valid 1 hour)
curl -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
  -u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials"

# 2. upload the video - file, or a YouTube, Drive, S3, Vimeo or direct 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://youtu.be/...", "name": "Q3 launch"}'

# 3. create the project - transcription, translation and dubbing start
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}
polling, 10s
# Poll until merging_done, then collect the files
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{status, translated_video, voiceover, translation_srt_path}'
被全球团队广泛使用
功能特性

Rask AI API 的所有功能

一个 API 即可覆盖整个视频工作流。各项功能都在同一个项目、同一个身份验证和同一按分钟计费体系下运行,且每个功能都有包含详细信息和代码的独立页面。

AI 配音

在同一个项目中实现转写、翻译、配音和混音。发送视频和目标区域设置,即可获取配音后的视频。

视频翻译

只需上传一次,即可将视频翻译成 135 种以上的语言和地区选项,每种语言的翻译文本均可供随时审阅。

声音克隆

在支持语音克隆的语言中,通过“即时语音克隆”保留每位说话者自己的声音,或复用已保存的“自定义语音克隆”。

对口型

在完成人脸检测后,作为配音项目的独立任务将口型动作与配音对齐。按每个完整视频的生成单独计费。

语音转文字和视频转写

支持 75 种源语言、带有说话者标签和片段时间戳的转写文本,并具备自动语言检测功能。

.srt和.vtt格式字幕

每个完成的项目都包含目标语言的这两种格式,可用于您的播放器、应用程序或剪辑软件。

视频本土化

提供地区语言选项、品牌术语词汇表和已批准的翻译,确保每个市场都能获得专属版本。

视频文字转语音

发送带有时间戳的自定义文案,即可获取与画面精准对齐的 AI 声音或语音克隆配音。

无限扩展

无速率限制、无并发配额、无单密钥节流。支持并行处理您的整个视频库和所有目标语言。
查看实际效果

Rask AI API 的返回内容

一个源剪辑,通过 API 配音为英语、法语、德语、葡萄牙语和西班牙语,采用说话者的克隆声音并保留原始背景音频。
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
工作流程

从上传到完成视频只需三个请求

每个 Rask AI API 工作流都遵循相同的模式,创建项目即会启动完整运行。编辑转写文本或声音后,可以使用 /generate 端点重新生成。
1

上传视频

以多部分表单数据(multipart form data)形式发送视频或音频文件,或者发布来自 YouTube、Google Drive、S3、Vimeo 或任何直接 URL 的链接。在您产生任何消费之前,即可获取媒体 ID 和文件元数据。

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

创建项目

将媒体ID作为 video_id 传入并指定目标语言。也可以选择附带您自己的文稿或术语表。处理过程将立即开始。

POST /v2/projects
3

获取输出

持续读取状态,直到显示 merging_done,然后下载配音视频、音轨、字幕文件和文稿。

GET /v2/projects/{project_id}
处理时间取决于视频长度、说话人数和目标语言。在一次实际测试中,一段 3:47 的视频在 165 秒内完成了配音。
以您为中心

需要目录之外的服务?请与我们的团队联系。

如果公共目录中尚未涵盖某种语言、声音、交付方式或处理能力,我们的团队将与您一起评估您的需求和可用选项。

语言和声音

需要公开目录之外的语言或声音?请将您的需求和可用选项告诉我们的团队。

交付与集成

网络钩子(Webhooks)、推送到您自己的队列、直接交付到您的S3、自定义端点。告诉我们您的流水线需要什么样的数据输入方式。

数据量与吞吐量

批量大小、每次操作的目标语言以及处理优先级都是合同条款,而不是固定的产品限制。

安全与托管

数据驻留、单点登录与SAML、保留规则以及安全审查支持均作为企业版入驻流程的一部分来处理。
用例

使用 Rask AI API 开发的用户

内置视频的平台

学习管理系统(LMS)和客户培训平台、创作者与视频平台、网络研讨会与虚拟活动工具、视频托管与工作流 SaaS、数字采用平台以及直播购物。将其他语言的配音、字幕和文稿作为您自身产品的功能提供给用户。

本地化和制作机构

将 Rask 连接到您现有的交付流程中:为客户视频提供配音、声音克隆、字幕和唇形同步,并让您的审核人员在交付前编辑文稿。

内部持续视频制作

国际零售与电子商务、全球特许经营、媒体出版商以及企业大学。通过单一集成,为每个市场本土化培训、产品和营销视频。
客户案例

真正的团队,可衡量的成果

用具体数据看看各大公司如何使用Rask进行视频本地化。
箭头
箭头
代码

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 main():
    # the client exchanges your credentials for tokens and refreshes them
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)

    media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://youtu.be/..."))
    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="es-mx"))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)

    print(job.translated_video, job.translation_srt_path, job.translation_vtt_path)

asyncio.run(main())
github.com/braskai/rask-sdk
Python 3.8+, async
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("launch.mp4", "rb") as f:
    media = requests.post(f"{API}/api/library/v1/media", headers=h,
                          params={"kind": "video"}, 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": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
    time.sleep(10)

for field in ("translated_video", "translated_audio", "translation_srt_path"):
    print(field, p[field])   # presigned links, valid for one hour
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://youtu.be/...' });
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: 'ja-jp' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }

const { translated_video, voiceover, translation_vtt_path } = p;
console.log({ translated_video, voiceover, translation_vtt_path });
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 by link
VIDEO_ID=$(curl -s -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/..."}' | 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\": \"pt-br\"}" | jq -r .id)

# 4. wait for merging_done, then read the links
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
  sleep 10
done
curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" \
  | jq '{translated_video, translated_audio, translation_srt_path}'
shell script
token to download
<?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://youtu.be/...']]));
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' => 'fr-fr']]));
while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}
echo $p['translated_video'], PHP_EOL, $p['translation_srt_path'], PHP_EOL;
Guzzle 7
plain HTTP
Python是官方SDK。Node、PHP和cURL选项卡展示了针对相同端点的普通HTTP示例。
进度

Rask AI API 项目如何报告进度

无论您将项目用于何种目的,每个项目都会经历相同的记录状态。您可以向用户展示分阶段的进度条,并仅对三组状态进行处理。

成功,在此停止

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

或者完全跳过轮询

将地址指向一个Webhook端点,每个状态转换都会以POST请求的形式发送,这样您的队列就能在变化发生的瞬间做出响应。Webhook交付是企业入驻服务的一部分。
阅读文档
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
输出结果

从一个项目中获取视频、音频、字幕和文稿

已完成的项目提供配音视频、两个音轨、两个字幕文件和文稿。在符合条件的套餐中,翻译后的语音将以 WAV 格式独立提供,并与带有原始背景音的完整混音并列。
字段
格式
说明
translated_video
MP4
配音视频,可直接发布
voiceover
WAV
仅翻译语音(适用于符合条件的套餐,用于您自己的混音)
translated_audio
WAV
翻译后的语音与原始背景音频混合的效果
translation_srt_path
.srt
目标语言字幕
translation_vtt_path
.vtt
采用 WebVTT 格式的相同字幕,适用于网页播放器
/transcription
JSON
按片段划分的源文本、翻译、说话人标签和时间戳
控制

编辑文稿,仅重新生成修改的部分

自动化完成大部分工作,您的团队拥有最终决定权。只需纠正一行文字、一个时间戳或一种声音,然后重新生成,并按修改的片段付费(每次运行最低计费一分钟)。

片段级编辑

片段级编辑
每个项目都将其文稿公开为可寻址的片段,因此修改只需发送一个补丁请求,而无需创建新项目。
获取文稿及其片段
修改源文本,我们将为您重新翻译
直接修改翻译后的文本以保留您自己的用语
调整时间戳、添加片段、删除片段
重新分配与任意发言人关联的语音

术语词汇表

术语词汇表
附加术语表后,品牌名称、产品名称和技术术语在每个项目中都能以相同方式翻译,或者刻意保留原语言。

一个词汇表涵盖一对语言,并适用于该目标语言的所有地区变体,因此一个西班牙语词汇表即可服务于 es-mx 和 es-es 类似内容。项目记录 glossary_version,因此后续的修改绝不会悄悄改变已完成的工作。
输入

支持的文件格式

支持七种视频和四种音频格式,以及来自 YouTube、Google Drive、S3、Vimeo 和直接 URL 的链接。不受支持的文件在扣除任何时长之前就会被拒绝。

视频

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 个月轮换一次

您的内容

封闭式人工智能环境
绝不用于训练通用模型
支持完整导出,没有绑定限制

访问

SSO 和 SAML
基于角色的访问控制
OAuth 2.0 客户端凭证

企业

数据本地化选项
自定义服务等级协议 (SLA)
专属客户经理

声音权益

具有使用权益的合成声音
基于授权的声音克隆
人工智能安全控制,人工参与
对比

Rask AI API 与由多个供应商拼凑的工作流对比

转写、翻译、声音、唇形同步和字幕通常来自不同的供应商。这里展示的是同一种视频工作流的两种不同搭建方式。
您所需的功能
Rask API
拼凑而成的方案
带说话人标签的转写
包含
语音转文字 API
翻译成 135 种以上的语言和地区选项
包含
翻译 API
AI声音与语音克隆
包含
文本转语音供应商和声音克隆供应商
新语音下方的背景音频
自动混音
音源分离加上你自己的混音
对口型
同一项目中的独立任务
唇形同步供应商
.srt和.vtt格式字幕
包含
您自己的文件编写器
修改一行内容
重新生成修改后的片段
重新为文件运行工作流
术语控制
术语表
自定义后处理
计费
按视频分钟数计费,使用单一资源池
不同供应商按字符数、小时数和请求次数分别计费
频率限制
无
具体取决于各服务商的规定
请填写此表单,Rask AI 团队将尽快与您联系!
常见问题解答

Rask AI API:常见问题

找不到您要找的内容?请联系销售部门。

什么是 Rask AI API?

Rask AI API 包含哪些 API?

如何获取 Rask AI API 的访问权限?

身份验证是如何工作的?

有 SDK 吗?

API 支持哪些语言?

Rask AI API 是如何收费的?

是否有速率限制?

API 是否支持 Webhook?

我可以上传哪些文件格式?

我可以使用自己的字幕或翻译吗?

API 是实时的吗?

Rask AI API 安全吗?

在一个下午内开始配音

今天就发出您的第一个请求,如果您需要大容量优惠条款或是罕见语种,随时与我们联系。