# 1. import the video - a YouTube, Google Drive or Vimeo link
JOB=$(curl -s -X POST https://api.rask.ai/v3/media/import \
-H "Authorization: Bearer $RASK_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"url": "https://youtu.be/..."}' | jq -r .id)
MEDIA=$(curl -s "https://api.rask.ai/v3/jobs/$JOB?wait_seconds=20" \
-H "Authorization: Bearer $RASK_API_KEY" | jq -r .result.media_id)
# 2. check the price - free, and nothing is charged
CAP=$(curl -s -X POST https://api.rask.ai/v3/projects/estimate \
-H "Authorization: Bearer $RASK_API_KEY" -H "Content-Type: application/json" \
-d "{\"media_id\":\"$MEDIA\",\"target_language\":\"es-mx\"}" | jq -r .total_minutes)
# 3. create the project - dubbing starts, and costs no more than $CAP
curl -X POST https://api.rask.ai/v3/projects \
-H "Authorization: Bearer $RASK_API_KEY" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d "{\"media_id\":\"$MEDIA\",\"target_language\":\"es-mx\",\"expected_cost_minutes\":$CAP}"# One request waits for the next change in the job
curl -s "https://api.rask.ai/v3/jobs/$JOB_ID?wait_seconds=20" \
-H "Authorization: Bearer $RASK_API_KEY" \
| jq '{status, stage, progress, expected_remaining_seconds}'通过 YouTube、Google Drive 或 Vimeo 链接导入文件,或使用预签名 URL 直接上传至存储。在产生任何费用之前,您将收到媒体 ID 和技术元数据。
传入媒体 ID 和目标语言,并将您接受的价格设为 expected_cost_minutes。处理将立即开始,项目会以此数值作为费用上限。
等待任务完成,然后查看项目输出:配音视频、音频轨道、字幕文件和转写文稿,每个文件都带有下载链接。
# pip install rask-sdk
from rask_sdk import Rask
rask = Rask() # reads RASK_API_KEY
# one call uploads the file and answers with the import job
import_job = rask.uploads.upload_file("launch.mp4")
media_id = rask.jobs.wait(import_job.id).result.media_id
# the price you accept becomes the ceiling of the work
estimate = rask.projects.estimate_project(media_id=media_id, target_language="es-mx")
print(f"The dub costs {estimate.total_minutes} minutes")
created = rask.projects.create_project(
media_id=media_id,
target_language="es-mx",
expected_cost_minutes=estimate.total_minutes,
)
processed = rask.jobs.wait(created.id)
rask.jobs.wait(processed.result.auto_dub.dub_job_id)
outputs = rask.exports.list_project_outputs(processed.result.project_id).data
print(next(o.url for o in outputs if o.kind == "dubbed_video"))// npm install @braskai/api
import { Rask } from '@braskai/api';
const rask = new Rask(); // reads RASK_API_KEY
const { data: importJob } = await rask.uploads.uploadFile('launch.mp4');
const { data: imported } = await rask.jobs.wait(importJob.id);
const order = { media_id: imported.result.media_id, target_language: 'es-mx' };
const { data: estimate } = await rask.projects.estimateProject({ body: order });
console.log(`The dub costs ${estimate.total_minutes} minutes`);
const { data: created } = await rask.projects.createProject({
body: { ...order, expected_cost_minutes: estimate.total_minutes },
});
const { data: processed } = await rask.jobs.wait(created.id);
await rask.jobs.wait(processed.result.auto_dub.dub_job_id);
const { data: outputs } = await rask.exports.listProjectOutputs(processed.result.project_id);
console.log(outputs.data.find((o) => o.kind === 'dubbed_video')?.url);import os, httpx
API = "https://api.rask.ai/v3"
h = {"Authorization": f"Bearer {os.environ['RASK_API_KEY']}"}
c = httpx.Client(base_url=API, headers=h, timeout=30)
job = c.post("/media/import", json={"url": "https://youtu.be/..."},
headers={"Idempotency-Key": os.urandom(16).hex()}).json()
media = c.get(f"/jobs/{job['id']}", params={"wait_seconds": 20}).json()["result"]["media_id"]
order = {"media_id": media, "target_language": "es-mx"}
cap = c.post("/projects/estimate", json=order).json()["total_minutes"]
created = c.post("/projects", json={**order, "expected_cost_minutes": cap},
headers={"Idempotency-Key": os.urandom(16).hex()}).json()
outputs = c.get(f"/projects/{created['project_id']}/outputs").json()["data"]
print(next(o["url"] for o in outputs if o["kind"] == "dubbed_video"))API=https://api.rask.ai/v3
AUTH="Authorization: Bearer $RASK_API_KEY"
JOB=$(curl -s -X POST $API/media/import -H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" -d '{"url":"https://youtu.be/..."}' | jq -r .id)
MEDIA=$(curl -s "$API/jobs/$JOB?wait_seconds=20" -H "$AUTH" | jq -r .result.media_id)
ORDER="{\"media_id\":\"$MEDIA\",\"target_language\":\"es-mx\"}"
CAP=$(curl -s -X POST $API/projects/estimate -H "$AUTH" -H "Content-Type: application/json" \
-d "$ORDER" | jq -r .total_minutes)
PROJECT=$(curl -s -X POST $API/projects -H "$AUTH" -H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d "$(jq -c --argjson cap "$CAP" '. + {expected_cost_minutes:$cap}' <<<"$ORDER")" | jq -r .project_id)
curl -s $API/projects/$PROJECT/outputs -H "$AUTH" \
| jq -r '.data[] | select(.available) | "\(.kind)\t\(.url)"'<?php
// composer require "braskai/rask-sdk:^3.0@alpha"
use Rask\Rask;
$rask = new Rask(); // reads RASK_API_KEY
$importJob = $rask->uploads->uploadFile('launch.mp4');
$mediaId = $rask->jobs->wait($importJob->id)->result->mediaId;
$estimate = $rask->projects->estimateProject(
mediaId: $mediaId, targetLanguage: 'es-mx'
);
echo "The dub costs {$estimate->totalMinutes} minutes\n";
$created = $rask->projects->createProject(
mediaId: $mediaId, targetLanguage: 'es-mx',
expectedCostMinutes: $estimate->totalMinutes
);
$processed = $rask->jobs->wait($created->id);
foreach ($rask->exports->listProjectOutputs($processed->result->projectId)->data as $o) {
if ($o->kind === 'dubbed_video') { echo $o->url, "\n"; }
}# the request stays open until the job changes, then returns at once
{
"status": "running",
"stage": "translation",
"progress": 46,
"expected_remaining_seconds": 78
}
# ask again; the next answer is the finished job
{
"status": "succeeded",
"result": { "project_id": "c7d2a9e4-3b1f-4a6c-8d5e-9f0b2e7c1a63" },
"links": { "outputs": "/v3/projects/c7d2a9e4.../outputs" }
}

es-mx 和 es-es 类似项目。项目记录 glossary_version,因此后续的修改绝不会悄悄改变已完成的工作。Rask AI API是一个用于视频本地化的REST API。它可以转写视频中的语音、进行翻译、使用人工智能声音或语音克隆进行配音、添加可选的唇形同步功能,并返回字幕、音轨和文字记录,所有操作都在一个项目中完成。
人工智能配音、视频翻译、视频本地化、语音克隆、唇形同步、视频文本转语音、语音转文本、视频转写和字幕。它们共用一个身份验证、一个项目对象和一个时长额度池,并且每个功能都有包含详细信息和代码的专属页面。
API权限适用于创作者专业版、商业版和企业版套餐,具体功能由您的套餐决定。您可以在应用中生成客户端ID和密钥,然后立即开始调用。企业条款、大宗优惠价格以及自定义语言覆盖范围请联系我们的团队咨询。
API v3 仅需一个 API 密钥。在网页应用中创建它,选择其权限和每月消费限额,并在每个请求中将其作为 Bearer 令牌发送。无需获取或刷新令牌。
是的。我们提供适用于 TypeScript、Python、Go、Java 和 PHP 的官方 SDK,可从 npm、PyPI、Go、Maven Central 和 Packagist 安装。REST API 支持任何编程语言,本页面提供完整的示例。
源音频支持75种语言并具备自动语言检测功能,目标语言提供135种以上的语言及地区选项(例如es-mx或pt-br)。语音克隆适用于支持该功能的语言;其余则由人工智能声音预设来覆盖。
使用量按视频分钟数计费,向上取整至整分钟,并与Rask应用共享时长额度池。在符合条件的标准套餐中,额外分钟数的费用为3美元/分钟,企业版定价则根据您的协议定制。重新生成按修改后的片段计费,每次运行最低一分钟,唇形同步则按每个完整视频的生成单独计费。
API v3 用单一 API 密钥取代了 OAuth,在每次付费操作运行前对价格进行评估,并将耗时较长的任务报告为可等待的作业。它新增了语音克隆、屏幕文本翻译、文稿版本、项目副本和导出功能,并将支持的操作从 v2 的 23 个增加到了 82 个。API v2 将继续正常运行。
Wait on the job with GET /v3/jobs/{job_id}: the request stays open until the status changes, so you can show real progress without a polling loop.
视频格式为 MP4、MOV、MKV、AVI、WebM、M4V 和 3GP,音频格式为 MP3、WAV、FLAC 和 M4A,也可以使用来自 YouTube、Google Drive、S3、Vimeo 的链接或直接网址。
可以。上传源文件和翻译好的 SRT 文件,或者发送文本片段,并在创建项目时提供 transcript_id。然后,Rask 会为您批准的文本进行配音。
不是。该 API 用于处理录制的视频和音频文件,并以文件的形式交付结果。对于实时语音代理或实时字幕,流式语音 API 是更好的选择。
Brask Inc 拥有 SOC 2 Type II 认证,并在 GDPR 规范下运营,其信任中心提供实时控制状态。自定义语音克隆必须在说话人同意的情况下创建。