OpenAI Whisperによる音声・動画ファイルの文字起こし
【概要】OpenAI Whisperを使用して音声・動画ファイルをテキストに変換する。Windows環境での実行手順、プログラムコード、実験アイデアを含む。
事前準備
1. Python 3.12 と Windsurf(AIエディタ)のインストールコマンド
まだインストールしていない場合の手順である(インストール済みの人は実行不要)。
管理者権限で起動したコマンドプロンプト(手順:Windowsキーまたはスタートメニュー > cmd
と入力 > 右クリック > 「管理者として実行」)。で以下を実行
winget install --scope machine --id Python.Python.3.12 -e --silent
winget install --scope machine --id Codeium.Windsurf -e --silent
set "INSTALL_PATH=C:\Program Files\Python312"
echo "%PATH%" | find /i "%INSTALL_PATH%" >nul
if errorlevel 1 setx PATH "%PATH%;%INSTALL_PATH%" /M >nul
echo "%PATH%" | find /i "%INSTALL_PATH%\Scripts" >nul
if errorlevel 1 setx PATH "%PATH%;%INSTALL_PATH%\Scripts" /M >nul
set "NEW_PATH=C:\Program Files\Windsurf"
if exist "%NEW_PATH%" echo "%PATH%" | find /i "%NEW_PATH%" >nul
if exist "%NEW_PATH%" if errorlevel 1 setx PATH "%PATH%;%NEW_PATH%" /M >nul
2. 必要なライブラリのインストール
管理者権限で起動したコマンドプロンプト(手順:Windowsキーまたはスタートメニュー > cmd
と入力 > 右クリック > 「管理者として実行」)。で以下を実行
pip install -U openai-whisper
pip install ffmpeg-python
3. FFmpegのインストール
管理者権限で起動したコマンドプロンプト(手順:Windowsキーまたはスタートメニュー > cmd
と入力 > 右クリック > 「管理者として実行」)。で以下を実行
winget install ffmpeg
プログラムコード
# whisper_transcribe.py
import sys
import whisper
if len(sys.argv) < 2:
print("使い方: python whisper_transcribe.py <動画ファイル名>")
sys.exit(1)
file_name = sys.argv[1]
print(f"処理中のファイル: {file_name}")
# Whisperモデルの読み込み(必要に応じて small や medium に変更)
model = whisper.load_model("medium")
# 文字起こしの実行
result = model.transcribe(file_name)
# SRT形式での出力
for i, seg in enumerate(result["segments"], 1):
# 秒をSRT形式の時間(HH:MM:SS,mmm)に変換
start_seconds = seg['start']
start_hours = int(start_seconds // 3600)
start_minutes = int((start_seconds % 3600) // 60)
start_secs = int(start_seconds % 60)
start_millisecs = int((start_seconds % 1) * 1000)
start_time = f"{start_hours:02d}:{start_minutes:02d}:{start_secs:02d},{start_millisecs:03d}"
end_seconds = seg['end']
end_hours = int(end_seconds // 3600)
end_minutes = int((end_seconds % 3600) // 60)
end_secs = int(end_seconds % 60)
end_millisecs = int((end_seconds % 1) * 1000)
end_time = f"{end_hours:02d}:{end_minutes:02d}:{end_secs:02d},{end_millisecs:03d}"
print(f"{i}")
print(f"{start_time} --> {end_time}")
print(f"{seg['text'].strip()}")
print()
使用方法
- 上記のコードを whisper_transcribe.py として保存する
- コマンドラインで実行する:
python whisper_transcribe.py sample.mp4
モデルサイズの選択と特徴
プログラム内の load_model() で指定するモデルサイズを変更することで、認識精度と処理速度の違いを体験できる。各モデルの特徴は以下の通りである:
- tiny:39MB、低精度だが高速処理が可能
- base:74MB、中程度の精度で高速処理が可能
- small:244MB、中程度の精度で標準的な処理速度
- medium:769MB、高精度で標準的な処理速度
- large:1550MB、最高精度だが低速処理
実行例
処理中のファイル: meeting.mp4
1
00:00:00,000 --> 00:00:03,500
こんにちは、いまから会議を開始します。
2
00:00:03,500 --> 00:00:07,200
まず、前回の議事録の確認から始めたいと思います。
体験・実験のアイデア
- 異なるモデルサイズで同じファイルを処理し、結果を比較する
- 音質の異なる音声ファイルでの認識精度の違いを確認する
- 雑音のある環境での音声認識性能を検証する
- 早口や方言での認識能力を実験する