📣

OpenAIのWhisper APIを使って英語音声を文字起こしする

2023/03/19に公開

OpenAIの "Whisper"という Speech to text の最新モデルがAPI経由で利用可能になったというニュースを聞いたので、早速試してみました。

APIドキュメント
https://platform.openai.com/docs/guides/speech-to-text

Whisperモデルの紹介
https://openai.com/research/whisper

2023.3時点ではまだβ版のようです。

OpenAIでアカウントを作ってAPIキーを取得

説明は省略します。

コードを書く

コマンドラインで音声ファイルを受け取って、openaiのAPIを叩き、文字起こし結果を標準出力に吐くプログラムを書きます。

whisper.sh

#!/bin/bash
FILE=$1
curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F language="en" \
  -F response_format="text" \
  -F model="whisper-1" \
  -F file="@$FILE"

response_formatオプションを指定しない場合はjsonで出力されます。このjsonは {"text": "に文字起こし結果"}な構造になっていてあまり嬉しみがないので、ここではresponse_format="text" オプションを渡してtext形式出力を指定しています。

他にもいろいろなオプションがあるので試してみるとよいと思います。

https://platform.openai.com/docs/api-reference/audio/create#audio/create-response_format

音声素材を探す

適当な音声素材はないかと New York Timesのポッドキャスト"The Daily"から最新エピソードをダウンロードしてみました。

https://www.nytimes.com/2023/03/17/podcasts/the-daily/silicon-valley-bank-crisis-federal-reserve.html

長い音声ファイルを分割して使う

ダウンロードした音声ファイルを食わせてみたら、ファイルサイズ上限(25 MB)に引っ掛かってエラーになったので、ffmpegを使って分割してみます。

長い音声ファイルを3分ごとに分割

$ ffmpeg -i ./the-daily.mp3 -f segment -segment_time 180 -c copy the-daily-%03d.mp3

実行してみる

取得したAPIキーを環境変数OPENAI_API_KEYにセットします。
文字起こし結果は改行なしでツメツメになっていて見づらいので、'.' で改行します。

$ export OPENAI_API_KEY="sk-xxxx"
$ ./whisper.sh the-daily-000.mp3 |  gsed -e 's/\. /\.\n/g'

結果

ぱっと見た感じほぼ100%の精度が出ているのではないでしょうか。すごい!

他社のSpeech to textを試したことがないので比較はできないですが、十分実用的だと感じました。
あらゆるポッドキャスト(に限らず音声素材)の文字起こしが自動生成できると考えると、夢が広がりますね。

Discussion