Whisper APIは、音声ファイルをテキストデータに変換する、非常に便利なAPIです。しかし、その利便性にも関わらず、25MB以上の音声ファイルには対応していないという課題がありました。今回の記事では、これを解決し、どんなサイズの音声ファイルでも文字起こしができるようになった方法を紹介していきます。
下記にコードを載せてあります。詳しくはこちらをご確認ください!
仕組みについて
まず、25MB以下の音声ファイルに関しては、通常通りWhisper APIを使用して文字起こしを行います。これにより、小さな音声ファイルは引き続き簡単に扱えるようになっています。
ここで問題となるのが、25MBを超える音声ファイルです。その対応策として、次の2つの方法が提案されました。
音声ファイルを圧縮してサイズを縮小する
音声ファイルを複数の小さなファイルに分割する
まず、音声ファイルを圧縮することで、25MB以下に縮小することができる場合があります。そして、それでも25MB以下にならない場合は、音声ファイルを分割し、それぞれ個別に文字起こしを行います。
分割された音声ファイルの文字起こし処理が完了したら、最後にそれらのテキストデータを連結します。この方法により、どんな大きさの音声ファイルでも、最終的には適切なサイズに分割され、文字起こしが可能になります。
このようにして、Whisper APIの利点を最大限に活用し、25MBを超える音声ファイルの文字起こしにも対応することができるようになりました。今後は、これらの方法を活用して、さまざまな音声データを簡単にテキスト化し、役立てていくことが期待されます。
後日談
ここまでGPT-4にほとんど書いてもらいました。コードも8割はGPT-4です。実際にかかった時間は記事化も含めて2時間半といったところでしょうか。
せっかくなのでGPT-4を使ってどのようにWhisper 25MB以上でも対応可能なコードを作成したのかについても共有していこうと思います。
※Voice-inと言う音声入力ツールを使っているため、句読点が抜けていたり、誤字が多くなっています。可読性は低くなっていますが、GPT-4はちゃんと意図を汲み取ってくれています。
コードを書いてもらう
音声ファイルを元に文字起こしをしたいと思っていますただ音声ファイルの容量が25 MB を超えると書き起こしすることができないという状況ですこれを解決するために圧縮したり音声ファイルを分割したりする方法があると思うんですが具体的にどのようにやると良いでしょうか教えてください
上記のような音声ファイルの圧縮や分割を Python コードで書くことはできますかステップバイステップで教えてください
圧縮するとどれくらいデータサイズは小さくなりますか例えば1 GB の wav ファイルだとどれくらいのサイズになるのでしょうか
音声ファイルのデータサイズを Python で確認する方法はありますか
今から Google コラボラトリーで音声ファイルを必要に応じて圧縮もしくは分割しその音声ファイルを文字起こしするスクリプトを書いていこうと思っています文字起こしにはウィスパー API というものを利用しようと思っています。できるだけ精度を高めるために圧縮や分割が必要でなければ行えませんまた圧縮の方が優先度が高くそれでも難しいようであれば分割をするという方針でいきたいと思っていますAPI の制約として音声ファイルのデータサイズが25 MB を超えると処理することができませんそのためアップロードされた音声ファイルは25 MB 以下であればそのまま API を利用25 MB 以上であれば必要に応じて圧縮を行いまたそのデータサイズを確認してまだ25 MB を超えているようであれば分割を行って25 MB 以下に全てのファイルは治るように処理をしていきたいと思ってます上記を踏まえてGoogle コラボラトリー上で動く Python のスクリプトをステップバイステップでわかりやすく解説をしながら返してください
あ、Whisper APIは今年の3月に公開されたからモデルは学習していないのだった。。と言うことで公式ページからその部分だけ手で修正する。
すみません、whisper apiはpythonのライブラリでサポートしており、下記のように書けるようです。こちらの形式を採用したいです。 def transcribe_audio(file_path): file = open(f"{file_path}", "rb") transcription = openai.Audio.transcribe("whisper-1", file) return transcription 上記のコードはtextフィールドを考慮していないので修正してください
上記のコードを踏まえて、文字起こしされた出力結果をtxtファイルで書き出しをしてください。また改行があった方が読みやすいので、改行がもし生データに存在しているのであればそれは残しておいてください。
apiからのresponseタイプは下記のようになっているようです。 `{ "text": "Imagine the wildest idea that you've ever had, and you're curious about how it might scale to something that's a 100, a 1,000 times bigger. .... }` 先ほど教えてもらったコードを書いたところ次のようなエラーが出てしまいました。 --------------------------------------------------------------------------- KeyError Traceback (most recent call last) /usr/local/lib/python3.9/dist-packages/openai/openai_object.py in __getattr__(self, k) 58 try: ---> 59 return self[k] 60 except KeyError as err: KeyError: 'strip' During handling of the above exception, another exception occurred: AttributeError Traceback (most recent call last) 1 frames /usr/local/lib/python3.9/dist-packages/openai/openai_object.py in __getattr__(self, k) 59 return self[k] 60 except KeyError as err: ---> 61 raise AttributeError(*err.args) 62 63 def __delattr__(self, k): AttributeError: strip おそらくtextフィールドから取り出さないと、エラーが出てしまうのかなと思っています。ここまでを踏まえてコードを修正してください
記事を書いてもらう
今から note というサービスに記事を書いていこうと思います。考えている内容について話していくので、それをもとに記事を書いていってもらいたいです。良いでしょうか?
今回は文字起こしAPI Whisperの音声ファイルのサイズが25MBを超えてしまうと対応できないという課題に着目した記事になりますこの記事では25 MB 以上の音声ファイルでも文字起こしをできるように対応された行動を紹介していきます対応した内容としては大きくは25 MB以下であれば通常通りウィスパーで対応25 MB 以上であれば音声ファイルを圧縮またそれでも25 MB 以下に治らなければ音声ファイルを分割して開く音声ファイルことに文字起こしを行って最後に文字列を連結するというような手法をとっていますこれによってどれだけ大きな音声ファイルであっても最終的に分割されて一つ一つは文字起こして切るようなサイズになっていくので25 MB 超えてしまっても問題なく文字起こしをすることができます