@ryoppippi

faster-whisperを使ってYoutubeを高速に文字起こしする方法

20 Apr 2023 ・ 5 min read


はじめに

みなさんは、​Whisper を​使って​文字起こしを​しているでしょうか? Whisper は​ OpenAI が​リリースした​ text2speech の​モデルです。

https://openai.com/research/whisper

この​モデルは​実装を​含めて​公開されているので、​モデルを​軽くしたり、​あらゆる​環境で​動か​したり、といった​試みが​随所で​行われています。

https://github.com/ggerganov/whisper.cpp

https://note.com/sangmin/n/na60c017e72d0

今回は、​つい​先月に​リリースされた、​faster-whisper の​モデルを​使って、​実際に​文字起こしを​してみましょう。

faster-whisper とは

https://github.com/guillaumekln/faster-whisper

  • OpenAI 公式の​モデルを​軽量化、​独自の​最適化に​より、​最大 4 倍の​高速化を​実現
  • 軽いと​評判の​ Whisper.cpp よりも​高速に​動作​(ただしメモリは​若干​多め)
  • Whisper.cpp と​違って、​GPU に​よる​高速化の​恩恵が​受けられる

と​まあかなり​良さそうです。​試してみましょう。

Note

今回紹介する​ faster-whisper も​ whisper.cpp も​開発元は​ OpenAI では​ありません​(混同された​記述を​見かけた​ため追記) あくまでも​ OpenAI の​モデルを​ベースに​改良、​再実装を​おこなった​ものです。

Colab で​実行

と​いっても、​Colab で​動かすだけです。​Colab の​ Notebook は​こちらに​貼って​おきます。

https://github.com/guillaumekln/faster-whisper/discussions/91

https://colab.research.google.com/drive/1G2Z6JtZVhvVLjKFyWZgIUXfJAQ8I8iDy?usp=sharing

https://colab.research.google.com/drive/1OWYJZpKENevnLzzw-Zl8WPkeIkZh_RiD?usp=sharing

まあ​これだけだと​心もとないので、​参考までに​ Python に​よる​コードを​貼って​おきます。

まず​必要な​ライブラリを​入れます。

pip install -U yt-dlp
pip install -U faster_whisper

次に​以下の​コードを​実行。

import subprocess
from faster_whisper import WhisperModel

YOUTUBE_ID = "uXCipjbcQfM" # Youtube ID
AUDIO_FILE_NAME = f"{YOUTUBE_ID}.mp3"

# Download audio from Youtube
def dl_yt(yt_url):
    subprocess.run(f"yt-dlp -x --audio-format mp3 -o {AUDIO_FILE_NAME} {yt_url}", shell=True)

dl_yt(f"https://youtu.be/{YOUTUBE_ID}"

model_size = "large-v2"

# GPU, FP16で実行
model = WhisperModel(model_size, device="cuda", compute_type="float16")
# GPU, INT8で実行
# model = WhisperModel(model_size, device="cuda", compute_type="int8_float16")
# CPU, FP16で実行
# model = WhisperModel(model_size, device="cpu", compute_type="int8")

segments, info = model.transcribe(AUDIO_FILE_NAME, beam_size=5)

print("Detected language '%s' with probability %f" % (info.language, info.language_probability))

for segment in segments:
    print("[%.2fs -> %.2fs] %s" % (segment.start, segment.end, segment.text))

これで​書き​起こしが​できます。 ちなみに、​今回の​例では​ Youtube の​動画を​ダウンロードして​その​音声を​文字起こししていますが、​任意の​音声ファイルを​指定する​ことも​できます。

まとめ

faster-whisper を​用いて、​Youtube の​動画を​文字起こしする​方​法を​紹介しました。 適宜色々​書き換えて、​議事録作成等に​役立てて​下さい!

ちなみに

https://openai.com/blog/introducing-chatgpt-and-whisper-apis

OpenAI は​公式で​ Whisper の​ Web API を​公開しています。 使用方​法は

curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: multipart/form-data" \
  -F model="whisper-1" \
  -F file="@/path/to/file/openai.mp3"

これだけです。 2023/04/20 時点では​ 料金は​ 1 分$0.006(実際には​秒単位での​計算)と​格安なので、​サクッと​使うだけなら​今回紹介した方​法よりも​こちらの​方が​良いかもしれません。

もし以下の​場合は​ faster-whisper を​使うのが​良いでしょう。

  • 外部に​音声データを​送信したくない​場合
  • 25MB 以上の​音声データを​送信したい​場合
  • つ​よつよ GPU を​既に​持っている​場合​(現段階では​電気代を​考慮すると​ローカル実行の​方が​安いが、​今後の​電力値上げ次第で​変わるかもしれない)
  • 何が​なんでも​無料で​使いたい​場合(Colab で​動かす分には​無料なので​)
comment on bluesky / twitter
CC BY-NC-SA 4.0 2022-PRESENT © ryoppippi