whisper について
Whisperは、音声の文字起こしと英語への音声翻訳に対応するOpenAIの多言語音声認識モデルです。このガイドでは、モデル選択、タイムスタンプ、一括処理、コマンドラインの使い方を説明します。
主な機能
- 01多言語音声の文字起こし
- 02音声の英語翻訳
- 03単語単位のタイムスタンプ
- 04音声ファイルの一括文字起こし
- 05TXT・SRT形式での出力
活用シーン
- 01ポッドキャストや録音の文字起こし
- 02音声からの会議メモ作成
- 03動画の字幕生成
- 04音声内容の英語翻訳
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ kalarislabs/ research-agent-skills --skill whisperインストール後、Claude Code で/whisperを入力して読み込まれたか確認します。
同梱ファイルreferences/languages.md
詳細
Whisper - 高精度音声認識
OpenAI の多言語音声認識モデルです。
Whisper を使用する場面
次の場合に使用します:
- 音声からテキストへの文字起こし(99 言語)
- ポッドキャスト/動画の文字起こし
- 会議メモの自動作成
- 英語への翻訳
- ノイズの多い音声の文字起こし
- 多言語音声の処理
指標:
- 99 言語に対応
- 680,000 時間の音声でトレーニング済み
- MIT ライセンス
代替手段を使用する場合:
- AssemblyAI:マネージド API、話者ダイアライゼーション
- Deepgram:リアルタイムストリーミング ASR
- Google Speech-to-Text:クラウドベース
クイックスタート
インストール
# Requires Python 3.8-3.11
pip install -U openai-whisper
# Requires ffmpeg
# macOS: brew install ffmpeg
# Ubuntu: sudo apt install ffmpeg
# Windows: choco install ffmpeg
基本的な文字起こし
import whisper
# Load model
model = whisper.load_model("base")
# Transcribe
result = model.transcribe("audio.mp3")
# Print text
print(result["text"])
# Access segments
for segment in result["segments"]:
print(f"[{segment['start']:.2f}s - {segment['end']:.2f}s] {segment['text']}")
モデルサイズ
# Available models
models = ["tiny", "base", "small", "medium", "large", "turbo"]
# Load specific model
model = whisper.load_model("turbo") # Fastest, good quality
| モデル | パラメーター | 英語のみ | 多言語 | 速度 | VRAM |
|---|---|---|---|---|---|
| tiny | 39M | ✓ | ✓ | ~32x | ~1 GB |
| base | 74M | ✓ | ✓ | ~16x | ~1 GB |
| small | 244M | ✓ | ✓ | ~6x | ~2 GB |
| medium | 769M | ✓ | ✓ | ~2x | ~5 GB |
| large | 1550M | ✗ | ✓ | 1x | ~10 GB |
| turbo | 809M | ✗ | ✓ | ~8x | ~6 GB |
推奨:速度と品質を重視する場合は turbo、プロトタイピングには base を使用します。
文字起こしのオプション
言語の指定
# Auto-detect language
result = model.transcribe("audio.mp3")
# Specify language (faster)
result = model.transcribe("audio.mp3", language="en")
# Supported: en, es, fr, de, it, pt, ru, ja, ko, zh, and 89 more
タスクの選択
# Transcription (default)
result = model.transcribe("audio.mp3", task="transcribe")
# Translation to English
result = model.transcribe("spanish.mp3", task="translate")
# Input: Spanish audio → Output: English text
初期プロンプト
# Improve accuracy with context
result = model.transcribe(
"audio.mp3",
initial_prompt="This is a technical podcast about machine learning and AI."
)
# Helps with:
# - Technical terms
# - Proper nouns
# - Domain-specific vocabulary
タイムスタンプ
# Word-level timestamps
result = model.transcribe("audio.mp3", word_timestamps=True)
for segment in result["segments"]:
for word in segment["words"]:
print(f"{word['word']} ({word['start']:.2f}s - {word['end']:.2f}s)")
温度のフォールバック
# Retry with different temperatures if confidence low
result = model.transcribe(
"audio.mp3",
temperature=(0.0, 0.2, 0.4, 0.6, 0.8, 1.0)
)
コマンドラインでの使用方法
# Basic transcription
whisper audio.mp3
# Specify model
whisper audio.mp3 --model turbo
# Output formats
whisper audio.mp3 --output_format txt # Plain text
whisper audio.mp3 --output_format srt # Subtitles
whisper audio.mp3 --output_format vtt # WebVTT
whisper audio.mp3 --output_format json # JSON with timestamps
# Language
whisper audio.mp3 --language Spanish
# Translation
whisper spanish.mp3 --task translate
バッチ処理
import os
audio_files = ["file1.mp3", "file2.mp3", "file3.mp3"]
for audio_file in audio_files:
print(f"Transcribing {audio_file}...")
result = model.transcribe(audio_file)
# Save to file
output_file = audio_file.replace(".mp3", ".txt")
with open(output_file, "w") as f:
f.write(result["text"])
リアルタイム文字起こし
# For streaming audio, use faster-whisper
# pip install faster-whisper
from faster_whisper import WhisperModel
model = WhisperModel("base", device="cuda", compute_type="float16")
# Transcribe with streaming
segments, info = model.transcribe("audio.mp3", beam_size=5)
for segment in segments:
print(f"[{segment.start:.2f}s -> {segment.end:.2f}s] {segment.text}")
GPU アクセラレーション
import whisper
# Automatically uses GPU if available
model = whisper.load_model("turbo")
# Force CPU
model = whisper.load_model("turbo", device="cpu")
# Force GPU
model = whisper.load_model("turbo", device="cuda")
# 10-20× faster on GPU
他のツールとの連携
字幕の生成
# Generate SRT subtitles
whisper video.mp4 --output_format srt --language English
# Output: video.srt
LangChain との連携
from langchain.document_loaders import WhisperTranscriptionLoader
loader = WhisperTranscriptionLoader(file_path="audio.mp3")
docs = loader.load()
# Use transcription in RAG
from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())
動画から音声を抽出
# Use ffmpeg to extract audio
ffmpeg -i video.mp4 -vn -acodec pcm_s16le audio.wav
# Then transcribe
whisper audio.wav
ベストプラクティス
- turbo モデルを使用する - 英語では速度と品質のバランスに優れています
- 言語を指定する - 自動検出より高速です
- 初期プロンプトを追加する - 技術用語の認識精度が向上します
- GPU を使用する - 10~20 倍高速になります
- バッチ処理する - より効率的です
- WAV に変換する - 互換性が向上します
- 長い音声を分割する - 30 分未満のチャンクにします
- 言語の対応状況を確認する - 品質は言語によって異なります
- faster-whisper を使用する - openai-whisper より 4 倍高速です
- VRAM を監視する - ハードウェアに合わせてモデルサイズを調整します
パフォーマンス
| モデル | リアルタイム係数(CPU) | リアルタイム係数(GPU) |
|---|---|---|
| tiny | ~0.32 | ~0.01 |
| base | ~0.16 | ~0.01 |
| turbo | ~0.08 | ~0.01 |
| large | ~1.0 | ~0.05 |
リアルタイム係数:0.1 はリアルタイムの 10 倍の速度を意味します
対応言語
対応度の高い主な言語:
- 英語(en)
- スペイン語(es)
- フランス語(fr)
- ドイツ語(de)
- イタリア語(it)
- ポルトガル語(pt)
- ロシア語(ru)
- 日本語(ja)
- 韓国語(ko)
- 中国語(zh)
全リスト:合計 99 言語
制限事項
- 幻覚 - テキストを繰り返したり、捏造したりする場合があります
- 長時間音声の精度 - 30 分を超える音声では精度が低下します
- 話者の識別 - ダイアライゼーションには対応していません
- アクセント - 品質はアクセントによって異なります
- 背景ノイズ - 精度に影響する場合があります
- リアルタイムの遅延 - ライブ字幕には適していません
リソース
- GitHub: https://github.com/openai/whisper ⭐ 72,900+
- 論文: https://arxiv.org/abs/2212.04356
- モデルカード: https://github.com/openai/whisper/blob/main/model-card.md
- Colab: リポジトリで利用可能
- ライセンス: MIT
エージェントの作業手順
- 環境を確認します。 GPU メモリ、モデルのチェックポイントとライセンス、フレームワークのバージョン、入力形式を確認します。
- 入力を明確にします。 データまたはユーザーから、形式、識別子、パラメーターを確認します。結果に影響する値を推測せず、確認してください。
- まず小規模に実行します。 最初に単一のサンプルを低解像度または短い長さで推論します。
- 上記の手順と参考情報を使って、タスク全体を実行します。
- 結果を検証します。 出力を定性的に確認し、タスクの指標で評価します。生成コンテンツのライセンス上の制限も確認します。
- 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、未確認の事項を伝えます。
| 事象 | 対応 |
|---|---|
| 大きな入力でメモリ不足が発生する | 解像度またはシーケンス長を下げる、半精度を使用する、または入力をタイル分割します。 |
| この手順に記載された関数、フラグ、エンドポイントがインストール済みのバージョンに存在しない | インストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して対応し、ユーザーに伝えます。API を捏造してはいけません。 |
| 必須の入力、識別子、パラメーターが曖昧である | ユーザーに確認するか、実行前に仮定を明示します。 |
誠実性に関するルール
- 結果、パラメーター、識別子、引用、統計を決して捏造してはいけません。実行または検証できない場合は、その旨を率直に伝えます。
- 商用利用または公開利用の前に、モデルとデータセットのライセンスを確認します。
- ここに記載されたバージョン固有の情報は古くなっている可能性があるため、インストール済みバージョンの公式ドキュメントと照合します。
- 費用が発生する、共有 GPU やクラウドのクォータを消費する、個人データや患者データを扱う、または取り消せない操作を行う前に確認します。
関連スキル
transformers:Hugging Face Transformers を使用して、Hub モデルの読み込み、パイプライン推論、テキスト生成、NLP、ビジョン、オーディオの Trainer によるファインチューニングを行います。
コメント
Markdown 対応