🗣️

Azureの文字起こし(Speech To Text)関連サービスを検討した

2025/02/01に公開

多少誤字脱字があったとしても、やはり字幕があるとうれしい。
ということで、Azureを使って実験的にやってみようと思った。

しかし箱を開けてみると似たり寄ったりなサービスが多くて、取捨選択にひたすら時間を取られたので概要をまとめました。

サービス一覧

表向きは2つなんですが、実は箱を開けてみると合計6種類あります。

Azure AI Video Indexer

こちらは音声に特化したサービスというよりは、「映像に関連する情報を返してくれるサービスで、その機能の一つに文字起こしが用意されている」もの。
「映像ごとに解析された情報」のことをインデックスという名前で呼んでいる。

Azureが名前に入っているのにAzureのダッシュボードにいるのではなく、別のドメインが用意されている。(こういうことMicrosoftよくやるよね)
公式サイトのリンクが404になっていたり説明がバラバラ[1]だったりするので、ドキュメントが乱雑な印象。

Webサイトから操作できるTrialプラン

Azure AI Video Indexer Webサイト上からもアップロードできる。テストするのにうれしい。

https://www.videoindexer.ai/

Trial扱いで1アカウント2400分まで[1:1]しかアップロードできないので、上限に達したら下に記載したプランに切り替わるのか、そもそも使えなくなるのかは達していないのでわからない。

APIから操作できるTrialプラン

Azure AI Video Indexer Webサイト上とは別に、API呼び出しでアップロードすると別枠でTrialプランがある。
こちらも合計2400分まで[1:2]

https://api-portal.videoindexer.ai/

API経由でアップロードしてもWebサイト上から確認できる。
でもアカウントページから確認できるTrialが利用できる残り時間は減らないので、変な感じ。

従量課金のARMプラン

本来、Azure Portal上で登録すると「ARMアカウント」みたいな属性になるようなので"プラン"と言うべきかと迷いましたが、リージョンが異なるので一応プランということで許してください。
最初ドキュメントにARM APIとか出てきて???ってなったので名前変えてくれないかな

ARMになったとしてもAzure AI Video Indexer Webサイトから操作できるみたい。
Azure Portalで作る際にストレージを選択するので、結果はストレージに入るのか、はたまたAzure AI Video Indexerでしか確認できない領域なのか謎…。
(結局有料版は試していないのでわかりませんでした。)

課金は1分あたりで、文字起こしに絞って利用すると1分あたり0.0126ドル(=1時間あたり0.756ドル)らしい。

https://azure.microsoft.com/ja-jp/pricing/details/video-indexer/

解析結果に含まれる内容によって価格が変わり、音声だけ解析することで価格を安く抑えることもできます。

API呼び出し方法も微妙に変わる(特に最初のアクセストークン取得周り)ようなので、「APIを呼び出す際はTrialプランから何も変えずに移行」はできない模様。

実装例は以下のGitHubリポジトリから確認できる。

https://github.com/Azure-Samples/azure-video-indexer-samples/tree/master/API-Samples/C%23/Paid

Azure AI Speech

こちらは音声に関連するサービスの総称。
音声合成だったり音声翻訳だったり、色々あるがその中に文字起こし(Speech to Text)が用意されている。

基本的に文字起こしだけしかできませんが、1分あたり0.0126ドル(=1時間あたり0.756ドル)なAzure AI Video Indexerと比べて1時間あたり0.18ドル(から)なので圧倒的に安い。

「Text to speech」といってもその中に3種類あってAPIの呼び出し方も変わるので、名前が一緒なだけで全く別物。

ここで言及する料金は2025/01/12時点なので、正確な情報は公式で確認してください。

https://azure.microsoft.com/ja-jp/pricing/details/cognitive-services/speech-services/


リアルタイムトランスクリプション

文字通りリアルタイムで翻訳するのに適した機能。
そのためか、料金としては少しお高めの1時間あたり1ドル。

メリット

当然なのですがリアルタイムという名前なので、遅延なく読み取り結果が返ってきます。
APIの呼び出し時に、offlineではなくrealtimeを指定することで認識結果を随時確認できます。

それと、下2つに比べて有利だなと思うのが

  • 「1行にどれくらい文字数を入れるか」「最大何行にするか」 を決められる
  • 公式でWebVVTを出力するドキュメントが用意されている

があります。
コストは他と比べて高いですが、呼び出し時のパラメーターを調節することで 「結果をそのまま字幕ファイルにする」 ことができます。

APIの呼び出し

下の二種類とは違って基本的に音声をストリーミングしてリアルタイムに行うのがメインに作られている。

なので既にある音声ファイルを渡す際には、APIの呼び出し側で音声のデコード処理を行ってから送るなどをしている模様。
そのため、単純にHTTPのエンドポイントを呼び出すというよりは、SDKを使って呼び出すやり方となる。

https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/how-to-recognize-speech?pivots=programming-language-csharp


ファストトランスクリプション

公式ドキュメントによれば、「リアルタイムトランスクリプション」よりも早く結果が返るみたい[2]です。安いのに。

メリット

後述のバッチトランスクリプションだと30分以上待たされる場合があるようなので、それでは困るときに使えそう。

APIの呼び出し

https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/fast-transcription-create?tabs=locale-specified

公式ドキュメントを読んでもらえればわかるのですが、SDKなどはなく、シンプルにエンドポイントを呼ぶだけで何とかなりそう。
フローがAzure AI Video Indexerに似ているので、結構流用できそう。


バッチトランスクリプション

バッチというけど1ファイルから変換できるので、急いでいない場合はファストトランススクリプションを呼ぶよりもこちらを呼ぶ方がコストが安い。
ただし価格レベルが無料(F0)では利用できないので、テストで試す場合も有料のものを作る必要がある。

メリット

何といっても安い。処理開始まで30分かかることがあっても良いなら1ドル160円の超円安だったとしても1時間あたり30円くらいでできる。
(ドキュメントにはそう書いてあるが、何回か呼んだときはそこまで待たされることはなかった。)

そして認識に利用するモデルを選べる。
これまでのものは全てAzureで用意されているものしか使えませんが、バッチトランスクリプションならOpenAIのWhisperモデルが使えます。
ただしWhisperモデルを使うためにはリージョンが限定されている[3]ので、利用したい人はリソースを作る際にあらかじめ対応したリージョンを選ばないと使えません。

Whisperモデルに限らず、モデル一覧のAPIをたたいてみるとかなりの数が用意されています。
日本語対応に絞っても数十種類あるので、要件に応じて選べる…けどWhisperに切り替えたいとき以外使うときあるかな。

APIの呼び出し

ほぼファストトランスクリプションと変わりません。が、
複数ファイルの処理を前提としているためか

  • 直接ファイルをPOSTできない。(別の場所にアップロードしたURLが必要)
  • 処理状態を取得するとファイルごとにステータスが設定されている。

など微妙に違いはあります。
でも公式ドキュメントにまとまっているのでそれを読めば何とかなりそう。

https://learn.microsoft.com/ja-jp/azure/ai-services/speech-service/batch-transcription

終わりに

同じ名前で事実上中身が違うから「Azure Speech Service使いました!」というのを見ても想像と違うプランを使っていると「??」になるんですよね。
これサービス名それぞれ変えた方がいいと思うんですが。
そもそも機械翻訳のせいかドキュメントでも微妙に名前違うし。

「Azure AI Video Indexer」の結果もそのままWebVVTにできるんですが、区切りが悪くて日本語と相性はイマイチでした。
やっぱりその辺簡潔にいくならAzure AI 音声(a.k.a Azure Speech Service)のリアルタイムの文字起こし(a.k.a ファストトランスクリプション)が楽で早くて良いという感想です。
1文あたりの長さとか、行数とか、すごくよかったです。

今回はすでにある動画に対して処理をしたい要件で、30分早くなっても大差ないので最終的にバッチトランスクリプションでやることにしました。
ただそのあとWebVVTにする処理、どうしようかなぁ。

脚注
  1. 公式が書いてあることがちぐはぐなので、正直何が正解かわからない。
    Webサイトから操作するプラン: こちらは登録したあと残り2400分と表示されているのでそれを採用。
    APIを呼び出すプラン: Azureサイト上up to 40 hours of free indexing for API usersと書いてあるのでそれを採用。
    APIで呼び出すと時間が減らないのでAzureサイト上の記載通り別枠だと認識しているが、公式FAQには共通ともとれる表現がされている。 ↩︎ ↩︎ ↩︎

  2. Azure AI 音声でファスト トランスクリプション API を使用する 「ファスト トランスクリプション API を使用すると、オーディオ ファイルが文字起こしされ、その結果が同期して返されます。これは、リアルタイムよりも高速です。 」 ↩︎

  3. Whisper モデルとは?の末尾参照、「Azure AI Speech 経由の Whisper モデルは、オーストラリア東部、米国東部、米国中北部、米国中南部、東南アジア、英国南部、西ヨーロッパのリージョンで利用できます。」 ↩︎

Discussion