こんにちは、パレイド技術部の夏目です。
これまでの記事で、Mac に Whisper を入れて音声を文字に起こすところまでは終えました。ただ、いざ動かすと次に出るのは「入れたはいいが、で何に使うのか」という問いです。.txt が一つ出ても、眺めて終わりでは実用とは言えません。
今回は、その文字起こしを字幕・議事録・音声入力という三つの実用途に落とし込むワークフローを整理します。いずれも Mac のローカルだけで完結し、API キーもクラウドも必要としない範囲の話です。導入や高速化の手順は既存の記事に譲り、「使う」段に集中します。
本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。
まず文字起こしの基本(出力フォーマット)
おさらいに最小のコマンドを置きます。openai-whisper なら次の一行で .txt が出ます。導入・高速化の手順はMLX 編などの既存記事を参照してください。
# small モデルで日本語の文字起こし。結果が sample.txt に出る
whisper sample.m4a --model small --language Japanese --output_format txt
ここで効いてくるのが --output_format です。Whisper は文字起こしの結果を複数の形式で書き出せて、用途ごとに最適な形が違います。違いを整理すると次のとおりです。
| 形式 | 内容 | 主な用途 |
|---|---|---|
| txt | 本文テキストだけ | 議事録の素材・LLM への入力 |
| srt | 連番+時刻+テキスト | 動画字幕(汎用) |
| vtt | Web 標準の字幕形式 | YouTube・HTML5 動画 |
| json | セグメントとタイムスタンプ込みの構造データ | 自前の後処理・編集ツール連携 |
--output_format all を渡せば、上の全形式を一度に書き出すこともできます。まず全部出してから用途に合わせて選ぶ、という使い方が手軽です。
字幕を作る(SRT/VTT)
字幕は最も需要の多い用途です。openai-whisper は動画ファイルをそのまま受け取れる(内部で FFmpeg が音声を抽出する)ので、動画から直接 SRT を作れます。
# 動画から直接 SRT 字幕を生成(VTT が欲しければ srt を vtt に)
whisper input.mp4 --model small --language Japanese --output_format srt
whisper.cpp で作る場合は、まず動画から音声を 16kHz・モノラルの WAV に抜き出してから、-osrt(SRT)や -ovtt(VTT)を渡します。依存を増やしたくない・CLI だけで完結させたいときはこちらが軽快です。
# 動画から 16kHz モノラルの WAV を抽出
ffmpeg -i input.mp4 -ar 16000 -ac 1 audio.wav
# whisper.cpp で SRT を出力(-ovtt なら VTT)
whisper-cli -m models/ggml-small.bin -l ja -osrt audio.wav
できた字幕は、YouTube なら .srt / .vtt をそのままアップロードできます。動画に焼き込みたい場合は FFmpeg で合成しますが、焼き込むと後から直せないため、まずは外部字幕で確認するのが安全です。
# SRT を映像に焼き込む(やり直しが効かない点に注意)
ffmpeg -i input.mp4 -vf subtitles=out.srt burned.mp4
議事録にする
会議録音を議事録にする場合、Whisper は句読点をある程度補ってくれますが、そのままでは読みにくい一塊のテキストになりがちです。実用上は「文字起こし → 整形 → 要約」の三段で考えると現実的です。
整形は、句点ごとの改行や見出し付けといった軽い後処理で十分読みやすくなります。要約まで踏み込むなら、.txt をローカル LLM(Ollama で動かす Llama や Qwen 系)に渡すのが、クラウドに音声内容を出さずに済む現実的なルートです。
# 1. txt で文字起こし → 2. 整形・要約はローカルLLMへ渡す
whisper meeting.m4a --model medium --language Japanese --output_format txt
なお「誰がいつ話したか」という話者の区別(話者分離)は Whisper 単体では苦手です。一手間かかる領域なので、本記事では深追いせず、別途まとめた話者分離の記事(pyannote編)に送ります。まずは「全員ぶんを一本に起こして整える」ところまでが、すぐ手に入る議事録の実用ラインです。
長時間音声を分割して回す
1 時間を超えるような長時間音声は、メモリ消費と安定性の観点から分割してから回すのが堅実です。FFmpeg の segment 機能を使えば、再エンコードなしで素早くチャンクに切れます。
# 10分(600秒)ごとに分割。再エンコードしないので一瞬で終わる
ffmpeg -i long.m4a -f segment -segment_time 600 -c copy out_%03d.m4a
# 分割したチャンクをまとめて文字起こし
for f in out_*.m4a; do
whisper "$f" --model small --language Japanese --output_format txt
done
正直なところ、分割の境界で文が途中で切れることはあります。後で結合する前提なら大きな問題にはなりませんが、境界付近の一文だけ目視で確認しておくと安心です。長時間を恒常的に扱うなら、分割と並行して faster-whisper などの高速実装を検討する余地もあります。
音声入力としての Whisper(STT 常駐の実例)
最後に、少し毛色の違う使い方を紹介します。文字起こしは「録音済みの音声を後からテキストにする」のが基本ですが、Whisper はマイク入力をその場でテキスト化する音声入力(STT)としても使えます。
わたしたちは実際に、音声で AI を操作するために whisper.cpp を STT として常駐させています。マイクから拾った声を逐次テキストに変え、それをそのまま AI への指示として渡す構成です。whisper.cpp を選ぶのは、依存が最小で軽く、常駐させても負担が小さいという STT 向きの素性があるためで、導入手順はwhisper.cpp 編にまとめています。
ここでは用途と構成を示すに留めます。リアルタイム処理やストリーミングの深掘りはリアルタイム音声まわりの記事に送ります。キーボードを介さず AI を操作する入口として、Whisper は録音の文字起こしだけに収まらない使い道を持っています。
まとめ
用途別に、入口となる設定だけ一枚に畳んでおきます。Whisper は「入れて終わり」ではなく、出力形式と前後処理を組み合わせて初めて実用になる道具です。
| 用途 | 要点 |
|---|---|
| 字幕 | --output_format srt(または -osrt)で動画から直接 |
| 議事録 | 長時間は分割 → txt → ローカル LLM で整形・要約 |
| 音声入力 | whisper.cpp を STT として常駐 |
どの実装を選ぶか迷っている場合は、4 実装の違いを実測で比較した決定版ガイドで、速度と手軽さのトレードオフを確認できます。



