Whisperを使った、オーディオファイルからの(無料)テキスト文字起こし
オーディオファイルからテキスト文字起こしをするサービスは検索すればわりと見つかる。有料のものも多い。会議の議事録の文字起こしといった、ビジネス用途向けがほとんどだ。そしてそれらはWebサービス形式(ファイルをアップロードして、解析結果を受け取る)であることが多い。
だが私がやりたいのは長尺のエッチなオーディオドラマやエッチなライブ配信動画の音声から、どのタイミングで何を言っているのかおおまかに調べてタイムスタンプを作ることだ。
こんなエッチな音声ファイルを公共のサーバーにアップロードなんかできない。だからローカルでできることが必須条件。あとやっぱり無料でやりたい。
調べたらWhisperというものを使えば可能らしい。やってみる。
Whisperとは
ChatGPTでおなじみ、Open AI社の作った音声(喋り)解析系ソフト。文字起こし以外のこともできるようだが今回は文字起こしに絞って使う。
Webサービスとgithub版両方あるみたいだがローカルでやりたいので当然github版を選ぶ。ページはこちら→ 。 インストール
Python 3.9.9, PyTorch 1.10.1, コマンドライン版 ffpmegが必要らしい。pythonとffmpegは公式サイトのインストーラーから、pytorchはpipからインストールしておく。やり方は省略。 ffmpeg.exeへのPATHを通すことを忘れないこと。
以下のコマンドでインストール。
無事インストールできるとwhisperというコマンドが使えるようになる。
whisper オプション 解析対象の入力音声ファイル
入力ファイルとオプションの順は前後しても良い。
音声ファイルについて
ffmpegが対応している形式、wav, mp3, ogg, aiff… など多数の音声フォーマットが入力できる。
喋り声の後ろにBGMなどが重なっている場合はステム分離ソフトを使ってあらかじめ分離しておくと精度が上がる。Win用のフリーソフトでは例えば StemRoller(解説)などがある。 そもそも叫び声やら喘ぎ声やらの非言語は正しく認識できなくて当然である。ワタシ的には「このタイミングでなんか言ってる」程度にわかれば良いと割り切って使う。
オプションについて
たくさんあるが、今回の用途で主に使うのはこちら
--model: モデルファイルの指定。large>medium>small>base>tinyの順でファイルサイズがデカく、速度が遅く、解析精度が高い。またそこそこの精度と速度を両立させた turboもある。実行環境がよほど厳しいものでない限り、使うのは turbo, large, medium の3択だと思う。
モデルファイルは「必要になったらダウンロードされる」ため、そのモデルを使った初回の解析のみネットに繋がっている必要がある。2回目以降は直ちに処理される。
--language: 言語の指定。日本語の場合はja。指定しなければ自動判定されるらしい?
languageを指定していても、不明瞭な音声には他言語が混ざることがある。
--output_format: 文字起こし結果のファイル出力形式の指定。txt / vtt /srt /tsv / json / all が指定でき、指定しなければall 扱いになる。各形式はどれもテキストエディタで読める。
txtは内容を文字として取れれば良い人むけで、タイムスタンプがつかない。
vtt/srtは分:秒.ミリ秒形式のタイムスタンプがつく。srtは行番号つき、vttは行番号なし。
tsvもタイムスタンプがつくが、単位がミリ秒なため使いにくい。
jsonはさらに詳細な情報が付属する。他のプログラムで解析したい人向け。
よって「何分何秒に何を喋っている」のか知りたい今回の用途ではsrtが適している。
--output_dir: 文字起こし結果ファイルの出力先フォルダ。指定しなければカレントフォルダ。
以上を総合するとコマンドは次のようになる。(オプションの順番は不問なので見やすさのために入力ファイルを先頭に置いた)
whisper <音声ファイルパス> --model large --output_format srt --language ja --output_dir <出力先フォルダパス>
なおlargeファイルの解析は思ったより時間がかかるため、最初はturboで試すのがいいかも。
解析してわかったこと
不明瞭な音声は解析するごとに内容が変わることがある。
短い時間の中に「んー」「うん」などの無意味な言葉が連続することがある。
一般的な名刺であれば卑猥な語でも意外と出る。
どうやらAIが文脈を判断してなるべく意味が近い内容にまとめようとするみたいで、第一声の解析内容に、続くセリフ内容が引っ張られる傾向がある。
例:最初のセリフを「おやすみなさい」と誤認識したせいで、あとに続く意味のない声が「寝る?」などと睡眠に関係する言葉に置き換えられた。
largeモデルほど、賢いがゆえに全体のセリフに意味を通そうとしてくる。turboのほうが逆に良い結果になるケースもあった。
「指定されたファイルが見つかりません。」が出る場合
解析対象のファイルが確かに存在するのにこのエラーが出る場合、おそらく ffmpeg.exe へのパスが通っていない。PATHの設定を見直しましょう。