音声および動画ファイル向けの音声文字変換API

録音・録画された音声や動画をアップロードすると、自動言語検出機能により75種類のソース言語に対応し、すべてのセグメントで話者ラベルとタイムスタンプ付きの文字起こしを取得できます。同じプロジェクト内で、字幕や音声吹き替え付きで135以上の言語や地域設定に翻訳することも可能です。
話者ダイアライゼーション
75のソース言語
REST + Python SDK
upload, transcribe, read
OAuth 2.0
# 1. upload an audio or video file by link
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/interview.mp3", "name": "interview"}'

# 2. create the project - speech recognition starts automatically
#    src_lang is optional: leave it out and the language is detected
curl -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"es-mx\"}"
GET /v2/projects/{project_id}/transcription
segments
# Read the transcript: one object per segment
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq '.segments[] | {speaker, start, end, text: .src.text}'
世界中のチームで利用されています
機能一覧

音声文字変換APIが返すすべてのデータ

音声認識は、すべてのRaskプロジェクトの最初のステップです。文字起こしデータは話者ラベルとタイムスタンプが付いたセグメントとして返されるため、同じプロジェクト内でそのまま編集、翻訳、字幕化、音声合成を行えます。

音声および動画ファイルの文字起こし

録音データや動画をアップロードするか、リンクを貼り付けるだけで、APIが音声をセグメントごとにテキストへ変換します。

話者ダイアライゼーション

異なる話者は自動で検出され、各セグメントにはSPEAKER_00のような話者ラベルが付与されます。話者の数が分かっている場合は指定することも、後からラベルを修正することも可能です。

すべてのセグメントのタイムスタンプ

各セグメントにはHH:MM:SS,mmm形式の開始時刻と終了時刻が含まれており、キャプションの作成や、録音内の検索・移動にすぐ利用できます。

75のソース言語

75のソース言語にわたる多言語サポート。ソース言語を指定しない場合は自動検出されるほか、2文字のコードで設定することも可能です。

同じセグメント内での翻訳

すべてのセグメントに原文と翻訳テキストが135以上の言語や地域設定のいずれかで保持されるため、原文と翻訳の行が常に一致した状態を保てます。

srtおよび.vtt形式の字幕

完成したプロジェクトには、文字起こしセグメントのタイミングに合わせたターゲット言語の字幕ファイルが含まれます。キャプション用に別のサービスを利用する必要はありません。

翻訳における専門用語の適用

用語集を使用することで、翻訳時やあえて原文のままにする場合でも、製品名、固有名詞、業界固有の語彙を統一できます。

APIを通じた文字起こしの編集

単語の修正、タイムスタンプの調整、話者の再割り当て、セグメントの追加や削除が可能です。最初からやり直す必要なく、確認作業者が最終的な文字起こしを修正できます。

制限なしで規模を拡大

利用制限、同時実行クォータ、キーごとの制限はありません。音声および動画ライブラリ全体で一括の文字起こしを並行して実行できます。
実際の動作を見る

1つの文字起こしが5つの言語バージョンに変換される様子をご覧ください

同じクリップが、元の背景音をそのまま残した状態で、英語、フランス語、ドイツ語、ポルトガル語、スペイン語で文字起こし、翻訳、音声化されます。
EN flag
En
FR flag
Fr
DE flag
De
PT flag
Pt
ES flag
Es
ワークフロー

音声ファイルから文字起こしを作成するまでの3つのステップ

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

音声または動画をアップロード

マルチパートフォームデータとして音声または動画ファイルを送信するか、YouTube、Googleドライブ、S3、Vimeoなどの直接リンクを投稿してください。料金が発生する前に、メディアIDとファイルのメタデータを確認できます。

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

プロジェクトを作成する

メディアIDをvideo_idとして渡し、翻訳先の言語を指定します。必要に応じて、元の言語や話者の人数も追加してください。すぐに認識が開始されます。

POST /v2/projects
3

文字起こしを確認

翻訳されたメディアの処理が進んでいる間、セグメントの準備ができ次第、すぐに文字起こしを確認できます。プロジェクトが完了したら、字幕やメディアファイルをダウンロードしてください。

GET /v2/projects/{id}/transcription
認識処理は、ライブ音声ではなく、録音・録画された完成済みのファイルに対して行われます。処理時間はファイルの長さ、話者の人数、翻訳先の言語によって異なります。
あなたを中心に構築

リストにない言語やフォーマットが必要ですか?お問い合わせください

リスト外の元言語、ご利用のプラットフォームに対応した文字起こしフォーマット、より高い処理能力、独自の配信方法など、お客様のシステム連携に必要な要件と利用可能なオプションをチームが確認いたします。

言語と音声

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

配信と連携

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

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

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

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

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

動画用音声文字変換APIの活用事例

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

LMSや顧客教育プラットフォーム、クリエイター・動画プラットフォーム、ウェビナー・オンラインイベントツール、動画ホスティングやワークフローのSaaS、デジタルアダプションプラットフォーム、ライブコマースなど。録画された動画に文字起こし、キャプション、翻訳版を追加し、製品の機能として提供できます。

ローカライズ・制作会社

話者ラベル付きの文字起こしを最初の確認用下書きとして使用し、API経由でセグメントを修正。同じプロジェクトから字幕、翻訳、吹き替え版を納品できます。

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

国際的な小売・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

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/interview.mp3"))
    while media.status is enums.MediaStatus.PROCESSING:
        await asyncio.sleep(5)
        media = await client.get_media(media_id=media.id)

    # src_lang omitted: the source language is detected automatically
    job = await client.create_project(data=schemas.ProjectCreate(video_id=media.id, dst_lang="es-mx"))
    while job.status is not enums.ProjectStatus.MERGING_DONE:
        await asyncio.sleep(10)
        job = await client.get_project(project_id=job.id)

    transcript = await client.get_project_transcription(project_id=job.id)
    for seg in transcript.segments:
        print(seg.start, seg.end, seg.speaker, seg.src.text)

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

with open("interview.mp3", "rb") as f:
    media = requests.post(f"{API}/api/library/v1/media", headers=h,
                          params={"kind": "audio"}, files={"data": f}).json()
while media["status"] == "processing":
    time.sleep(5)
    media = requests.get(f"{API}/api/library/v1/media/{media['id']}", headers=h).json()

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

# write the source transcript as an .srt file
segments = requests.get(f"{API}/v2/projects/{pid}/transcription", headers=h).json()["segments"]
with open("interview_en.srt", "w") as out:
    for i, s in enumerate(segments, 1):
        out.write(f"{i}\n{s['start']} --> {s['end']}\n{s['speaker']}: {s['src']['text']}\n\n")
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 call = (method, path, body) => fetch(API + path, { method, headers: h, body: body && JSON.stringify(body) }).then((r) => r.json());

let media = await call('POST', '/api/library/v1/media/link', { link: 'https://example.com/webinar.mp4' });
while (media.status === 'processing') { await sleep(5000); media = await call('GET', `/api/library/v1/media/${media.id}`); }

let p = await call('POST', '/v2/projects', { video_id: media.id, src_lang: 'en', dst_lang: 'de-de' });
while (p.status !== 'merging_done') { await sleep(10000); p = await call('GET', `/v2/projects/${p.id}`); }

const { segments } = await call('GET', `/v2/projects/${p.id}/transcription`);
segments.forEach((s) => console.log(`[${s.start}] ${s.speaker}: ${s.src.text}`));
console.log(p.translation_vtt_path);   // German subtitles for your player
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 a local audio file
MEDIA_ID=$(curl -s -X POST "https://api.rask.ai/api/library/v1/media?kind=audio" \
  -H "Authorization: Bearer $TOKEN" -F "data=@podcast_episode.mp3" | jq -r .id)

# 3. create the project once the media status is ready
ID=$(curl -s -X POST https://api.rask.ai/v2/projects \
  -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"video_id\": \"$MEDIA_ID\", \"dst_lang\": \"fr-fr\"}" | jq -r .id)

# 4. when status is merging_done, read the transcript with speaker labels
curl -s https://api.rask.ai/v2/projects/$ID/transcription -H "Authorization: Bearer $TOKEN" \
  | jq -r '.segments[] | "\(.start) \(.speaker): \(.src.text)"'
local file upload
audio file, multipart
<?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']];

$media = $json($http->post('/api/library/v1/media/link', ['headers' => $h, 'json' => [
    'link' => 'https://example.com/interview.mp3']]));
while ($media['status'] === 'processing') {
    sleep(5);
    $media = $json($http->get("/api/library/v1/media/{$media['id']}", ['headers' => $h]));
}

$p = $json($http->post('/v2/projects', ['headers' => $h, 'json' => [
    'video_id' => $media['id'], 'dst_lang' => 'es-mx']]));
while ($p['status'] !== 'merging_done') {
    sleep(10);
    $p = $json($http->get("/v2/projects/{$p['id']}", ['headers' => $h]));
}

$t = $json($http->get("/v2/projects/{$p['id']}/transcription", ['headers' => $h]));
foreach ($t['segments'] as $s) {
    echo $s['start'], ' ', $s['speaker'], ': ', $s['src']['text'], PHP_EOL;
}
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 は、ユーザーに直接表示するのに十分な情報が含まれています。
Two speakers
GET /v2/projects/{id}/transcription
{"segments": [
  {"speaker": "SPEAKER_00", "start": "00:00:00,320", "end": "00:00:07,316", "status": "done",
   "src": {"text": "Thanks for joining us. Let's start with the new release.", "lang": "en"},
   "dst": {"text": "Gracias por acompañarnos. Empecemos con la nueva versión.", "lang": "es-mx"}},
  {"speaker": "SPEAKER_01", "start": "00:00:07,640", "end": "00:00:11,900", "status": "done",
   "src": {"text": "Sure. The biggest change is the reporting view.", "lang": "en"},
   "dst": {"text": "Claro. El cambio más grande es la vista de reportes.", "lang": "es-mx"}}
]}

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

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

文字起こしセグメント、字幕、翻訳済みメディア

文字起こしエンドポイントからJSONセグメントとして文字起こしを読み込みます。完了したプロジェクトでは、ターゲット言語のSRTおよびVTT形式の字幕ファイル、翻訳済み動画、および対象プランの場合は別トラックのWAV音声として翻訳された音声も取得できます。
項目
形式
説明
segments
JSON
文字起こし:各セグメントの原文、翻訳、話者ラベル、開始時間と終了時間
voiceover
WAV
対象プランでは、背景音のない翻訳された音声のみの取得が可能
translated_audio
WAV
翻訳音声と元の背景音声をミックスしたもの
translation_srt_path
.srt
セグメントのタイミングに合わせたターゲット言語の字幕
translation_vtt_path
.vtt
WEBプレーヤー用のWebVTT形式の字幕
translated_video
MP4
吹き替え付きの翻訳済み動画
コントロール

部分ごとにテキストを修正する

音声認識機能により、最初のテキストドラフトが作成されます。セグメントごとに1回のリクエストで、単語、タイムスタンプ、話者ラベルを修正し、翻訳版を再生成します。再生成は変更されたセグメントに対して課金され、実行ごとに1分の最低料金が適用されます。

部分ごとの編集

部分ごとの編集
すべてのプロジェクトでテキストがアドレス指定可能なセグメントとして公開されるため、最終テキストの修正は1回のパッチリクエストで行えます。
文字起こしとその部分を取得する
元のテキストを修正すると、AIが再翻訳します
翻訳されたテキストを直接修正して、お好みの表現に保つ
タイムスタンプの調整、部分の追加・削除
話者に割り当てられた音声を変更する

用語集

用語集
テキストが翻訳される際、用語集機能によってブランド名、固有名詞、専門用語がすべてのバージョンで統一されるか、意図的に元の言語のまま維持されます。

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

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

ポッドキャスト、インタビュー、録音された通話などの音声ファイル、またはサポートされている形式のビデオを文字起こししたり、URLを送信したりできます。サポートされていないファイルを送信した場合、時間が課金される前にAPIによって拒否されます。

動画

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と、音声認識APIおよび独自パイプラインの比較

音声認識APIは音声をテキストに変換します。そのテキストを字幕、翻訳、吹き替え版にするには、残りの作業をパイプラインで行う必要があります。ここでは、同じ結果を得るための2つの方法を紹介します。
必要なもの
Rask API
パーツを組み合わせた場合
話者ラベル付きのテキスト
含まれる
ほとんどの音声認識APIに含まれる機能
タイムスタンプ
セグメントごと
多くの音声認識APIでは単語ごと
テキストの翻訳
同じプロジェクトで、135以上の言語と地域のオプションに対応
別個の翻訳API
srtおよび.vtt形式の字幕
対象言語に含まれるもの
独自のタイミングデータから作成
吹き替え版の音声とビデオ
含まれる
音声合成(TTS)ベンダーと自前の音声ミキシング
セグメントの修正
修正を1回リクエストして再生成する
自分のコピーを編集して再同期する
レート制限
なし
ご利用のプロバイダーの規定に準じます
ライブ音声のリアルタイム文字起こし
ストリーミング音声認識APIを使用する
専用に設計されています
音声起こしのみを、最もお手頃な価格で
音声認識専用APIの方がコストを抑えられます
音声の処理時間に応じた料金設定
よくあるご質問

音声認識API:よくある質問

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

Raskには音声認識APIがありますか?

どの言語の音声起こしに対応していますか?

動画なしで音声ファイルのみをテキスト化できますか?

はい。MP3、WAV、FLAC、M4A形式の音声ファイル(ポッドキャスト、インタビュー、録音された通話など)をアップロードすれば、動画と同様に音声起こしが可能です。

APIで単語単位のタイムスタンプを取得できますか?

リアルタイムの音声起こしに対応していますか?

音声起こしの精度はどれくらいですか?

カスタム用語や独自の専門用語を追加できますか?

SRTファイルとして音声起こしテキストを取得できますか?

自分で用意した音声起こしテキストを使用できますか?

音声起こしの料金はどのように請求されますか?

無料プランはありますか?

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

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

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