ブログ/developers·2026年9月13日·2分·執筆:eroqチーム
Scribe Oneで文字起こし:1回のリクエストで音声をテキストに
音声1分ごとに1クレジット、言語の自動検出、8 MBの上限。そして正直な制限(話者分離・タイムスタンプ・字幕ファイルはなし)まで解説。
Scribe Oneは、プラットフォームでいちばん小さなエンドポイントであり、その上に見当違いのものを作ってしまう人がいちばん多いエンドポイントでもあります。音声ファイルを受け取り、そこで話されている言葉を返す。字幕ファイルでも、話者ラベル付きの書き起こしでも、ストリームでもなく、言葉だけを返します。文字起こし機能の作業の大半は、この前提に合わせて自分の側のパイプラインを組むことです。そこでこの記事では、このエンドポイントをありのままに紹介し、それに合ったワークフローを解説します。
リクエストの全体
multipartのPOSTを1回送るだけ。ポーリングするジョブも、Webhookもありません。
curl https://eroq.ai/v1/audio/transcriptions \
-H "Authorization: Bearer $EROQ_API_KEY" \
-F model=eroq-scribe-one \
-F [email protected]
レスポンスの全体はこちらです。
{
"model": "eroq-scribe-one",
"text": "That noise is the reactor missing its coolant flush.",
"usage": { "audio_seconds": 4.2, "credits_spent": 1, "credits_remaining": 882 }
}
fileパートはwavかmp3でなければなりません。それ以外のコンテナは、黙って変換されることなくunsupported_formatで拒否されます。ブラウザで録音する場合は、WebAudioでWAVとして録音するか、アップロード前にクライアント側で再エンコードしてください。レコーダーから出てきたままの.oggや.m4aは弾かれます。パラメーターの一覧は文字起こしのリファレンスにあります。
1分1クレジット
Scribe Oneの料金は、音声1分ごとに1クレジットで、1分に満たない端数は切り上げです。長さは文字起こしの前にファイル自体から読み取られ、レスポンスでは料金と並んでusage.audio_secondsとして返されます。そのため請求額は、送った音声といつでも照らし合わせられます。
実際にはこうなります。
- 4秒のボイスメッセージは1クレジット。59秒でも同じで、61秒なら2クレジットです。
- 1時間の音声は、どう送っても60クレジット。分割して増えるのは端数の切り上げ分だけです。リクエストごとに最後の1分が切り上げられるので、30秒のクリップ20本は20クレジット、同じ10分を1ファイルで送れば10クレジットです。
- ボイスメモは、設計上いちばん安く済むケースです。短いメッセージが並ぶ受信箱なら1件1クレジット。だからこそ、ボイスメモもライブラリのクリップも、とりあえず全部を文字起こしすることが現実的になります。
言語の自動検出と、指定したほうがいい場面
言語は音声から検出されます。必須のパラメーターも、言語ごとに選ぶモデルもないので、多言語の受信箱でも、自分の側で振り分けのロジックを組む必要はありません。
オプションのlanguageフィールドには、ISOコード(en、fr、de)を、制約ではなくヒントとして渡せます。送る価値があるのは、ちょうど2つの場面です。ひとつは、ユーザーのプロフィール設定や、いつも同じ言語のチャンネルなど、文脈から言語がすでにわかっているとき。もうひとつは、短い音声やノイズの多い音声で言語が誤検出されるときです。4語しかないクリップでは検出器の手がかりがほとんどありませんが、ヒントを渡せば無料で解決します。
8 MBの上限と、そこに収める方法
アップロードの上限は8 MBで、ドキュメントによれば圧縮音声でおよそ8分に相当します。これはアーカイブではなく、ボイスメッセージ程度の長さの素材に合わせた意図的な設定で、設計の前提になる制約です。
調整のカギはビットレートです。8 MBは、一般的なポッドキャストのビットレートでおよそ8分。64 kbpsのモノラルに再エンコードすれば、同じ8 MBにその約2倍が収まり、話し声なら目立った劣化もありません。つまり長い録音も、数回のリクエストで済みます。
ffmpeg -i episode.mp3 -c:a libmp3lame -b:a 64k -ac 1 \
-f segment -segment_time 600 part%02d.mp3
64 kbpsモノラルで10分のセグメントは、それぞれ約4.8 MB。上限まで十分な余裕があります。40分のエピソードなら、ちょうど10分のリクエストが4回で、全体で40クレジット。分単位ぴったりのセグメントなら切り上げが発生しないので、1ファイルで送った場合と同じ料金です。
固定長で分割する場合の注意点がひとつあります。切れ目が単語の途中に来ることがあり、そうなると前後の断片がそれぞれ少し間違って文字起こしされます。つなぎ目が重要なら、時間ではなく無音部分で分割するか、セグメントを1〜2秒重ねておき、テキストをつなぐときに重なった部分を取り除きましょう。
文字起こしは、メディア系のレート制限を共有しています。無料のワークスペースではキーごとに毎分6リクエストで、プランに応じた倍率がかかります。分割したエピソードには十分すぎる量ですが、アーカイブをまとめて処理するなら知っておく価値があります。失敗したリクエストは自動で返金されるので、一括処理の途中でネットワークが一瞬途切れても、何もないのに支払うことにはなりません。
自分のナレーションに字幕を付ける
よくあるのは、MP3はあるけれど台本がない、というケースです。自分で録音したものかもしれないし、昔のエピソードかもしれないし、今になってテキストにしたいボイスメモかもしれません。まず文字起こしをして、タイミング合わせは、すでにタイムラインを管理しているツールで行いましょう。
役割分担ははっきりさせておきましょう。期待しすぎてしまいがちなのが、まさにここだからです。Scribe Oneが返すのは、ひとまとまりのテキストです。SRTもVTTも単語ごとのタイミングも返さないので、それだけで字幕をタイムラインに配置することはできません。手に入るのは正確なテキストで、これは字幕ツールがいちばん苦手とし、あなたが手で打つといちばん時間がかかる部分です。それを編集ソフトの字幕アライナー(タイミングの自動調整機能)に貼り付けて、タイミング合わせを任せましょう。
音声を自分で分割すれば、大まかなタイミングは無料で手に入ります。10分の位置から始まるセグメントのテキストは、10分の位置に入るテキストだからです。キュー単位の精度はやはりアライナー頼みですが、チャプターマーカー、番組ノート、検索用のインデックスなら、すでにあるセグメント単位の目印だけで十分です。
逆方向につなげば、ループが閉じます。ユーザーのボイスメッセージを文字起こしし、チャット補完で返答を作り、その返答を/v1/audio/speechで音声に戻すのです。音声で受けて、テキストで考え、音声で返す。これがストリーミング基盤なしの3回の呼び出しで実現します。音声合成の部分と遅延を抑えるコツは、AIキャラクターのためのTTSで解説しています。
制限をはっきり書くと
これらの制限にぶつかるのではなく、これらを前提に設計してください。
- 話者分離なし。レスポンスには話者ラベルも、発話の区切りもありません。誰が話したかを知る必要があるなら、参加者を別々のトラックで録音してそれぞれを文字起こしし、自分の側でタイムスタンプをもとに交互に並べてください。
- 単語単位・セグメント単位のタイムスタンプなし。レスポンスは
textだけです。タイミングは、音声の切り方か、後段のアライナーから得ます。 - 字幕ファイルなし。SRTも、VTTも、JSONのキューリストもありません。
- ストリーミング・リアルタイムの文字起こしなし。完成したファイルに対するリクエストとレスポンスで、ライブのソケットではありません。
- CLIコマンドなし。
eroqCLIが対応しているのは画像、動画、音声合成です。文字起こしはcurlかSDKの呼び出しで行います。
これらはロードマップの予告ではなく、このエンドポイントの今の仕様です。満たされない前提の上に機能を設計するのは、それを知るためのいちばん高くつく方法です。グループ通話で話者ラベルが必要な製品なら、正直な答えはパラメーターではなく、トラックを分けることです。
APIの音声まわりの全体像は、ボイスプラットフォームのページにエンドポイントがまとまっています。音声認識(speech to text)は1段落の用語解説です。アーカイブの一括処理の規模を見積もるなら、料金にクレジットパックがあります。
よくある質問
Scribe Oneの文字起こしの料金はいくらですか?
音声1分ごとに1クレジットで、1分未満は切り上げ、1リクエストあたりの最低料金は1分ぶんです。ボイスメモなら1クレジット、1時間の音声なら60クレジットです。計測された長さはusage.audio_secondsとして返され、失敗したリクエストは自動で返金されます。
文字起こしのエンドポイントが受け付ける音声形式は?
WAVとMP3のみです。それ以外は変換されずにunsupported_formatが返るので、先に自分の側で再エンコードしてください。録音のパイプラインなら、ブラウザでWebAudioを使ってWAVで録音するのが定番の解決策です。
タイムスタンプや話者ラベルは取得できますか?
いいえ。レスポンスに含まれるのは文字起こしのテキストと使用量のブロックだけで、単語ごとのタイミングも、セグメントも、話者分離もありません。大まかなタイミングが必要なら音声をわかっている位置で切り、ラベルが必要なら話者ごとに別トラックを使い、字幕をフレーム単位で正確に合わせるなら後段でアライナーを使ってください。
言語は自動で検出されますか?
はい。言語検出は自動で、パラメーターは不要です。音声が短い・ノイズが多いときや、ユーザーの文脈から言語がすでにわかっているときは、languageにISOコードをヒントとして渡せます。追加料金なしで精度が上がります。
音声ファイルとキーがあれば、curl 1回でテキストが手に入ります。APIキーを取得すれば、お金を使う前に、最初の50クレジットで50分ぶんの音声を文字起こしできます。
この記事で使ったモデルで作ってみましょう。無料の50クレジットで始めるか、全エンジンと料金をご覧ください。