WhisperXを日本語で試してみた

# WhisperXの紹介動画
こちらの動画を見たので日本語でも試してみました。普通に動きますね。
https://youtu.be/KtAFU_xeHr4

# WhisperXとは
Whisperで書き起こした文章のタイムスタンプを単語単位で求めるソフトウェアです。
https://github.com/m-bain/whisperX

Whisperの書き起こし結果にはsegmentsというタイムスタンプ付きのデータがあるのですが、こちらはあまり細かいタイムスタンプが得られません。文章単位ならよいのですが、文節や単語レベルでのタイムスタンプが欲しい時には使えません。

WhisperXを使うと単語単位のタイムスタンプに変換してくれます。日本語の場合は１文字レベルでのタイムスタンプを求めることができます。

# インストール
Whisperとffmpegのインストールは終わっているとします。

```
pip install git+https://github.com/m-bain/whisperx.git
```


# 実行
本家のサンプルに日本語の指定を足しただけです。指定はしなくても動きます。
```
import whisperx

device = "cuda" 
audio_file = "sample.mp3"

# transcribe with original whisper
model = whisperx.load_model("large", device)
result = model.transcribe(audio_file, language="ja")

# load alignment model and metadata
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)

# align whisper output
result_aligned = whisperx.align(result["segments"], model_a, metadata, audio_file, device)

# 文章単位のタイムスタンプ
for seg in result_aligned["segments"]: # after alignment
    print(seg['start'], ':', seg['end'], ':', seg['text'])

# 文字単位のタイムスタンプ
for seg in result_aligned["word_segments"]: # after alignment
    print(seg['start'], ':', seg['end'], ':', seg['text'])
```

# 結果
今回はYoutubeからVTuber高嶺ルイさんの切り抜き動画の音声を書き起こしています。

```
139.9403734439834 : 149.3999585062241 : みなさんあったかねはいホロライブの規制秘密結社ホロックスの女幹部 高音るいと思うしまーす
...
```

```
120.0 : 122.76 : me
122.76 : 125.76 : me
139.9403734439834 : 140.1207468879668 : み
140.22095435684648 : 140.361244813278 : な
140.4213692946058 : 140.44141078838175 : さ
140.50153526970954 : 140.56165975103733 : ん
140.68190871369293 : 140.86228215767633 : あ
141.10278008298755 : 141.14286307053942 : っ
141.16290456431534 : 141.1829460580913 : た
141.26311203319503 : 141.32323651452282 : か
141.40340248962656 : 142.0447302904564 : ね
142.1449377593361 : 142.2651867219917 : は
142.28522821576763 : 142.42551867219916 : い
142.4455601659751 : 142.48564315352698 : ホ
142.58585062240664 : 142.72614107883817 : ロ
142.74618257261412 : 142.82634854771783 : ラ
142.84639004149378 : 142.88647302904565 : イ
142.90651452282157 : 142.92655601659752 : ブ
142.94659751037344 : 142.9866804979253 : の
143.1670539419087 : 143.18709543568465 : 規
143.30734439834026 : 143.38751037344397 : 制
143.48771784232366 : 143.58792531120332 : 秘
143.60796680497924 : 143.76829875518672 : 密
143.84846473029046 : 144.00879668049794 : 結
144.02883817427386 : 144.08896265560168 : 社
144.18917012448134 : 144.26933609958508 : ホ
144.289377593361 : 144.38958506224066 : ロ
144.4096265560166 : 144.42966804979253 : ッ
144.44970954356847 : 144.4697510373444 : ク
144.54991701244813 : 144.56995850622408 : ス
144.67016597510374 : 144.7703734439834 : の
144.890622406639 : 145.31149377593363 : 女 幹
145.5319502074689 : 146.1933195020747 : 部  
146.3135684647303 : 146.47390041493776 : 高
146.61419087136932 : 146.63423236514524 : 音
146.71439834024898 : 146.83464730290459 : る
146.8546887966805 : 146.97493775933611 : い
147.17535269709543 : 147.27556016597512 : と
147.29560165975104 : 147.315643153527 : 思
147.3356846473029 : 147.35572614107886 : う
147.41585062240665 : 147.53609958506226 : し
147.57618257261413 : 147.95697095435685 : ま
147.99705394190872 : 149.33983402489628 : ー
149.37991701244815 : 149.3999585062241 : す
```