この記事では、Whisperを使って音声ファイルを文字起こしし、その結果をPythonで扱いやすい形に整える方法をまとめます。
対象は、自分で録音した音声、自分の動画、利用許諾のある動画・音声、社内や勉強会など権利関係を確認できる素材を想定しています。YouTube動画を扱う場合も、保存や再配布を目的にするのではなく、許諾済み素材の分析前処理として使う前提で進めます。
この記事でできること
- Whisperで音声ファイルを文字起こしする
- 文字起こし結果をテキストファイルやCSVに保存する
- 長い音声を扱うときの前処理を考える
- 文字起こし結果を要約する前に確認したい点を整理する
- 分析記事に使うときの注意点を押さえる
想定読者
- 音声や動画の内容をテキスト化して分析したい方
- 配信、講義、インタビュー、勉強会などの内容を整理したい方
- YouTube関連データを扱う前処理として文字起こしを使いたい方
- WhisperをPythonから試したい方
利用上の注意
音声データには、著作権、肖像権、プライバシー、サービス規約などが関係することがあります。特に第三者の動画・配信・会話を扱う場合は、文字起こししたテキストをそのまま公開しないよう注意が必要です。
- 自分が権利を持つ音声、または利用許諾のある音声を対象にしてください。
- 文字起こし結果を公開する場合は、原文の長文転載にならないようにしてください。
- 個人名、アカウント名、連絡先、住所などの個人情報が含まれる場合は、公開前に削除または匿名化してください。
- AIによる文字起こしや要約には誤りが含まれるため、重要な判断には原音声や一次情報の確認が必要です。
このサイトでは、文字起こし結果は「内容を理解しやすくするための中間データ」として扱います。分析記事で使う場合も、発言の全文掲載ではなく、傾向や話題の整理に寄せる方針です。
全体の流れ
Whisperを使った文字起こしは、次の流れで進めると整理しやすいです。
- 音声ファイルを用意する
- 必要に応じてffmpegで音声形式をそろえる
- Whisperで文字起こしする
- 結果をテキストやCSVに保存する
- 要約やキーワード抽出などの分析に使う
最初から要約まで一気に自動化するより、まずは文字起こし結果を確認し、必要に応じて修正・分割してから要約に進むほうが扱いやすいです。
事前準備
Python環境
この記事では、PythonからWhisperを実行します。仮想環境を使う場合は、先に環境を作成して有効化しておきます。
python -m venv .venv
.venv\Scripts\activatePowerShellで実行ポリシーにより有効化できない場合は、コマンドプロンプトを使うか、実行ポリシーの設定を確認してください。
ffmpeg
Whisperや音声前処理ではffmpegを使う場面があります。先に次のコマンドで確認しておきます。
ffmpeg -versionffmpegの導入方法は、別記事で整理しています。
ffmpegのインストールとPATH設定(Windows)|音声・動画データ分析の前処理環境を整える
Whisperをインストールする
WhisperをPython環境にインストールします。
pip install -U openai-whisperGPUを使う場合は、PyTorchの環境構築が別途必要になることがあります。まずはCPUで動作確認し、処理時間が長い場合にGPU環境を検討するくらいでよいと思います。
インストール後、次のコマンドでWhisperが実行できるか確認します。
whisper --help音声ファイルを用意する
ここでは、次のような音声ファイルを想定します。
data/input_audio.wav動画ファイルから音声だけを取り出す場合は、ffmpegでWAVに変換しておくと扱いやすいです。
ffmpeg -i input.mp4 -vn -acodec pcm_s16le -ar 16000 -ac 1 data/input_audio.wav-ar 16000 はサンプルレートを16kHzに、-ac 1 はモノラルにそろえる指定です。必ずこの形式でなければならないわけではありませんが、文字起こし用の前処理として扱いやすい形です。
コマンドラインで文字起こしする
まずはコマンドラインから試します。
whisper data/input_audio.wav --language Japanese --model small --output_dir outputs/transcripts実行すると、指定した出力フォルダにテキストや字幕形式のファイルが保存されます。最初は small など軽めのモデルで試し、精度や処理時間を見ながら変更するとよいです。
| モデル | 特徴 | 使いどころ |
|---|---|---|
| tiny / base | 軽いが精度は控えめ | 短い音声で動作確認したいとき |
| small | 速度と精度のバランスが取りやすい | まず試すモデルとして扱いやすい |
| medium / large | 精度は上がりやすいが重い | 重要な音声や長い音声を丁寧に処理したいとき |
モデル選びは、PCの性能、音声の長さ、必要な精度によって変わります。個人的には、まず短い音声で small を試し、固有名詞や専門用語が崩れやすい場合に上位モデルを検討します。
Pythonから文字起こしする
次に、PythonからWhisperを実行します。分析前処理として使う場合は、Python内で結果を受け取れる形にしておくと後続処理につなげやすいです。
from pathlib import Path
import whisper
audio_path = Path("data/input_audio.wav")
output_dir = Path("outputs/transcripts")
output_dir.mkdir(parents=True, exist_ok=True)
model = whisper.load_model("small")
result = model.transcribe(str(audio_path), language="ja")
text = result["text"].strip()
(output_dir / "transcript.txt").write_text(text, encoding="utf-8")
print(text[:500])result["text"] には、全体の文字起こし結果が入ります。まずはテキストファイルに保存して、内容が大きく崩れていないか確認します。
発話区間ごとにCSVへ保存する
Whisperの結果には、発話区間ごとの情報も含まれます。あとで話題の変化や時間帯ごとの傾向を見たい場合は、CSVにしておくと扱いやすいです。
import csv
from pathlib import Path
import whisper
audio_path = Path("data/input_audio.wav")
output_dir = Path("outputs/transcripts")
output_dir.mkdir(parents=True, exist_ok=True)
model = whisper.load_model("small")
result = model.transcribe(str(audio_path), language="ja")
csv_path = output_dir / "segments.csv"
with csv_path.open("w", encoding="utf-8-sig", newline="") as f:
writer = csv.DictWriter(f, fieldnames=["start", "end", "text"])
writer.writeheader()
for segment in result["segments"]:
writer.writerow({
"start": round(segment["start"], 2),
"end": round(segment["end"], 2),
"text": segment["text"].strip(),
})
print(f"saved: {csv_path}")CSVにしておくと、ExcelやGoogle Sheetsでも確認できます。分析用には、全文テキストよりも発話区間ごとのデータのほうが扱いやすい場面があります。
長い音声を扱うときの考え方
長時間の音声をそのまま処理すると、時間がかかったり、途中で失敗したり、要約時に文脈が混ざったりすることがあります。長い音声では、先に分割しておくと扱いやすくなります。
たとえば、10分ごとに音声を分割する場合は次のように実行できます。
ffmpeg -i data/input_audio.wav -f segment -segment_time 600 -c copy data/chunk_%03d.wavただし、無音部分や話題の切れ目を考えずに機械的に分割すると、文の途中で切れることがあります。分析目的なら、多少ざっくり分割してから後で人間が確認するくらいの運用でも十分なことが多いです。
文字起こし結果を要約する前に確認したいこと
文字起こし結果をそのまま要約にかける前に、最低限次の点を確認します。
- 話者名、アカウント名、個人情報が含まれていないか
- 文字起こしの誤認識が多すぎないか
- 専門用語やゲーム名、アプリ名が崩れていないか
- 要約対象として長すぎないか
- 引用ではなく、傾向整理として使える形になっているか
AI要約は便利ですが、元の文字起こしが誤っていると要約もずれます。特に固有名詞、否定表現、数字、日時は確認したほうがよいです。
簡単な要約用プロンプト例
文字起こし結果を要約する場合は、全文をそのまま短くするより、目的を決めて整理すると使いやすくなります。
以下は、許諾済み音声を文字起こししたテキストです。
内容を公開用にそのまま引用するのではなく、分析メモとして整理してください。
出力してほしい内容:
- 主な話題
- 繰り返し出てくる論点
- 判断に使えそうな発言の要旨
- 確認が必要な曖昧な点
注意:
- 個人名やアカウント名は出さない
- 断定しすぎない
- 元の発言と異なる意味に言い換えないこのように、公開文としての要約ではなく、まず分析メモとして整理すると、後から自分の言葉で記事にしやすくなります。
分析記事に使うときの書き方
文字起こし結果を記事に使う場合、全文を載せるよりも、話題の分類や傾向の整理に使うほうが読みやすくなります。
- 「この音声では、主にA・B・Cの話題が多かった」
- 「序盤は導入説明が中心で、中盤以降は具体例が増えた」
- 「固有名詞の誤認識があったため、集計前に手動で補正した」
- 「自動文字起こしのため、細かな表現は原音声と完全には一致しない」
こうした書き方にしておくと、文字起こしの限界を隠さず、かつ読者にとってもデータの扱い方が見えやすくなります。
よくあるエラーと確認ポイント
ffmpegが見つからない
次のようなエラーが出る場合は、ffmpegがPATHに通っていない可能性があります。
FileNotFoundError: [WinError 2] The system cannot find the file specifiedffmpeg -version がPowerShellで動くか確認し、動かない場合はffmpegのPATH設定を見直します。
処理が遅い
CPU環境では、長い音声や大きいモデルの処理に時間がかかります。まずは短い音声で試し、モデルを tiny、base、small の順に変えながら、精度と速度のバランスを確認するとよいです。
文字起こしが崩れる
音声が小さい、BGMが大きい、複数人が同時に話している、専門用語が多い場合は、文字起こしが崩れやすくなります。重要な部分だけ手動で確認する、音声を短く分ける、モデルを変えるなどで改善することがあります。
この記事の位置づけ
この記事は、YouTubeや音声データを分析する前の「文字起こし前処理」にあたる記事です。動画・字幕・チャットなど、YouTube関連データの取得方法全体は次の記事にまとめています。
YouTubeの情報を取得する方法まとめ|公式API・字幕・チャット・文字起こしの使い分け
動画や音声の準備には、次の記事もあわせて確認すると流れがつかみやすいです。
- ffmpegのインストールとPATH設定(Windows)|音声・動画データ分析の前処理環境を整える
- yt-dlpで許諾済み動画の音声・字幕を分析用に取得する方法|Whisper文字起こし前処理
- youtube-transcript-apiでYouTube字幕を取得する方法|Pythonサンプル付き
まとめ
Whisperを使うと、音声ファイルをPythonから文字起こしし、テキストやCSVとして保存できます。音声データを分析する前処理として使う場合は、まず短い音声で動作確認し、結果を確認してから長い音声や要約処理に進むと扱いやすいです。
文字起こし結果は便利な中間データですが、そのまま正解として扱うものではありません。公開記事に使う場合は、権利関係、個人情報、誤認識、長文転載にならないかを確認し、傾向や話題の整理として使うのが安全です。