💬

Notebook LM で作成した音声の字幕を作成する(Whisper & Google Colab)

に公開

はじめに

Googole NotebookLM 日本語化対応して盛り上がってますね
私もいくつか試して楽しんでいます

ただ、普通に書き起こしも欲しいな。。?と思ったものの提供されないようでちょっと不便に感じたので、書き起こしを作るものを Google Colab で作成しました

まあ、Whisperでのn番煎じなので、知っているよという人はブラウザバックで良いかとおもいます

準備

どうやらいつからか Google Colab はデフォルトでGPUが指定されなくなった?ようなのでランタイムの変更でT4 GPUなどを選んでGPUを使用する設定にして下さい

以下コマンドが動けばGPUが動いています

!nvidia-smi

必要なライブラリのインストール

Jupyter Notebookは逐次実行できるので、分けています

!pip install -U openai-whisper
!apt update && apt install ffmpeg -y

実行

import whisper
import numpy as np
import os

(必要であれば)Google Driveとの連携を実施
やらなくても一時フォルダに置けます(インスタンスを落とすと消えるので、それが嫌な場合は実行した方が良いかと)

from google.colab import drive
drive.mount('/content/drive')

メイン部分

model = whisper.load_model("large-v3")

# 文字起こしを行いたい音声ファイルのパスを指定します。
audio_path = "/content/drive/MyDrive/MyAudio.wav"

# ファイルが存在するか確認します。
if not os.path.exists(audio_path):
    print(f"エラー: ファイルが見つかりません - {audio_path}")
else:
    print(f"文字起こしを開始します: {audio_path}")
    result = model.transcribe(audio_path, language="ja") # 日本語の場合

    # 結果をファイルに保存する
    output_file = "/content/transcription.txt"
    with open(output_file, "w", encoding="utf-8") as f:
        for segment in result["segments"]:
            start = segment["start"]
            end = segment["end"]
            text = segment["text"].strip()
            f.write(f"[{start:.2f} - {end:.2f}] {text}\n")
    print(f"\n文字起こし結果を保存しました: {output_file}")

print("\n処理が完了しました。")

実行結果はこんな感じで秒数ごとに改行されて出てきます(これは deepwikiにあるレポジトリをNotebookLMに食わせたやつです)

https://deepwiki.com/rasbt/LLMs-from-scratch

[0.00 - 13.80] こんにちは。今日はセバスティアン・ラッシュカさんのBuild a Large Languageモデル、From Scratch、この公式コードリポジトリ、LLMS From Scratchの世界を一緒に見ていきたいと思います。
[14.30 - 20.34] はい。まさに文字通り、ゼロからLLMを組み立てる、そのプロセスを探るという感じですね。
[20.60 - 26.30] ええ、その通りです。このリポジトリは、データの前処理から始まってですね。
[26.30 - 41.90] はい。モデルの心臓部ともいえるアテンション、それから言語を学ぶ事前学習、そして特定のタスクに適応させるファインチューニングまで、LLM開発の全体像を段階的に示してくれるガイドのようなものです。
[42.08 - 44.46] しかもこれ、教育用に作られてるんですよね?
[44.72 - 48.16] そうなんです。だから、特別な機材とか、
[48.34 - 48.82] なくても?
[49.12 - 52.92] 手元にある普通のラップトップで実行できるように考えられているんです。
[52.92 - 54.68] へー、それは嬉しいですね。
[55.18 - 56.28] なんか、LLMの領域…
[56.28 - 57.26] 料理教室みたいな?
[57.48 - 60.36] あはは、そんな感じかもしれませんね。
[60.50 - 63.84] では、早速そのレシピの革新に迫っていきましょうか。

テキストだけ欲しい場合はwith open内の処理を以下に変更して下さい(個人的には改行がなくて読みづらいと感じました。。)

f.write(result["text"])

さいごに

まあ、Googole NotebookLM 側が字幕生成サポートするのがオチな気がしますが、久々にwhisperを動かしたら、v3-largeだと結構文字起こしの精度良い感じなことがわかってよかったです。

ほんと、Googole NotebookLM + Whisper で作成したものを Youtube にあげれば普通にマネタイズできそうですよね。。

以上です。ご覧いただきありがとうございました。

Discussion