はじめに
AIのコード生成を使いながら、動画に字幕を付けるアプリを作成中です。
- インターネット接続が必要
- 音声データを外部へ送信する必要がある
- コストがかかる
といった点があるので、今回は「ローカルだけで完結する」ことを目標に作成しました。
LexiVerse Video Captioner
https://github.com/gippol/lexiverse-video-captioner
上の動画はNotebookLMに作ってもらったものです
Microsoft Foundry Local + Whisper を使う
最初は、Microsoft Foundry Local と Whisper を使う構成で試していました。
Whisper自体の文字起こし精度はかなり高く、普通にテキスト化するだけなら十分実用的でした。
ただ、実際に字幕を作ろうとすると問題が発生しました。
字幕には時間情報が必要だった
字幕ファイル(SRTなど)を作るには、
- 何秒から表示するか
- 何秒まで表示するか
というタイムスタンプ情報が必要になります。
しかし、最初に使っていたWhisper系ライブラリでは、取得できるデータの中に時間情報が含まれていないようでした。
これでは、
この文章をいつ表示すればいいのか分からない
という状態になります。\(^o^)/
Whisper.netに変更
そこで途中から、Whisper.net を使う構成へ変更しました。
Whisper.netでは、文字起こし結果と一緒にタイムスタンプ情報も取得できたため、字幕生成との相性がかなり良かったです。
例えば、
- 開始時間
- 終了時間
- 認識したテキスト
をまとめて扱えるので、そのままSRT形式へ変換しやすくなりました。
mp3のPodcastにも使える
開発中に「動画だけじゃなくてmp3にも使えるのでは?」と気づきました。
試しに英語Podcastへ使ってみたところ、聞き取れていなかったところも理解できるようになってラッキーでした。('ω')
そしてWindows 11のLive Captionsに気づく
そんな感じで作っていたのですが、その後、
Windows 11 に「Live Captions」という機能が標準搭載されていることに気づきました。/(^o^)\
すでにOS標準で字幕機能があった
Live Captionsは、
- PC上で再生される音声
- 動画
- 音声配信
などに対してリアルタイムで字幕を付けてくれる機能です。
「えっ、最初から入ってたの!?」となりました。
作ってみて良かったと思いたい
ただ、結果的には作ってみて良かったと思っています。
実際に実装してみると、
- 音声認識
- タイムスタンプ処理
- 字幕フォーマット
- ローカルAI実行
など、かなり理解が深まりました。
また、
- 「字幕を作るには時間情報が重要」
- 「ライブラリによって取得できるデータが違う」
みたいな実践的な知識も得られました。
やっぱり、自分で作ってみると分かることが多いですね。\(^o^)/
おわりに
今回はFoundry Localを使うつもりだったのでWPFで作成したのですが、ひとまず動けばいいかと思って、Bindingを使わずに作ったのは失敗でした。😣
参考リンク:
