135言語以上の動画に対応したAI音声吹き替えAPI

動画をアップロードして翻訳先の言語を選ぶだけで、音声合成済みの動画が完成します。1回のリクエストで文字起こし、翻訳、話者識別、音声クローン、音声合成をまとめて行い、元の話者の声を再現した吹き替え動画、個別のWAV音声トラック、字幕ファイルを出力します。
音声クローン
リップシンク機能を標準搭載
REST + Python SDK
three requests, start to finish
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 by link - 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. create the dubbing project - this starts the dub
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" \
  -d '{
    "video_id": "b8f7835d-e8c9-4ff4-8e34-5c336d818319",
    "dst_lang": "es-mx",
    "name":     "Q3 launch"
  }'
GET /v2/projects/{project_id}
polling, 10s
# Poll the project until status is merging_done.while :; do
  curl -s https://api.rask.ai/v2/projects/$ID \
    -H "Authorization: Bearer $TOKEN" | jq .status
  sleep 10done
世界中のチームで利用されています
主な機能

吹き替えAPIのすべての機能を1回の呼び出しで

1つのAPIで動画の文字起こし、翻訳、音声合成を自動化できます。音声の選択、用語集、スクリプトの編集機能を使って仕上がりを微調整しましょう。リップシンク(口パク合わせ)の追加も可能で(別料金)、さらに自然な仕上がりにできます。

135言語以上への吹き替え

1回のリクエストで、文字起こし、翻訳、音声合成、音声ミキシングの全プロセスを実行します。必要なのは、動画ファイルと翻訳先の言語を指定することだけです。

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

元の音声から話者が自動的に分離され、翻訳先の言語でそれぞれに専用の音声が割り当てられます。割り当てを変更したり、あらかじめ分かっている場合は人数を指定したりすることもできます。

言語を超えた音声のクローン作成

スペイン語、ヒンディー語、日本語、韓国語などに翻訳しても、元の話者の声の特徴がそのまま維持されるため、どの言語でも本人のような自然な声で話しているように聴こえます。

リップシンク

吹き替えられた音声に合わせて口の動きを調整し、吹き替えプロジェクトごとに独立した作業として実行されます。顔検出が最初に実行されるため、効果が得られる場合のみ費用が発生します。

背景音をそのまま保持

音楽、背景の環境音、効果音は音声トラックから分離され、新しい音声の下で自然にミックスされます。これにより、元のBGMや環境音を残したまま、言語だけを自然に切り替えた動画に仕上げることができます。

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

どちらのフォーマットも完成したすべてのプロジェクトに含まれており、音声のタイミングに完全に同期しているため、お使いのプレイヤーですぐにご利用いただけます。

用語集による用語の管理

ブランド名、商品名、専門用語はいつでも一貫して翻訳されるか、意図的に翻訳されずにそのまま維持されます。バージョン管理機能があるため、完成したプロジェクトごとに、どの用語集を使用して音声合成されたかが保存されます。

セグメント単位のスクリプト編集

文字起こしデータの取得、テキストの修正、タイムスタンプの調整、セグメントの追加や削除を行い、簡単に再生成ができます。専門スタッフがスクリプトを直接修正すると、その編集内容に基づいて音声が再生成されます。

制限なしのスケール

大量の動画を一度に送信し、任意の言語へ並行して、制限なく一括で音声合成を行うことができます。
実際の動作を見る

AI音声ダビングAPIが実際に返すもの

先ほどご紹介したAPIの呼び出しによって音声合成された、同じクリップです。元の動画は元の声のまま、フランス語、ドイツ語、ポルトガル語、スペイン語にはクローン音声が適用され、背景の音声もそのまま綺麗に残っています。
ENフラグ
En
FRフラグ
金
DEフラグ
De
PTフラグ
Pt
ESフラグ
Es
ワークフロー

元ファイルから音声合成動画が完成するまでの3ステップ

プロジェクトを作成すると音声合成が開始されます。編集後に再度音声合成を行いたい場合は、後から /generate を使用してください。
1

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

マルチパートフォームデータとしてファイルを送信するか、リンクを投稿します。サポートされているリンクのソースは、YouTube、Google Drive、S3、Vimeo、および直接ダウンロードURLです。費用が発生する前に、メディアIDと完全な技術的メタデータが返されます。

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

プロジェクトを作成する

メディアIDをvideo_idとして渡し、ターゲット言語を指定します。オプションで独自の文字起こしや用語集を添付することもできます。ダビングはすぐに開始されます。

POST /v2/projects
3

出力を取得する

statusがmerging_doneに達するまで確認し、ダビングされた動画、音声トラック、字幕ファイルをダウンロードします。

GET /v2/projects/{project_id}
処理時間はプロジェクトによって異なります。APIを通じて進捗状況を確認し、音声合成が完了したらファイルをダウンロードしてください。
あなたに合わせて構築

リストにないですか?私たちが作成します。

新しい言語、カスタム音声、独自の配信方法、より高い処理能力など、公開されているカタログ以外の機能が必要な場合は、弊社のチームがお客様のご要望に合わせてカスタマイズ開発いたします。

言語と音声

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

配信と連携

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

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

バッチサイズ、1回あたりの翻訳先言語数、処理の優先順位は、お客様のシステム環境に合わせて契約時に設定できます。

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

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

AI音声合成・翻訳APIの活用事例

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

LMSやカスタマー教育プラットフォーム、クリエイター・動画プラットフォーム、ウェビナー・バーチャルイベントツール、動画ホスティング・ワークフローSaaS、デジタルアダプションプラットフォーム、ライブコマースなど。教育コンテンツ、製品デモ、クリエイター動画などを自社プロダクト内で手軽に音声合成し、世界中の視聴者が母国語で視聴できるようにすることで、AIによる音声合成を自社サービスの魅力的な機能のひとつにすることができます。

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

AIによる音声合成を既存の配信ワークフローに組み込みつつ、人間による確認プロセスを維持できます。AIが最初の翻訳版を作成し、スタジオを予約して再収録する代わりに、専門スタッフがスクリプトを直接編集して品質を高められます。

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

国際的な小売・Eコマース、グローバル企業、メディアパブリッシャー、企業内大学など。配信ワークフローにローカライズ機能を組み込むことで、元の動画が更新されたときに、チームがいつでも新しい言語バージョンをすばやく再生成できるようになります。
導入事例

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

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

AIダビングAPIのコード例

各言語における1つの完全な一連の処理:認証、アップロード、ダビング、待機、ダウンロード。
# pip install git+https://github.com/braskai/rask-sdk
import asyncio
from rask_sdk import RaskSDKClient

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

    media   = await client.upload_media_link(link="https://youtu.be/...")
    project = await client.create_project(video_id=media.id, dst_lang="es-mx")

    while project.status != "merging_done":
        await asyncio.sleep(10)
        project = await client.get_project(project.id)

    print(project.translated_video, project.translation_srt_path)

asyncio.run(main())
github.com/braskai/rask-sdk
Python 3.8+, 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 + polling
no SDK required
// no dependencies, Node 18+ global fetch
const API = 'https://api.rask.ai';

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 media = await fetch(`${API}/api/library/v1/media/link`, {
  method: 'POST', headers: h,
  body: JSON.stringify({ link: 'https://youtu.be/...' }),
}).then(r => r.json());

let project = await fetch(`${API}/v2/projects`, {
  method: 'POST', headers: h,
  body: JSON.stringify({ video_id: media.id, dst_lang: 'es-mx' }),
}).then(r => r.json());

while (project.status !== 'merging_done') {
  await new Promise(r => setTimeout(r, 10000));
  project = await fetch(`${API}/v2/projects/${project.id}`, { headers: h }).then(r => r.json());
}

console.log(project.translated_video);
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" \
  -d '{"link": "https://youtu.be/..."}' | jq -r .id)

# 3. create the dubbing project
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"es-mx\"}" | jq -r .id)

# 4. poll, then download
while [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" != "merging_done" ]; do
  sleep 10
done
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 状態です。これらは段階的な進捗画面にきれいに当てはまります。

失敗、停止、報告

failed
upload_failed
transcription_failed
translation_failed
voiceover_failed
merging_failed
no_audio
no_words
forbidden_link
no_audio, no_words および forbidden_link は、自社のユーザーにそのまま見せても分かりやすい内容になっています。
Typical run, 4 minute source video
GET /v2/projects/{project_id}
   0s  created
  12s  transcription_started
  70s  translation_started
  95s  voiceover_started
 150s  merging_started
 170s  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
参照用に保存された元のファイル
コントロール

スクリプトを編集し、変更した部分のみを再度吹き替える

自動翻訳で大部分の作業が完了します。必要に応じて、セグメントごとにテキストを編集して再生成することができ、変更した部分に対してのみ料金が発生します。

セグメント単位の編集

セグメント単位の編集
すべてのプロジェクトでは文字起こしデータがセグメントごとに分かれており、修正したい箇所があれば1つのリクエストで簡単に直すことができます。
文字起こしとそのセグメントを取得する
元のテキストを修正すると、自動で再翻訳されます
翻訳されたテキストを直接修正して、お好みの表現に調整できます
再生時間の調整、セグメントの追加・削除
話者に割り当てられた音声を変更する

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

用語集による専門用語の管理
プロジェクトに用語集を登録すると、ブランド名、商品名、専門用語がいつでも正しく翻訳されるか、必要に応じてそのまま維持されます。

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

対応ファイル形式

7種類の動画形式と4種類の音声形式に対応しており、URLからの直接読み込みも可能です。非対応のファイルを送信した場合、APIは処理時間としてカウントされる前に、コンテンツタイプに基づいてそのファイルを拒否します。

動画

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か月ごとのキーローテーション

あなたのコンテンツ

クローズドAI環境
一般モデルのトレーニングには不使用
完全なエクスポート、ベンダーのロックインなし

アクセス

SSOおよびSAML
ロールベースのアクセス制御
OAuth 2.0クライアント認証情報

エンタープライズ

データ保管場所の選択肢
カスタムSLA
専任のアカウントマネージャー

音声の権利

利用権付きの合成音声
同意に基づく音声クローン
AIの安全管理、人間の確認プロセス
比較

Rask APIと自社開発の比較

同じダビング機能ですが、アプローチが異なります。一方は完成された仕組み、もう一方は今後の開発ロードマップです。
必要な機能
Rask API
部品を組み合わせた場合
文字起こし、翻訳、音声合成、ミキシング
1回の呼び出し
3〜4社のベンダーとそれらを繋ぐシステム
話者の識別と話者ごとの音声
含まれる
話者識別ベンダーと自社製の音声割り当てロジック
BGMや効果音をそのまま保持
含まれる
自社で構築・調整する音源分離のステップ
言語を超えた音声のクローン作成
含まれる
別のベンダーと別の同意フロー
リップシンク
含まれる
5番目のベンダー
.srtおよび.vtt形式の字幕
含まれる
ご自身のタイミングデータから生成
不自然な1行の修正
その部分だけを吹き替えて、その分の料金だけをお支払いいただきます
処理をやり直して、ファイル単位でお支払いいただきます
用語の統一
バージョン管理された用語集
お客様が管理する事前および事後処理
利用制限
なし
最も条件の厳しい提供元の制限が適用されます
まだどこも対応していない言語
私たちが構築します
利用できません
よくあるご質問

AI音声合成API:よくある質問

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

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

AI音声合成APIの認証方法は?

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

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

何種類の言語にダビングできますか?

APIでの音声クローンはどのように機能しますか?

AI吹き替えにはどのくらい時間がかかりますか?

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

複数の話者がいる動画は、APIでどのように処理されますか?

独自の原稿や文字起こしを提供できますか?

動画の吹き替えだけでなく、字幕も取得できますか?

SDKはありますか?

編集後に再度吹き替えを行う場合、費用はどうなりますか?

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

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