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

135以上の言語や地域に対応し、吹替音声に合わせた口の動きを再現します。API経由で動画の吹替を行い、その結果にリップシンクを適用することで、画面上の話者が新しい言葉を話している動画をダウンロードできます。最初に顔認証が実行されます。リップシンクの料金は吹替とは別で、編集後の再生成も含め、フル動画の生成ごとに発生します。
無料プレビュー1分間
画面上の複数の顔
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
処理時間は、動画の長さやリップシンクの混雑状況によって異なります。専用のエンドポイントで、自分の前に何件の処理待ちがあるか確認できます。
あなたに合わせて構築

特別なケースでリップシンクが必要ですか?当社のチームまでご相談ください

より高い処理能力や優先的な処理、独自の配信方法が必要な場合など、通常の機能では対応できないご要望について、私たちのチームがお客様の要件と利用可能なオプションを確認いたします。

言語と音声

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

配信と連携

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

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

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

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

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

リップシンクAPIの利用者

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

LMSや顧客教育プラットフォーム、クリエイター向け動画プラットフォーム、ウェビナー・バーチャルイベントツール、動画ホスティングおよびワークフロー関連のSaaS、デジタル導入支援ツール、ライブコマースなど。ユーザーやクリエイターがすでに公開している動画にリップシンク付きの吹き替えを追加することで、画面上の話し手が自然に見え、製品のプレミアム機能として活用できます。

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

吹き替えとは別のオプションとしてリップシンクを提供しましょう。利用可能な場合はアカウントの無料プレビュー時間を使って結果を確認できます。フル動画のリップシンク生成や、確認後の再生成費用もクライアントへの見積もりに含めましょう。

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

グローバルな小売・EC、世界的なフランチャイズ、メディアパブリッシャー、企業内大学など。人物が画面に大きく映るマーケティング動画、研修動画、エグゼクティブ向け動画では、どの市場においても、リップシンクによって翻訳された音声と画面の話し手の口の動きが自然に一致します。
導入事例

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

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

リップシンク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
Pythonが公式SDKです。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
進捗状況が空(null)の間は、処理待ちの状態です: 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
比較用のリップシンクなし吹き替え動画
コントロール

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

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

セグメント単位の編集

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

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

用語集による専門用語の管理
用語集を追加することで、ブランド名や専門用語がすべての吹き替えで一貫して発音され、リップシンクもその言葉遣いに合わせられます。

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
部品を組み合わせた場合
同期する翻訳済み音声トラック
同じプロジェクトで作成
文字起こし、翻訳、音声サービスのプロバイダーを最初に利用
お支払い前の顔のチェック
プロジェクトごとに自動で実行
独自の顔検出ステップ
画面上の複数の人物
is_multiple_speakers: true
自分で構築および調整する顔ごとの追跡
全体処理前のプレビュー
アカウントごとに1分間の無料枠
テスト実行ごとに支払い
原稿の編集後に再同期
動画全体を対象とした新しいリップシンクの生成(別途請求)
ファイル全体に対して再度支払い
BGMと効果音
新しい音声で保持
構築する音源分離のステップ
.srtおよび.vtt形式の字幕
含まれる
ご自身のタイミングデータから生成
キューの確認
キューの位置と進捗状況(0〜100)
ご利用の提供元が公開している内容
利用制限
なし
最も厳しい基準を持つベンダーの条件
請求
動画全体のリップシンク生成ごと
実行ごと、提供元ごと
よくあるご質問

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

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

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

先に吹き替えを行わずに、動画をリップシンクできますか?

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

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

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

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

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

複数のスピーカーでもリップシンクは使えますか?

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

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

ダビングを編集するとどうなりますか?

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

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

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

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