Whisperを使って素材の自動書き起こし+素材分割 (ローカル実行)

はじめに

みなさんごきげんよう。まいまいです。今回の記事では、今話題の音声認識AI、Whisperを使って素材の音声を自動書き起こしして、個別の音声ファイルに分割するスクリプトを作成したので紹介していきます。

音MADを作るとき、「あのセリフがほしい!」と思うこともあると思います。そんなときにセリフで分割したファイルを用意しておくと便利ですね。

この記事は、そこそこ良いパソコンを持っている人を対象にしています。具体的には数GB以上のVRAMを持ったCUDA対応のGPU搭載パソコンのユーザーです。

ローカルで実行することで、GoogleColabでの制限を気にせずに実行ができ、高精度な出力を追求できるのではと期待します。

実行環境がない人は大人しく後述するGoogleColabを利用してください。

Whisperとは

Whisperとは、OpenAIが開発した、音声認識AIです。いろんなAI開発してる会社のオープンソースの製品です。

自動音声認識ソフトには、GoogleやIBM、Amaoznなどいろいろな会社が開発していますが、このWhisperは、オープンソースで自由に使えることもあり、我々個人ユーザーにはとてもありがたいですね。

また、日本語の認識にも対応しており、日本語も高い精度での認識が可能になっているらしいです。

Web上で実行することも出来る

Whisperをローカルで実行するためには基本的にはCUDA対応のGPUが必要です。持っていない人はWeb上で実行可能なGoogle Colabを利用することになります。

いくつかGoogle Colabのノートは公開されていますが、E-tumさん公開のノートを利用すると良いと思います。

Google Colaboratory
undefined
colab.research.google.com
No Image

使い方等も書かれているのでそれに従ってください。

ローカル環境への導入

さて、ここからローカル環境に関する話になります。導入がそれなりに複雑なので、導入の説明だけで1§使います。

Pythonの導入

[汎用説明記事] Pythonの導入 – YTPMV.info
Pythonの導入方法を完結に説明する記事です。
ytpmv.info
No Image

※リンク先の紹介記事では最新版のPython3.11を利用していますが、記事作成時点では3.11で実行できないようなんで、↓のリンク先から、Python 3.10.x又はPython3.9.xをダウンロードし、導入してください。

Download Python
The official home of the Python Programming Language
www.python.org
No Image

ffmpegの導入

解説を別ページに隔離しています

[汎用説明記事] ffmpegの導入とパスの通し方 – YTPMV.info
他の記事で説明を端折るための記事です。簡潔に説明します。 ffmpegとは、動画や音声のエンコード、デコードを
ytpmv.info
No Image

Gitの導入

次にGitを導入します。↓のリンクからインストーラーを入手し、デフォルト設定でインストール。

https://git-scm.com/downloads

次にGitの導入先フォルダを環境変数に追加します。

[汎用説明記事] ffmpegの導入とパスの通し方 – YTPMV.info
他の記事で説明を端折るための記事です。簡潔に説明します。 ffmpegとは、動画や音声のエンコード、デコードを
ytpmv.info
No Image

上の記事のパスの通し方を参考にして、環境変数に

C:\Program Files\Git\bin
 

などのgit.exeがあるフォルダを追加します。その後PC再起動でGit導入は完了です。

Whisperのインストール

コマンドプロンプトを開いて以下のコマンドを実行します

pip install git+https://github.com/openai/whisper.git
 
visual studio codeのターミナルで実行してます

エラー出てなければ多分OK。

Whisperを実行

正常にWhisperが導入されているか確認するために、一度コマンドプロンプトでWhisperを実行してみます。

まず好きなフォルダに人の会話が入った音声ファイルを用意します。適当なアニメの音声でも切り抜けば良い。

長さは1分くらい?短めがいいです。

ファイルを用意したら以下のコマンドを実行します。

whisper [音声ファイルのパス] --model medium --language Japanese
 

正常に導入ができていれば図のようにモデルのダウンロードが始まり、ダウンロード完了後音声認識が始まります。Largeで実行するとモデルのファイルサイズも大きくなるので根気よく待ちましょう。ちなみに私は3回DL失敗しました。クソ回線め

ブログ用にmediumモデルをDLした画像

問題が出てたら導入に失敗している可能性があります。問題があったらGIGAZINEの記事参考にしてみてください。

音声ファイルのフォルダにsrt, txt, vttの3種ファイルができていれば成功です。

Whisper補助スクリプト

はい。ようやくこの記事の本題です。

Whisperをローカルで(自分のパソコン上で)実行する際の補助用スクリプトを作成しました。

このスクリプトの設計思想は以下のとおりです

  • largeモデルを利用し、可能な限り高精度な認識を行わせる。
  • Whisperで誤認識が起こることを前提に、出力結果を一時ファイルに書き出し修正を容易にする。
  • 動画作成時に映像を持ってこれるように、生成する音声ファイル名に元動画の再生時間を追加。

Github上で配布しています。

GitHub – maimai22015/Whisper-support-scripts
Contribute to maimai22015/Whisper-support-scripts development by creating an account on GitHub.
github.com
No Image

Githubの「Code」と書かれた緑色のボタンからZIPで保存できます

好きな場所に解凍して使ってください。

補助スクリプトの使い方

コマンドプロンプトで1-run-whisper.pyを実行します。

音声を選択し、暫く待つと音声認識の経過が表示されます

largeモデルを利用しているため、かなり時間がかかります。アニメ1話で20~30分くらい掛かってます。

若干認識ミスしていますね

音声認識が終わると、音声ファイルのあるフォルダにsrt, txt, vttができ、実行フォルダにwhisper.csvが生成されます。

上の画像でもわかりますが、Whisperは若干認識をミスすることがあります。なので、出力されたWhisper.csvの中身を確認して誤認識を修正します。

ちなみに、私の環境では「ん」とだけ認識される現象が多発していますが、基本誤認識でした。

誤認識を修正したら、2-split-ffmpeg.pyを実行すると、セリフが分割され、出力されます。


Whisperの音声認識の問題点

Whisperの音声認識ですが、Largeモデルを利用しても誤認識があります。

単語が間違っている場合は修正が容易なのですが、下の画像のように、同じワードが何回も出力される場合があります。

松本人志現象

こうなった場合は、再度実行すると改善される場合があります。上手く行かない場合は該当範囲を別ファイルに書き出して再実行すると良いです。

[未検証]UVRやSpleeterでBGMを除去してから実行すると精度が落ちる?

whisper-raw.csv
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
No Image
whisper-uvr.csv
GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
No Image

上の2つを御覧ください。rawは音声無加工でWhisperを実行した際のファイル。uvrはUVRを利用してBRMを除去してからWhisperを実行した場合のファイルです。

AIボーカル除去・抽出ソフト 「Ultimate Vocal Remover」 の使い方と最良設定について – YTPMV.info
要旨 機械学習を用いたボーカル除去ソフト「Ultimate Vocal Remover」導入方法・使用方法を解
ytpmv.info
No Image

SpleeterでBGM除去を行ってから実行した場合でも認識精度が下がっていました。

多少BGMがあっても除去せずにそのまま認識させたほうが良いのかもしれません。


今回の記事はここまで。私の動画の作風的にあんまり使い所が無いですが。作る動画の作風によっては大活躍しそうなツールですね。以上。ノシ

コメントする?

メールアドレスが公開されることはありません。