はじめに
動画から文字起こしをしたいとき、毎回手動で聞き取るのは非常に手間がかかります。今回は Whisper と FFmpeg を組み合わせて、動画ファイルから自動で Video Transcript を生成する簡易パイプラインをPythonで実装してみました。
処理の流れはシンプルです。
動画ファイル → FFmpegで音声抽出 → Whisperで文字起こし → テキスト出力
1. 必要なライブラリのインストール
pip install openai-whisper
brew install ffmpeg # Macの場合
Whisperは内部でFFmpegを利用するため、事前にFFmpegがパスに通っている必要があります。
2. 動画から音声を抽出する
まずはFFmpegを使って動画ファイルから音声(wav形式)を取り出します。
import subprocess
def extract_audio(video_path: str, audio_path: str = "output.wav"):
command = [
"ffmpeg", "-i", video_path,
"-ar", "16000", "-ac", "1",
audio_path, "-y"
]
subprocess.run(command, check=True)
return audio_path
サンプリングレートを16kHz、モノラルに指定しているのは、Whisperが想定する入力形式に合わせるためです。
3. Whisperで文字起こしを実行
音声ファイルができたら、Whisperモデルに渡してVideo Transcriptを生成します。
import whisper
def transcribe_audio(audio_path: str, model_size: str = "base"):
model = whisper.load_model(model_size)
result = model.transcribe(audio_path, language="ja")
return result["text"]
model_sizeはtiny〜largeまで選択可能で、精度と処理速度のトレードオフになります。日本語動画の場合、medium以上を使うと認識精度が安定します。
4. パイプラインとして統合する
最後に、動画パスを渡すだけでVideo Transcriptを出力する関数にまとめます。
def video_to_transcript(video_path: str) -> str:
audio_path = extract_audio(video_path)
transcript = transcribe_audio(audio_path)
return transcript
if __name__ == "__main__":
text = video_to_transcript("sample.mp4")
with open("transcript.txt", "w", encoding="utf-8") as f:
f.write(text)
print("Video Transcriptの生成が完了しました。")
これで動画ファイル1本を渡すだけで、音声抽出から文字起こしまでを自動化できます。
おわりに
Whisperは無料でローカル実行できるため、API利用料を気にせずVideo Transcriptを量産できるのが大きな利点です。今回は最小構成でしたが、話者分離(Speaker Diarization)やフィラーワード除去を組み合わせると、さらに実用的なツールに拡張できます。次回はその発展版を紹介する予定です。
