音量が小さい音声でも文字起こしできる!Google ColabでWhisperを使った解決方法
背景:NotebookLMでの文字起こしが失敗
音声ファイルをNotebookLMに突っ込んでみたものの、「音声が小さくて文字起こしできない」というエラーが...。
せっかく録音した音声なのに、これでは困りますよね。そこで、Google ColabとOpenAIのWhisperモデルを使って、自分で文字起こしを実装してみました!
解決策:Google Colab + Whisper + 音量正規化
必要なライブラリのインストール
# 必要なライブラリをインストール
!pip install whisper-openai
!pip install pydub
# 必要なモジュールをインポート
import os
import time
from google.colab import files
from pydub import AudioSegment
import textwrap
import whisper
Whisperモデルの読み込み
# Whisperモデルの読み込み(日本語に最適化するため、mediumモデルを使用。必要に応じてlargeに変更可能)
# モデルサイズ: large > medium > small(精度↑、処理時間↓)
print("Whisperモデルを読み込んでいます。しばらくお待ちください...")
model = whisper.load_model("medium")
音声ファイルのアップロード
# 音声ファイルのアップロード
print("日本語の音声ファイルをアップロードしてください。")
uploaded = files.upload()
文字起こし処理(ポイント:音量正規化)
# 文字起こしの実行
for filename in uploaded.keys():
print(f"{filename}を処理中...")
# 音声ファイルの形式を確認し、必要に応じて変換
audio = AudioSegment.from_file(filename)
# 【対応1: 小さな音声を調整】音量を正規化して、音声レベルを均一化
# 音量が小さすぎる場合、この正規化によって認識精度が向上します
print(">> 音量を正規化しています...")
audio = audio.normalize()
wav_filename = filename.rsplit(".", 1)[0] + ".wav"
audio.export(wav_filename, format="wav")
# 文字起こしの実行(処理時間の計測を追加)
start_time = time.time()
# 【対応2: 日本語特化】言語を日本語に明示的に指定("ja"が推奨)
print(">> 文字起こしを開始します...")
result = model.transcribe(wav_filename, language="ja")
end_time = time.time()
# 処理時間の表示
print(f"文字起こし処理時間: {end_time - start_time:.2f}秒")
# 文字起こし結果の整形(日本語向けに調整)
formatted_text = ""
for segment in result["segments"]:
text = segment["text"].strip()
# 日本語の場合、長い行の折り返しは不要な場合が多いため、改行のみとする
formatted_text += text + "\n\n"
# 結果をファイルに保存
output_filename = f"transcription_{filename.rsplit('.', 1)[0]}.txt"
with open(output_filename, "w", encoding="utf-8") as f:
f.write(formatted_text)
print(f"文字起こし結果を {output_filename} に保存しました")
# ファイルのダウンロード
files.download(output_filename)
# 一時ファイルの削除
os.remove(wav_filename)
print("すべての処理が完了しました。")
ポイント解説
1. 音量正規化(audio.normalize())
これが最大のポイント!
audio = audio.normalize()
NotebookLMで文字起こしできなかった原因は「音量が小さすぎる」ことでした。normalize()を使うことで、音声のレベルを均一化し、小さい音声でも認識できるようになります。
2. 日本語の明示的指定
result = model.transcribe(wav_filename, language="ja")
language="ja"を指定することで、Whisperが日本語に最適化された認識を行います。これにより精度が大幅に向上します。
3. mediumモデルの使用
model = whisper.load_model("medium")
モデルサイズは以下から選べます:
-
tiny: 最速だが精度低い -
base: 速くて軽量 -
small: バランス型 -
medium: 高精度(おすすめ) -
large: 最高精度だが処理時間が長い
日本語の場合、medium以上がおすすめです。
結果
音量が小さくて認識できなかった音声ファイルも、このコードで無事に文字起こしできました!
Google Colab / 音声データ_音量小さくてNotebookLMで文字起こしできない時
まとめ
音声文字起こしで困ったときは:
- 音量正規化で音声レベルを調整
- 言語指定で認識精度を向上
- 適切なモデルサイズを選択
Google Colabなら無料で使えるので、ぜひ試してみてください!
参考リンク:
