吹き替え動画向けのリップシンクAPI

135以上の言語や地域に対応し、口の動きを吹き替え音声に合わせることができます。API経由で動画の吹き替えを行い、その結果に対してリップシンクを実行すると、画面の話し手が新しい言葉を話している自然な動画をダウンロードできます。処理の最初に顔の検出が行われます。リップシンクの料金は吹き替えとは別にかかり、編集後の再生成を含め、動画全体を生成するごとに発生します。
無料のプレビュー時間
複数の顔が画面に映る場合にも対応
REST + Python SDK
check, preview, sync
OAuth 2.0
# 1. on a dubbed project: confirm the video has a face (runs once, usually automatically)
curl https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN"
#  "check_face_task_status": "done", "video_has_face": true

# 2. preview one free minute of lip-sync
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": true}'

# 3. lip-sync the full video - billed separately from dubbing
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": false}'
GET /v2/projects/{project_id}/lipsync
polling, 15s
# Poll until lipsync_task_status is done, then download lipsync_result_path
while :; do
  curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
    | jq '{lipsync_task_status, lipsync_task_progress, tasks_in_lipsync_queue}'
  sleep 15
done
世界中のチームで利用されています
機能一覧

リップシンクAPIの主な機能

吹き替え動画にリップシンクを追加します。映っている顔を確認し、アカウントの無料プレビュー時間(利用可能な場合)を適用しながら、APIを通じて進捗状況を確認できます。動画全体のリップシンク料金は、生成するたびに吹き替えとは別に請求されます。

翻訳済み動画のリップシンク

対応している135以上の言語や地域の中から、プロジェクトで翻訳された動画の吹き替え音声に合わせて、口の動きを自然に合わせることができます。

顔の自動検出機能

リップシンクの前に、動画内に少なくとも1つの顔があるかどうかが確認されます。通常はプロジェクトごとに1回のみ単独で実行されるため、時間を消費する前に結果を把握できます。

複数の顔が画面に映る場合

インタビューやパネルディスカッション、複数人による会話の場合は、is_multiple_speakersをtrueに設定してください。画面に映る人物が常時1人の場合は、処理を早めるためにfalseに設定します。

1分間の無料プレビュー

すべてのアカウントに1分間の無料リップシンク枠が付与されます。ご自身の素材でis_free_lipsyncを実行し、動画全体を同期する前に結果を確認できます。

生成ごとの個別請求

動画全体のリップシンクの料金は、吹き替えとは別に請求されます。原稿や音声を編集した後は、プロジェクトの吹き替えをやり直し、新しい料金でリップシンク済みの新しいバージョンを生成してください。

キューの順番と進捗状況

リップシンク情報の取得用エンドポイントにより、自分の前にあるタスクの数や0から100までの進捗状況が返されるため、ユーザーは実際の進捗を把握できます。

顔にマッチした音声

リップシンクは、クローン音声やAI音声プリセットなど、プロジェクトが話し手に使用している音声に対して適用されます。

編集、再吹き替え、再同期

テキスト、タイミング、音声を変更してプロジェクトを再吹き替えし、新しいバージョンに対して再びリップシンクを実行します。顔の検出を再度行う必要はありません。

制限なしで規模を拡大

利用制限、同時実行数の上限、キーごとの制限はありません。すべてのカタログに対してリップシンクのタスクを送信すれば、キューの順番からそれぞれの処理状況を確認できます。
実際の動作を見る

音声の吹き替えから口の動きの調整まで

同じクリップをフランス語、ドイツ語、ポルトガル語、スペイン語に吹き替えます。このような吹き替えプロジェクトでは、口の動きの調整機能(リップシンク)が新しい音声に合わせて口の位置を自然に合わせます。
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
ワークフロー

吹き替え動画から口の動きが同期された動画までの3つのステップ

口の動きの同期は、すでに吹き替えが完了しているプロジェクトに対して行われます。/generateエンドポイントを使用して編集後に音声を再吹き替えし、再度口の動きを同期させます。
1

動画の吹き替えを行う

元の動画をアップロードするか公開URLを送信し、ターゲット言語を指定してプロジェクトを作成し、処理の完了を待ちます。口の動きの同期には、このプロジェクトの翻訳済み動画が必要です。

POST /v2/projects
2

顔の検出を確認する

顔の検出確認により、動画内に少なくとも1つの顔があることが確認されます。通常は自動的に開始されますが、開始されない場合はプロジェクトに対して手動で実行してください。

PUT /v2/projects/{id}/check_face
3

口の動きの同期を実行してダウンロードする

口の動きの同期タスクを実行し、進行状況が0から100まで進むのを確認したら、指定された場所から動画をダウンロードします。

PUT /v2/projects/{id}/lipsync
処理時間は、動画の長さや同期の混雑状況によって異なります。同期情報の確認画面で、自分の前に何件のタスクがあるかを確認できます。
あなたを中心に構築

特別なケースで口の動きの同期が必要ですか?チームにお問い合わせください

より高い処理能力や優先処理、独自の配信方法が必要な場合など、標準機能以外のカスタマイズが必要な場合は、専任チームがご要望と利用可能なオプションを確認いたします。

言語と音声

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

配信と連携

ウェブフック、お客様のキューへのプッシュ、S3への直接配信、カスタムエンドポイントなどに対応しています。パイプラインに必要なデータ配信方法をお知らせください。

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

バッチサイズ、1回あたりの翻訳言語数、処理の優先順位は契約内容によって異なり、固定の制限ではありません。

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

データの保存場所、SSOやSAML、データ保持ルール、セキュリティ審査のサポートなどは、エンタープライズ向けの導入プロセスの一環として対応いたします。
ユースケース

リップシンクAPIの活用事例

動画を活用するプラットフォーム

学習管理システム(LMS)やカスタマー教育プラットフォーム、クリエイターおよび動画プラットフォーム、ウェビナー・オンラインイベントツール、動画ホスティングやワークフローSaaS、デジタル導入支援プラットフォーム、ライブコマースなど。ユーザーやクリエイターが既に公開している動画に吹き替えと口の動きの同期を追加することで、翻訳された出演者が画面上で自然に映るようになり、製品のプレミアム機能として活用できます。

ローカライズ・制作会社

通常の吹き替えに加えて、口の動きの同期を別のサービスとして提供しましょう。アカウントの無料プレビュー時間を利用して結果を確認し、動画全体の同期処理や確認後の修正作業をクライアントへの見積もりに含めることができます。

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

国際的な小売業者やEコマース、グローバル企業、メディアパブリッシャー、企業内大学など。人物が大きく映るマーケティング動画、研修動画、経営陣のメッセージ動画などにおいて、口の動きの同期機能を使用することで、どの国の市場向けに翻訳された音声でも、画面上の話し手の動きと自然に一致させることができます。
導入事例

実際のチームによる、確かな実績

Rask AIを活用した企業の動画ローカライズ実績を数字でご紹介します。
arrow
arrow
コード

リップシンクAPIのコード例

すでに吹き替えが完了したプロジェクトを対象に、各言語の完全なサンプルコードを用意しています。顔の確認、同期の実行、進捗の確認、結果のダウンロードまでの流れを確認できます。
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas

PROJECT_ID = "..."   # a project with status merging_done

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

    info = await client.get_lipsync_info(project_id=PROJECT_ID)
    if info.check_face_task_status is not enums.LipsyncStatus.DONE:
        await client.run_check_face_task(project_id=PROJECT_ID)
        while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).check_face_task_status is not enums.LipsyncStatus.DONE:
            await asyncio.sleep(10)
    if not info.video_has_face:
        raise SystemExit("No face found - lip-sync is not available for this video")

    await client.run_lipsync_task(project_id=PROJECT_ID,
        data=schemas.LipsyncTaskData(is_multiple_speakers=True, is_free_lipsync=False))

    while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).lipsync_task_status is not enums.LipsyncStatus.DONE:
        print(info.lipsync_task_progress, info.tasks_in_lipsync_queue)
        await asyncio.sleep(15)

    print(info.lipsync_result_path)

asyncio.run(main())
github.com/braskai/rask-sdk
async, typed models
import time, requests

AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
URL  = f"https://api.rask.ai/v2/projects/{PROJECT_ID}"   # a dubbed project

token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
                      data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}

info = requests.get(f"{URL}/lipsync", headers=h).json()
if info["check_face_task_status"] != "done":
    requests.put(f"{URL}/check_face", headers=h)
    while (info := requests.get(f"{URL}/lipsync", headers=h).json())["check_face_task_status"] != "done":
        time.sleep(10)
assert info["video_has_face"], "No face found"

requests.put(f"{URL}/lipsync", headers=h,
             json={"is_multiple_speakers": True, "is_free_lipsync": False})

while (info := requests.get(f"{URL}/lipsync", headers=h).json())["lipsync_task_status"] not in ("done", "failed"):
    time.sleep(15)

print(info["lipsync_task_status"], info["lipsync_result_path"])
requests + polling
no SDK required
// no dependencies, Node 18+ global fetch - PROJECT_ID is a dubbed project
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 url = `https://api.rask.ai/v2/projects/${PROJECT_ID}`;
const info = () => fetch(`${url}/lipsync`, { headers: h }).then((r) => r.json());

let i = await info();
if (i.check_face_task_status !== 'done') {
  await fetch(`${url}/check_face`, { method: 'PUT', headers: h });
  while ((i = await info()).check_face_task_status !== 'done') await sleep(10000);
}
if (!i.video_has_face) throw new Error('No face found');

await fetch(`${url}/lipsync`, {
  method: 'PUT', headers: h,
  body: JSON.stringify({ is_multiple_speakers: true, is_free_lipsync: false }),
});

while (!['done', 'failed'].includes((i = await info()).lipsync_task_status)) {
  console.log(i.lipsync_task_progress, i.tasks_in_lipsync_queue);
  await sleep(15000);
}
console.log(i.lipsync_result_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. face check on the dubbed project - start it only if it has not run yet
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
  | jq '{check_face_task_status, video_has_face}'
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/check_face -H "Authorization: Bearer $TOKEN"

# 3. run lip-sync (set is_free_lipsync to true for the free preview minute)
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d '{"is_multiple_speakers": true, "is_free_lipsync": false}'

# 4. follow progress, then download the result
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
  | jq '{lipsync_task_status, lipsync_task_progress, lipsync_result_path}'
PUT /v2/projects/{id}/lipsync
OAuth 2.0 client credentials
<?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']];
$info = fn() => $json($http->get("/v2/projects/$projectId/lipsync", ['headers' => $h]));

$i = $info();
if ($i['check_face_task_status'] !== 'done') {
    $http->put("/v2/projects/$projectId/check_face", ['headers' => $h]);
    while (($i = $info())['check_face_task_status'] !== 'done') sleep(10);
}
if (!$i['video_has_face']) exit('No face found');

$http->put("/v2/projects/$projectId/lipsync", ['headers' => $h,
    'json' => ['is_multiple_speakers' => true, 'is_free_lipsync' => false]]);

while (!in_array(($i = $info())['lipsync_task_status'], ['done', 'failed'])) sleep(15);
echo $i['lipsync_result_path'];
Guzzle 7
plain HTTP
公式SDKはPythonです。Node、PHP、cURLのタブには、同じエンドポイントに対する通常のHTTPの例が記載されています。
進捗

口の動きの同期タスクの進捗状況の確認方法

同期情報の確認画面では、顔の検出、タスクの状態、順番待ちの位置、0から100までの進捗状況が表示されます。確認すべき項目は3つのグループのみです。

完了(ここで処理を終了)

lipsync_task_status: done
lipsync_task_progress: 100
口の動きの同期が完了しました。ダウンロードリンクから結果を取得できます。

進行中(ポーリングを継続)

check_face_task_status: started
lipsync_task_status: started
lipsync_task_progress: 0-99
tasks_in_lipsync_queue
進捗状況が空欄の場合、タスクは順番待ちの状態です: tasks_in_lipsync_queue 自分の前に何件のタスクがあるかを示します。

失敗、停止、レポート

lipsync_task_status: failed
check_face_task_status: failed
video_has_face: false
顔がはっきり映っていない動画は、口の動きを同期させることができません。タスクが失敗した場合は、詳細を添えてサポートまでお問い合わせください。 project_id.
Lip-sync task, as GET /lipsync reports it
GET /v2/projects/{project_id}/lipsync
check face     check_face_task_status  done     video_has_face  true
queued         lipsync_task_status     started  tasks_in_lipsync_queue  2
processing     lipsync_task_progress   0 → 50 → 100
complete       lipsync_task_status     done
               lipsync_result_path     https://...

または、ポーリングを完全にスキップする

Webhookのエンドポイントを指定すると、状態の切り替えごとにPOSTリクエストが送信されるため、変更が発生した瞬間にキューが反応します。Webhookの配信は、エンタープライズプランに含まれています。
ドキュメントを読む
preserveAspectRatio="xMidYMid meet" aria-hidden="true" role="img">
出力

リップシンク付き動画、吹き替え、字幕

lipsync_result_pathから生成された動画をダウンロードします。プロジェクトには、リップシンクなしの吹き替え動画、SRTおよびVTT形式の翻訳済み字幕が保存され、対象プランでは翻訳された音声が別々のオーディオトラックとして保存されます。
項目
形式
説明
lipsync_result_path
MP4
公開の準備が整ったリップシンク付き動画
voiceover
WAV
独自のミックス用に、音声翻訳のみを出力
translated_audio
WAV
翻訳音声と元の背景音声をミックスしたもの
translation_srt_path
.srt
翻訳された言語の字幕
translation_vtt_path
.vtt
WEBプレーヤー用のWebVTT形式の字幕
translated_video
MP4
比較用のリップシンクなし吹き替え動画
コントロール

吹き替えを編集し、更新されたリップシンク版を生成

テキスト、タイミング、または音声を変更した後、変更した部分の吹き替えをやり直し、更新された動画のリップシンクを生成します。再吹き替えおよび動画全体の新しいリップシンク生成は、それぞれ個別課金となります。

部分ごとの編集

部分ごとの編集
個別のテキストセグメントを編集し、変更した行の吹き替えをやり直します。口の動きを更新するには、動画全体の新しいリップシンクを生成します(これらは個別に課金されます)。
文字起こしとその部分を取得する
元のテキストを修正すると、AIが再翻訳します
翻訳されたテキストを直接修正して、お好みの表現に保つ
タイムスタンプの調整、部分の追加・削除
話者に割り当てられた音声を変更する

用語集

用語集
用語集を追加することで、ブランド名や専門用語がどの吹き替えでも同じように発音され、口の動きもその言葉に合わせられます。

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

対応しているファイル形式

7つの動画形式のいずれかをアップロードするか、公開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には、ターゲット言語の完成したオーディオトラックが必要です。Raskは、1つのプロジェクトで吹き替えトラックの作成とリップシンクを行います。以下は、同じ結果を2つの方法で作成した例です。
必要なもの
Rask API
パーツを組み合わせた場合
同期させるための翻訳済みオーディオトラック
同じプロジェクトで作成
文字起こし、翻訳、音声サービスのプロバイダーを優先
支払い前の顔のチェック
プロジェクトごとに1回、自動実行
独自の顔検出ステップ
複数の顔が画面に映る場合
is_multiple_speakers: true
自分で構築および調整する顔ごとの追跡機能
本格実行前のプレビュー
アカウントごとに無料枠1分
テスト実行ごとに支払い
スクリプト編集後の再同期
動画全体の新しいリップシンク生成(別途請求)
ファイル全体に対して再度支払い
背景の音楽と効果音
新しい音声で維持
独自に構築する音声分離のステップ
srtおよび.vtt形式の字幕
含まれる
独自のタイミングデータから生成
キューの表示
キューの位置と進捗状況(0〜100)
ベンダーが提供する仕様
レート制限
なし
ベンダーの最も厳格な適用基準
料金請求
動画全体のリップシンク生成ごと
実行ごと、ベンダーごと
よくあるご質問

リップシンクAPI:よくある質問

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

リップシンクAPIはありますか?

最初に吹き替えを行わずに、動画のリップシンクだけを行うことはできますか?

自分の音声トラックでリップシンクを行うことはできますか?

APIで画像やプロンプトからトーキングアバターを生成できますか?

リップシンクを行うには、動画にどのような条件が必要ですか?

リップシンクの料金はどうなっていますか?

リップシンクの無料プレビューはありますか?

複数の話し手がいる動画でもリップシンクを使えますか?

リップシンクの進捗状況を確認するにはどうすればよいですか?

リップシンクにはどれくらいの時間がかかりますか?

吹替えを編集した後はどうなりますか?

リップシンクが失敗した場合はどうすればよいですか?

API アクセスと API キーを取得するにはどうすればよいですか?

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

まずは今日最初の依頼を試してみませんか?大量の利用や、他にはない言語についての相談もお気軽にお問い合わせください。