翻訳済みSRTおよびVTTファイル用の字幕API

動画を1回アップロードするだけで、音声のタイミングに合わせたすべての対応言語のSRTおよびWebVTT字幕ファイルを取得できます。APIで任意の行を修正した後、動画プレイヤーやアプリ、動画編集ソフト用の更新済みファイルをダウンロードできます。
SRTとWebVTT
135以上の言語や地域に対応
REST + Python SDK
upload, create, download
OAuth 2.0
# 1. 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" -H "Content-Type: application/json" \
  -d '{"link": "https://example.com/onboarding.mp4", "name": "onboarding"}'

# 2. one project per subtitle language
for lang in es-mx fr-fr ja-jp; do
  curl -X POST https://api.rask.ai/v2/projects \
    -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"$lang\"}"
done
GET /v2/projects/{project_id}
.srt + .vtt
# When status is merging_done, download both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o onboarding.es-mx.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o onboarding.es-mx.vtt "$(echo $P | jq -r .translation_vtt_path)"
世界中のチームで利用されています
機能一覧

字幕APIが提供するすべての機能

ポッドキャストやインタビューなどの動画や音声の記録から、翻訳されたSRTおよびWebVTTファイルを簡単に作成できます。プロジェクトごとに目的の言語を選択すると、文字起こし、翻訳、音声の吹き替えと一緒に字幕ファイルが作成されます。

SRTおよびWebVTTファイル

完了したすべてのプロジェクトでは、ターゲット言語の.srtファイルと.vttファイルが提供されます。動画編集ソフトやほとんどのプラットフォームにはSRT、ウェブ動画の再生にはWebVTTをご利用いただけます。

他言語での字幕作成

世界中の視聴者に向けて言語の壁を取り払いましょう。1回のアップロードで、es-mx、pt-br、fr-caなど、言語ごとにプロジェクトを作成できます。元の言語は自動で検出されます。

音声のタイミングに完全に一致

各字幕は開始時間と終了時間を持つ文字起こしのセグメントに沿っているため、話されている内容と同時に画面に表示されます。

元の言語での字幕

文字起こしデータには、タイムスタンプ付きの各セグメントの元のテキストが保存されます。数行のコードを追加するだけで、これをSRTまたはVTTファイルに変換し、同じ言語の字幕を表示できます。

会話における話者ラベル

各文字起こしセグメントには話者ラベルが付いているため、インタビューやパネルディスカッション、対談などの字幕で誰が話しているかを明示できます。

公開前のテキスト編集

APIを使って任意のセグメントのテキストやタイミングを修正し、再生成することができます。聞き取りにくい言葉や名前、アクセントなども、あらゆる形式で一度に修正されます。

すべての言語で用語を統一

用語集を使用することで、製品名や専門用語をすべての字幕言語で統一したり、あえて元の言語のままに保つことができます。

字幕と吹き替え版の両方に対応

同じプロジェクトから翻訳済みの動画と音声トラックも取得できるため、1回のアップロードで字幕と吹き替え版の両方が手に入ります。

制限なしで規模を拡大

利用制限や同時実行のクォータ、キーごとの制限はありません。動画ライブラリ全体をすべての対応言語で同時に字幕化できます。
実際の動作を見る

1つの動画を、5つの言語に

英語、フランス語、ドイツ語、ポルトガル語、スペイン語で同じ動画を作成できます。言語ごとに、SRTとVTTの字幕ファイルが用意されます。
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
ワークフロー

動画のアップロードから字幕ファイル作成までの3つのステップ

プロジェクトを作成すると、文字起こし、翻訳、音声の吹き替えが一度に実行されます。字幕の行を編集した後に /generate エンドポイントを使用してください。
1

動画をアップロード

動画ファイルを送信するか、YouTube、Googleドライブ、S3、Vimeo、その他のURLからリンクを貼り付けます。1回のアップロードですべての言語の字幕に対応します。

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

プロジェクトを作成する

メディアIDをvideo_idとして渡し、プロジェクトごとに1つの翻訳言語を指定します。異なる言語のプロジェクトを同時に処理できます。

POST /v2/projects
3

字幕ファイルをダウンロードする

処理が完了するまでステータスを確認し、完了したら.srtファイルと.vttファイルをダウンロードして保存します。

GET /v2/projects/{project_id}
処理時間は、動画の長さ、話者の人数、翻訳先の言語によって異なります。あるテストでは、3分47秒の動画が165秒で完了しました。
あなたを中心に構築

記載されていない字幕形式や配信方法が必要ですか?チームにお問い合わせください

別の字幕形式、自社ストレージへの配信、カタログにない言語、またはより高い処理能力など、お客様の制作フローに必要な要件とオプションをチームがご案内します。

言語と音声

公開されているカタログにない言語の字幕が必要ですか?ご要望やオプションについて、チームにお気軽にご相談ください。

配信と連携

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

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

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

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

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

字幕APIの利用者

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

LMS(学習管理システム)、カスタマー教育プラットフォーム、クリエイターおよび動画プラットフォーム、ウェビナー・オンラインイベントツール、動画ホスティング・ワークフローSaaS、デジタルアダプションプラットフォーム、ライブコマースなど。あらゆる言語の字幕を動画アップロードの機能として組み込むことができます。

ローカライズ・制作会社

1回のアップロードですべてのクライアント言語のSRTファイルとVTTファイルを配信できます。API経由で字幕の修正を行えば、タイミングを再調整しなくてもファイルが自動的に更新されます。

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

グローバルな小売・Eコマース、多国籍企業、メディア、企業の研修部門。トレーニング動画や製品紹介動画をすべての市場に届け、音声なしで視聴するユーザーにもわかりやすくします。
導入事例

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

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

字幕APIのコード例

各言語の完全なサンプル:動画のアップロード、字幕言語ごとのプロジェクト作成、処理待ちのあと、.srtおよび.vttファイルの保存、またはHTML5プレイヤーへの追加を行います。
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio, urllib.request
from rask_sdk import clients, enums, schemas

LANGS = ["es-mx", "fr-fr", "ja-jp"]

async def subtitle(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)
    # links are presigned for one hour - save the files right away
    urllib.request.urlretrieve(job.translation_srt_path, f"video.{lang}.srt")
    urllib.request.urlretrieve(job.translation_vtt_path, f"video.{lang}.vtt")

async def main():
    client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
    media = await client.create_media_link(data=schemas.MediaCreateLink(link="https://example.com/onboarding.mp4"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)
    await asyncio.gather(*(subtitle(client, media.id, l) for l in LANGS))

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"
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}"}

pid = requests.post(f"{API}/v2/projects", headers=h,
                    json={"video_id": VIDEO_ID, "dst_lang": "de-de"}).json()["id"]
while (p := requests.get(f"{API}/v2/projects/{pid}", headers=h).json())["status"] != "merging_done":
    time.sleep(10)

# translated subtitles: download the files
open("video.de-de.vtt", "wb").write(requests.get(p["translation_vtt_path"]).content)

# original-language captions: build a WebVTT file from the transcript segments
segs = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
cues = [f"{s['start'].replace(',', '.')} --> {s['end'].replace(',', '.')}\n{s['src']['text']}" for s in segs]
open("video.en.vtt", "w").write("WEBVTT\n\n" + "\n\n".join(cues) + "\n")
requests + polling
same-language captions
// no dependencies, Node 18+ global fetch
import { writeFile } from 'node:fs/promises';
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 call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());

const langs = ['es-mx', 'pt-br', 'ko-kr'];
const tracks = await Promise.all(langs.map(async (dst_lang) => {
  let p = await call('POST', '/v2/projects', { video_id: VIDEO_ID, dst_lang });
  while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }
  const file = `subs/${dst_lang}.vtt`;
  await writeFile(file, await ((await fetch(p.translation_vtt_path)).text()));
  return `<track kind="subtitles" srclang="${dst_lang}" src="/${file}">`;
}));
console.log(tracks.join('\n'));   // paste inside your <video> element
fetch, Node 18+
HTML5 track elements
# 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. create the project for one subtitle language
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$VIDEO_ID\", \"dst_lang\": \"it-it\"}" | jq -r .id)

# 3. wait for merging_done
until [ "$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN" | jq -r .status)" = merging_done ]; do
  sleep 10
done

# 4. save both subtitle files
P=$(curl -s https://api.rask.ai/v2/projects/$ID -H "Authorization: Bearer $TOKEN")
curl -s -o video.it-it.srt "$(echo $P | jq -r .translation_srt_path)"
curl -s -o video.it-it.vtt "$(echo $P | jq -r .translation_vtt_path)"
download .srt and .vtt
shell script
<?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']];

foreach (['es-mx', 'tr-tr'] as $lang) {
    $p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
        'video_id' => $videoId, 'dst_lang' => $lang]]));
    while ($p['status'] !== 'merging_done') {
        sleep(10);
        $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
    }
    // presigned links, valid for one hour
    file_put_contents("video.$lang.srt", file_get_contents($p['translation_srt_path']));
    file_put_contents("video.$lang.vtt", file_get_contents($p['translation_vtt_path']));
}
Guzzle 7
plain HTTP
公式SDKはPythonです。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 は、ユーザーに直接表示するのに十分な情報が含まれています。
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">
出力

まずは字幕ファイル、そしてその他のコンテンツも一緒に

完了したプロジェクトには、両方の字幕形式、そのもととなった文字起こしデータ、および吹き替え版のメディアが含まれます。ダウンロードリンクの有効期限は1時間ですので、お早めにファイルを自社ストレージに保存してください。
項目
形式
説明
translation_srt_path
.srt
編集ソフトやほとんどの動画プラットフォームに対応した、対象言語の字幕
translation_vtt_path
.vtt
HTML5の動画再生やWebプレーヤー用のWebVTT字幕
/transcription
JSON
すべてのセグメントの原文、翻訳、話者ラベル、タイムスタンプ
translated_video
MP4
音声付きバージョンも公開する場合の吹き替え動画
translated_audio
WAV
元の音楽や効果音とミックスされた翻訳音声
original_video
MP4
参照用に保存された元のファイル
コントロール

字幕の1行を修正し、その部分だけを再生成する

字幕は文字起こしのセグメントに基づいています。1行のテキストやタイミングを編集して再生成すると、字幕ファイルと吹き替え版が同時に更新されます。料金は変更されたセグメントが対象となり、1回につき1分からの最小利用時間があります。

部分ごとの編集

部分ごとの編集
各プロジェクトでは文字起こしデータが個別のセグメントとして公開されるため、言葉のミスや字幕のタイミングのズレも、1回のパッチリクエストで修正できます。
文字起こしとその部分を取得する
元のテキストを修正すると、AIが再翻訳します
翻訳されたテキストを直接修正して、お好みの表現に保つ
タイムスタンプの調整、部分の追加・削除
話者に割り当てられた音声を変更する

用語集

用語集
用語集を登録しておけば、ブランド名や専門用語をすべての言語の字幕で同じように表示したり、あえて元の言語のまま残したりすることができます。

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

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

対応している動画や音声ファイルをアップロードするか、対応メディアのURLを使用します。ターゲット言語ごとにプロジェクトを作成し、SRTおよびWebVTTファイルをダウンロードします。

動画

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

音声

4種類の形式
.mp3
.wav
.flac
.m4a

利用前の詳細情報

メディアエンドポイントからは、再生時間、ファイルサイズ、ビデオコーデック、フレームレート、解像度、オーディオコーデック、サンプルレート、チャンネルレイアウトが取得できます。プロジェクトは動画の分単位で課金されるため、事前にファイルの検証と費用の見積もりを行ってください。
セキュリティとコンプライアンス

動画コンテンツのセキュリティとコンプライアンス

Brask IncはSOC 2 Type IIを取得し、GDPRに準拠して運営されています。セキュリティの確認にご活用いただけるよう、トラストセンターで稼働状況をリアルタイムで公開しています。

認証

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の比較

別言語の字幕を作成するには、文字起こし、翻訳、タイミング調整、ファイル出力が必要です。同じ結果を得るための2つの方法をご紹介します。
必要なもの
Rask API
パーツを組み合わせた場合
タイムスタンプ付き文字起こし
含まれる
音声文字起こしAPI
他言語での字幕作成
135以上の言語や地域に対応
翻訳APIとタイミング再調整
SRTおよびWebVTT出力
すべてのプロジェクトで両方のフォーマットに対応
自社開発のファイルライター
一貫した用語の使用
用語集
カスタム後処理
1行の修正
修正を1回リクエストして再生成する
すべてのファイルを自分で編集する
同じ動画の吹き替え版
同じプロジェクトに含まれる
音声合成(TTS)ベンダーと自前の音声ミキシング
レート制限
なし
利用するサービスによる制限
動画に焼き込まれた字幕
Raskのウェブアプリで利用可能(APIではまだ未対応)
自前での動画の書き出し
フォント、サイズ、レイアウト
動画プレイヤー側で設定
動画プレイヤー側で設定
よくあるご質問

字幕APIに関するよくある質問

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

Raskには字幕APIがありますか?

APIではどのような字幕フォーマットに対応していますか?

元の言語の字幕を取得することはできますか?

対応している言語は何ですか?

APIで字幕を動画に焼き込むことはできますか?

字幕のフォント、サイズ、レイアウトを変更することはできますか?

字幕には音楽や効果音が説明されていますか?

話者は識別されますか?

字幕のテキストを修正するにはどうすればよいですか?

ダウンロードリンクの有効期限はどのくらいですか?

自分で用意した字幕を使用できますか?

字幕APIの料金はどのように請求されますか?

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

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

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