概要
現代社会、YouTubeなどの動画が日常的に浸透してなくてはならないものになっていると思います
僕もよく観ているのですが、少し特殊なのか1つの動画のセリフ・会話を覚えるまで繰り返し観たりします
そこで発生する問題としては「このセリフどの動画だっけ」や「この動画のどの時間だっけ」ということがよく起こります
ゲーム実況の動画だと動画時間が長いので、確かにそうなることは必然かと思います
なので何か対策できないかということで今回の記事です
本題
最終的に収集したい情報としては以下の内容かと思います
- 動画のタイトル
- 音声の内容
- 音声が発せられた時間
YouTubeアプリのように音声が発せられた時間のリンクに飛べるのであれば、一番かと思いますが今回は文字起こしに注目します
文字起こしの方法
Pythonのライブラリとしては以下があるようです
OpenAI Whisper: 最も精度の高い音声認識モデルの一つです。動画から音声を抽出し、Whisperモデルにかけることで高精度な文字起こしが可能です。ローカル環境でも動かすことができ、YouTube動画のURLから直接文字起こしを行うPythonライブラリも存在します。
Google Cloud Speech-to-Text API: Googleのクラウドサービスを利用した音声認識APIです。非常に高い精度と、多言語対応が強みです。
精度についてはOpenAI Whisper、リアルタイム性にはGoogle Cloud Speech-to-Text APIのような印象を受けました
料金についてはローカル利用であればOpenAI Whisperは無料です
ほかにもSpeechRecognition、Mozilla DeepSpeechなどもあるそうですが、今回はOpenAI Whisperを使用してみようと思います
OpenAI Whisperでの文字起こし
OpenAI Whisperは、内部でPyTorchやFFmpegといったライブラリに依存していので、これらを事前にインストールしておきます
pip install torch torchvision torchaudio
brew install ffmpeg
上記のインストールが完了したら、OpenAI Whisperを実際にインストールします
pip install openai-whisper
インストール完了後に音声ファイルと以下のコードを用意して実行します
import whisper
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
# モデルのロード
model = whisper.load_model("medium")
# 音声ファイルの文字起こし
result = model.transcribe("任意の音声ファイルパス")
# 結果の表示
print(result["text"])
# 詳細な結果の表示
for segment in result["segments"]:
print(f"開始時間: {segment['start']:.2f}秒")
print(f"終了時間: {segment['end']:.2f}秒")
print(f"テキスト: {segment['text']}")
print("---")
アウトプット
例えばで実行してみたものが以下になります
【歌】必ず手に入れたいものは 誰にも知られたかない100ある甘そうな話なら 一度は触れてみたいさ勇気な愛だと騒ぎ立たずに 騒ぎになればいい掴んだ拳を使えずに 言葉を無くしてないかい傷つけられたら牙を剥け 自分をなくさむために今から一緒に 俺から一緒に 殴りに行こうかやややややや【歌】いっそ激しく切ればいい 丸い刃は罠を切りたい後に残る傷だとは 無理には隠せはしない両手流さた後 触り立たずに その目を開ければいい生きることは悲しいかい 信じる言葉がないかいわずかな力が沈まる限り 涙はいつも降り切れる今からそいつを 壁からそいつを 殴りに行こうかややややや【歌】海に潮をかかった 夏との季節シャツを脱ぐように 強く強く突き出すように胸に寄る潮を 縛った 夏との季節シャツを脱ぐように 強く強くあららららららややややややややややややややややややややややややややややややや
開始時間: 0.00秒
終了時間: 17.00秒
テキスト: 【歌】
---
開始時間: 17.00秒
終了時間: 25.00秒
テキスト: 必ず手に入れたいものは 誰にも知られたかない
---
開始時間: 26.00秒
終了時間: 33.00秒
テキスト: 100ある甘そうな話なら 一度は触れてみたいさ
---
開始時間: 34.00秒
終了時間: 42.00秒
テキスト: 勇気な愛だと騒ぎ立たずに 騒ぎになればいい
<省略>
はい、こんな感じで出力されました
かなり良い精度な気がします、恐ろしいです
ほかにもモデルの選択やオプションなどあり、まだまだ精度高くできそうでした
Appendix
巷で噂のGeminiとかでできるのでは?と思ったので、試しにGeminiでYouTubeの動画を文字起こししてもらったのですが、字幕機能が無い動画については文字起こしができないようでした
おわりに
ということで動画音声ファイルから文字起こしをしてみたという内容でした
新たに学習させる必要がなく、こんなにも手軽に音声ファイルから文字起こしが可能になるのは非常に恐ろしいと思いました