音声・動画ファイル向けの音声認識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、または任意の直接リンクからURLを送信します。料金が発生する前に、メディアIDとファイルの詳細情報を取得できます。

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

プロジェクトを作成する

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

POST /v2/projects
3

原稿を確認する

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

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

掲載されていない言語や形式をご希望ですか?当社のチームまでお問い合わせください

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

言語と音声

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

配信と連携

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

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

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

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

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

動画の音声認識APIを利用しているのは誰か

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

学習管理システム(LMS)や顧客教育プラットフォーム、クリエイターおよび動画プラットフォーム、ウェビナーやバーチャルイベントツール、動画ホスティングやワークフローSaaS、デジタル導入支援プラットフォーム、ライブコマメースなど。録画された動画の文字起こし、字幕、翻訳版を製品の機能として追加できます。

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

話者のラベルが付いた原稿をレビュー担当者の最初の下書きとして使用し、APIを通じてセグメントを修正し、同じプロジェクトから字幕、翻訳、吹き替え版を提供します。

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

国際的な小売およびEコマース、グローバル企業、メディアパブリッシャー、企業内大学。録画された研修、ウェビナー、インタビューの文字起こしを行い、すべての市場に向けて字幕や多言語版を公開します。
導入事例

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

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

音声文字変換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
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 は、自社のユーザーにそのまま見せても分かりやすい内容になっています。
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回のパッチリクエストで行えます。
文字起こしとそのセグメントを取得する
元のテキストを修正すると、自動で再翻訳されます
翻訳されたテキストを直接修正して、お好みの表現に調整できます
再生時間の調整、セグメントの追加・削除
話者に割り当てられた音声を変更する

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

用語集による専門用語の管理
トランスクリプトが翻訳される際、用語集を使用することで、ブランド名、固有名詞、専門用語をすべてのバージョンで統一したり、あえて元の言語のままに保ったりすることができます。

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形式の字幕
対象言語が含まれています
ご自身のタイミングデータをもとに作成
吹き替え済みの音声と動画
含まれる
音声合成ベンダーと自前のミキシング
セグメントの修正
1つのパッチリクエスト送信後、再生成を実行
ご自身のコピーを編集して再同期する
利用制限
なし
ご利用のプロバイダの制限に従います
ライブ音声のリアルタイム文字起こし
ストリーミング音声認識APIをご利用ください
最適な設計
文字起こしのみを、最もお得な価格で
専用の音声認識APIなら、コストを抑えられます
音声の長さに応じた料金設定
よくあるご質問

音声認識APIに関するよくある質問

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

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

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

動画なしで音声ファイルのみの文字起こしはできますか?

話者分離(話者の識別)に対応していますか?

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

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

文字起こしの精度はどのくらいですか?

独自の単語や専門用語を追加できますか?

SRTファイルとして文字起こしを取得できますか?

自分で用意した文字起こしデータを使用できますか?

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

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

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

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

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