135以上の言語に対応した動画翻訳API

動画を1つアップロードするだけで、必要なすべての言語に翻訳できます。動画翻訳REST APIが音声を文字起こし、翻訳、吹き替えし、翻訳済み動画、字幕ファイル、確認用の翻訳テキストを返します。
135以上の対象言語
.srtおよび.vtt形式の字幕
REST + Python SDK
one upload, every language
OAuth 2.0
# 1. exchange client credentials 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 once - YouTube, Drive, S3, Vimeo or direct URL
curl -X POST https://api.rask.ai/api/library/v1/media/link \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"link": "https://youtu.be/...", "name": "Q3 launch"}'

# 3. one project per target language - they run in parallel
for lang in es-mx de-de ja-jp pt-br; do
  curl -X POST https://api.rask.ai/v2/projects \
    -H "Authorization: Bearer $TOKEN" \
    -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"$lang\"}"
done
GET /v2/projects/{project_id}
polling, 10s
# Poll each project until merging_done, then collect the files.
while :; do
  curl -s https://api.rask.ai/v2/projects/$ID \
    -H "Authorization: Bearer $TOKEN" \
    | jq '{status, translated_video, translation_srt_path}'
  sleep 10
done
世界中のチームで利用されています
主な機能

1つのプロジェクトで動画翻訳APIができること

1つのAPIで、動画の自動文字起こし、翻訳、吹き替えを行います。翻訳テキストの確認、用語集を使った用語の統一、各プラットフォームに必要な出力形式でのダウンロードが可能です。オプションでリップシンクを追加できます(別料金)。

135以上の言語への翻訳

動画とターゲット言語を送信するだけで、スペイン語(ラテンアメリカ)、ポルトガル語(ブラジル)、フランス語(カナダ)や、その他サポートされている地域言語に動画を翻訳できます。元の言語は自動で検出されます。

話者の識別と話者ごとの音声

話者は自動で識別され、それぞれにターゲット言語の声が割り当てられるため、インタビューやパネルディスカッションも簡単に聞き取ることができます。割り当てを手動で変更したり、人数が分かっている場合は指定したりすることも可能です。

元の声またはAI音声

「インスタント音声クローン」で話者の元の声を使用したり、保存した「カスタム音声クローン」を再利用して動画間でプレゼンターの声を統一したりできます。どちらのオプションも対応しているターゲット言語で利用でき、それ以外の言語にはAI音声プリセットが対応します。

リップシンク

完了したプロジェクトのオプション作業として、リップシンクを有効にすることで、翻訳された音声に合わせて口の動きを一致させることができます(別料金)。最初に顔検出が行われるため、効果が得られる場合のみ適用されます。

背景音をそのまま保持

音楽、部屋の環境音、効果音は音声から分離され、新しいナレーションの下に再ミキシングされるため、視聴者は元のプロダクションの雰囲気をそのまま別の言語で楽しむことができます。

.srtおよび.vtt形式の字幕

翻訳されたすべての動画には、ターゲット言語の字幕ファイルが両方の形式で含まれており、翻訳された音声のタイミングに合わせて表示されます。

用語集による用語の管理

ブランド名、製品名、専門用語は、どの動画や言語でも一貫して翻訳されるほか、意図的に元の言語のまま維持することもできます。

編集可能な翻訳テキスト

元のテキストと翻訳テキストを並べて文字起こしデータを取得し、行やタイムスタンプを修正してから再生成できます。修正担当者がテキストを直すだけで、音声を再度録音し直す必要はありません。

制限なしのスケール

利用制限や同時実行数のクォータ、キーごとの制限はありません。大量のカタログを送信して、複数の言語へ同時に大量の翻訳を行うことができます。
実際の動作を見る

動画翻訳APIの出力内容

このページのワークフローで翻訳された同じクリップです。元の話者の声、フランス語、ドイツ語、ポルトガル語、スペイン語の吹き替え音声が含まれ、背景の音声はそのまま維持されています。
ENフラグ
En
FRフラグ
金
DEフラグ
De
PTフラグ
Pt
ESフラグ
Es
ワークフロー

アップロードから翻訳済み動画までの3ステップ

プロジェクトを作成すると翻訳が開始されます。編集後にプロジェクトの音声を再度吹き替えるには、後から /generate エンドポイントを使用してください。
1

ビデオをアップロードする

マルチパートフォームデータとしてファイルを送信するか、YouTube、Googleドライブ、S3、Vimeoなどのリンク、または直接ダウンロード用のURLを投稿します。費用が発生する前に、メディアIDと技術的なメタデータを受け取ることができます。

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

言語ごとにプロジェクトを作成

メディアIDを video_id として渡し、ターゲット言語を指定します。1回のアップロードから、独自の文字起こしや用語集を使用して、必要な言語ごとにプロジェクトをそれぞれ作成できます。

POST /v2/projects
3

音声の割り当てと再ダビング

status が merging_done になるまで確認し、その後、翻訳された動画とその言語の字幕ファイルをダウンロードします。

GET /v2/projects/{project_id}
処理時間はプロジェクトによって異なります。一括翻訳の場合は、同じアップロードからターゲット言語ごとに1つずつプロジェクトを作成し、APIでそれぞれの進捗を追跡して、完了したらファイルをダウンロードします。
あなたに合わせて構築

カタログにない言語や音声が必要ですか?チームにお問い合わせください。

新しい言語、カスタム音声、独自の配信方法、より高い処理能力など、公開カタログに含まれない機能が必要な場合、私たちのチームが要件と利用可能なオプションを確認します。

言語と音声

公開カタログにない言語や音声が必要ですか?ご要望や利用可能なオプションについて、チームにお気軽にご相談ください。

配信と連携

Webhooks、独自のキューへのプッシュ、S3への直接配信、カスタムエンドポイント。パイプラインにどのようにデータを送りたいかお知らせください。

ボリュームとスループット

バッチサイズ、アクションあたりのターゲット言語、処理の優先順位はすべて契約条件であり、固定された製品の制限ではありません。

セキュリティとホスティング

データレジデンシー、SSOおよびSAML、保持ルール、セキュリティレビューのサポートは、エンタープライズ向けオンボーディングの一環として対応いたします。
ユースケース

動画翻訳APIを利用する対象

動画機能を備えたプラットフォーム

LMSおよびカスタマー教育プラットフォーム、クリエイターおよび動画プラットフォーム、ウェビナーおよび仮想イベントツール、動画ホスティングおよびワークフローSaaS、デジタルアダプションプラットフォーム、ライブコマースやAI動画ツールなど、ユーザーがすでにプロダクトに動画コンテンツをアップロードしているサービスに最適です。APIを使用することで、ユーザーは同じ場所で動画を複数の言語に翻訳でき、動画翻訳を有料機能の一つとして提供できるようになります。

ローカライズおよび制作エージェンシー

動画翻訳を既存の配信ワークフローに接続し、人間の確認ステップを維持できます。翻訳されたテキストを言語専門家がセグメントごとに確認するため、チームの人数を増やすことなく、より多くの言語でクライアントに対応できます。

自社での継続的な動画制作

国際的な小売・Eコマース、グローバル企業、メディアパブリッシャー、企業内大学など。翻訳をパブリッシングワークフローに組み込むことで、トレーニング動画や製品コンテンツがあらゆる市場にそれぞれの言語で届くようになり、元の動画が変更された場合にはいつでもその言語バージョンを再生成できます。
導入事例

本物のチーム、目に見える成果

Raskを活用して動画をローカライズしている企業の導入実績を数値でご紹介します。
矢印
矢印
コード

動画翻訳APIのコード例

各言語の完全なサンプル:認証、一括アップロード、ターゲット言語ごとのプロジェクト作成、待機、翻訳済み動画と字幕ファイルの取得。
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

TARGETS = ["es-mx", "de-de", "ja-jp", "pt-br"]

async def translate(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)
    return job

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

    video = await client.create_media_link(
        data=schemas.MediaCreateLink(link="https://youtu.be/..."))
    while video.status is not enums.MediaStatus.READY:
        await asyncio.sleep(5)
        video = await client.get_media(media_id=video.id)

    jobs = await asyncio.gather(*(translate(client, video.id, l) for l in TARGETS))
    for j in jobs:
        print(j.dst_lang, j.translated_video, j.translation_srt_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}"}

video = requests.post(f"{API}/api/library/v1/media/link", headers=h,
                      json={"link": "https://youtu.be/..."}).json()
while video["status"] != "ready":
    time.sleep(5)
    video = requests.get(f"{API}/api/library/v1/media/{video['id']}", headers=h).json()

ids = [requests.post(f"{API}/v2/projects", headers=h,
                     json={"video_id": video["id"], "dst_lang": lang}).json()["id"]
       for lang in ["es-mx", "de-de", "ja-jp", "pt-br"]]

for pid in ids:
    while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
        time.sleep(10)
    print(p["dst_lang"], p["translated_video"], p["translation_vtt_path"])
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 get = (path) => fetch(API + path, { headers: h }).then((r) => r.json());
const post = (path, body) => fetch(API + path, { method: 'POST', headers: h, body: JSON.stringify(body) }).then((r) => r.json());

let video = await post('/api/library/v1/media/link', { link: 'https://youtu.be/...' });
while (video.status !== 'ready') { await sleep(5000); video = await get(`/api/library/v1/media/${video.id}`); }

const results = await Promise.all(['es-mx', 'de-de', 'ja-jp', 'pt-br'].map(async (dst_lang) => {
  let p = await post('/v2/projects', { video_id: video.id, dst_lang });
  while (p.status !== 'merging_done') { await sleep(10000); p = await get(`/v2/projects/${p.id}`); }
  return p;
}));

results.forEach((p) => console.log(p.dst_lang, p.translated_video, p.translation_srt_path));
fetch, Node 18+
plain HTTP
<?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']];

$video = $json($http->post('/api/library/v1/media/link',
    ['headers' => $h, 'json' => ['link' => 'https://youtu.be/...']]));
while ($video['status'] !== 'ready') {
    sleep(5);
    $video = $json($http->get("/api/library/v1/media/{$video['id']}", ['headers' => $h]));
}

foreach (['es-mx', 'de-de', 'ja-jp', 'pt-br'] as $lang) {
    $p = $json($http->post('/v2/projects', ['headers' => $h,
        'json' => ['video_id' => $video['id'], 'dst_lang' => $lang]]));
    while ($p['status'] !== 'merging_done') {
        sleep(10);
        $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
    }
    echo $lang, ' ', $p['translation_srt_path'], PHP_EOL;
}
POST /v2/projects
OAuth 2.0 client credentials
<?php
use GuzzleHttp\Client;

$http = new Client(['base_uri' => 'https://api.rask.ai']);

$auth = json_decode((new Client)->post(
    'https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
    ['auth' => [$clientId, $clientSecret],
     'form_params' => ['grant_type' => 'client_credentials']]
)->getBody(), true);

$h = ['Authorization' => 'Bearer ' . $auth['access_token']];

$media = json_decode($http->post('/api/library/v1/media/link',
    ['headers' => $h, 'json' => ['link' => 'https://youtu.be/...']])->getBody(), true);

$project = json_decode($http->post('/v2/projects',
    ['headers' => $h, 'json' => ['video_id' => $media['id'], 'dst_lang' => 'es-mx']])->getBody(), true);

while ($project['status'] !== 'merging_done') {
    sleep(10);
    $project = json_decode($http->get("/v2/projects/{$project['id']}",
        ['headers' => $h])->getBody(), true);
}
Guzzle 7
plain HTTP
Pythonが公式SDKです。Node、PHP、cURLのタブは、同じエンドポイントに対するシンプルなHTTPの例を示しています。
進捗

翻訳の進捗状況の通知方法

各プロジェクトは定義されたステータスに従って進行するため、ユーザーは言語バージョンごとに実際の段階的な進捗バーでプロセスを確認できます。対応が必要なのは3つのグループのみです。

成功、ここで完了

merging_done
翻訳が完了しました。プロジェクトをもう一度取得して、プロジェクトで利用可能なダウンロードリンクを取得します。

進行中、ポーリングを継続

created
uploading
transcription_started
separate_background_started
determine_speakers_started
translation_started
voiceover_started
merging_started
一致する項目 _done states。

失敗、停止、報告

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. Every error also returns a machine-readable slug for error handling.
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">
出力

翻訳された動画、音声、字幕

ターゲット言語ごとに、翻訳された動画とSRTおよびVTT形式の字幕をダウンロードできます。対象プランでは、翻訳された音声のみ、または元の背景音声とミックスした音声のダウンロードも可能です。
項目
形式
説明
translated_video
MP4
そのまま公開できる吹き替え済み動画
voiceover
WAV
音声のみ(背景音なし)。ご自身でミックスしてください。
translated_audio
WAV
翻訳された音声と元の背景音をミックスした音声
translation_srt_path
.srt
翻訳言語の字幕
translation_vtt_path
.vtt
WEBプレーヤー用のWebVTT形式の字幕
original_video
MP4
参照用に保存された元のファイル
コントロール

翻訳されたテキストを確認し、変更された部分のみを再ダビング

プロジェクトの作成時に、自動翻訳から始めるか、承認済みの独自の翻訳をSRTファイルとしてアップロードします。公開前にスクリプトを確認し、変更された部分のみを再生成します。APIによる再ダビングは、変更されたセグメントに対して課金されます。

セグメント単位の編集

セグメント単位の編集
すべてのプロジェクトでトランスクリプトがセグメントごとに公開され、原文と翻訳文が並べて表示されるため、修正は1つのパッチリクエストだけで完了します。
文字起こしとそのセグメントを取得する
元のテキストを修正すると、自動で再翻訳されます
翻訳されたテキストを直接修正して、お好みの表現に調整できます
再生時間の調整、セグメントの追加・削除
話者に割り当てられた音声を変更する

用語集による専門用語の管理

用語集による専門用語の管理
プロジェクトに用語集を紐付けることで、ブランド名、製品名、専門用語がすべての言語バージョンで一貫して翻訳されるようにするか、意図的に翻訳されないようにすることができます。

1つの用語集は1つの言語ペアをカバーし、その言語のすべての地域バリエーションに適用されるため、たとえば1つのスペイン語用用語集で es-mx および es-es 同様に機能します。プロジェクトには glossary_versionが記録されるため、後から編集を行っても、完了した作業が勝手に変更されることはありません。
入力

対応ファイル形式

7種類の動画形式または4種類の音声形式のファイルをアップロードするか、URLを送信します。対応していないファイル形式の場合、翻訳の利用時間が消費される前にアップロードが拒否されます。

動画

7つの形式
.mp4
.mov
.mkv
.avi
.webm
.m4v
.3gp

音声

4つの形式
.mp3
.wav
.flac
.m4a

利用前に詳細情報を確認

メディアのエンドポイントは、再生時間、ファイルサイズ、ビデオコーデック、フレームレート、解像度、オーディオコーデック、サンプルレート、チャンネルレイアウトを返します。動画の翻訳は分単位で課金されるため、事前にファイルを検証し、費用を見積もることができます。
セキュリティとコンプライアンス

セキュリティ審査への対応準備

Brask IncはSOC 2 Type IIを取得し、GDPRに準拠して運営されており、トラストセンターで稼働状況を公開しています。動画コンテンツは安全なAI環境で処理されます。

認定資格

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と自社製パイプラインの比較

テキスト翻訳APIは文字を翻訳しますが、動画の翻訳には音声認識、タイミング調整、音声生成、ミキシングも必要です。ここでは、同じ機能を実現する2つの方法をご紹介します。
必要な機能
Rask API
部品を組み合わせた場合
文字起こし、翻訳、音声合成、ミキシング
1回の呼び出し
3〜4社のベンダーとそれらを繋ぐコード
動画に合わせた翻訳のタイミング調整
含まれる
自社独自の調整ロジック
話者の識別と話者ごとの音声
含まれる
話者識別ベンダーと自社製の音声割り当てロジック
BGMや効果音をそのまま保持
含まれる
自社で構築・調整する音源分離のステップ
.srtおよび.vtt形式の字幕
含まれる
ご自身のタイミングデータから生成
リップシンク
オプション(別料金)
別のベンダー
翻訳された1行の修正
その部分だけを吹き替えて、その分の料金だけをお支払いいただきます
処理をやり直して、ファイル単位でお支払いいただきます
用語の統一
バージョン管理された用語集
お客様が管理する事前および事後処理
利用制限
なし
最も厳しい基準を持つベンダーの条件
対応言語リストにない言語
弊社のチームにご相談ください
ベンダーによって異なります
よくあるご質問

動画翻訳APIに関するよくある質問

お探しのものが見つかりませんか?営業部までお問い合わせください。

動画を自動で翻訳するAPIはありますか?

APIの利用権とAPIキーを取得するにはどうすればよいですか?

動画翻訳APIの認証方法を教えてください。

APIは同期的ですか、それとも非同期的ですか?

レート制限はありますか?

何種類の言語に動画を翻訳できますか?

1つの動画を同時に複数の言語に翻訳できますか?

動画の翻訳にはどのくらいの時間がかかりますか?

サポートされているファイル形式は何ですか?

翻訳された動画だけでなく、字幕も取得できますか?

公開前に翻訳されたテキストを編集することはできますか?

ChatGPTで動画を翻訳できますか?

動画の翻訳にはどのくらいの費用がかかりますか?

半日で吹き替えを始めましょう

今すぐ最初のリクエストを作成し、大量利用の契約や他の誰も対応していない言語が必要な場合は、ぜひお気軽にご相談ください。