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()

使用方法

  1. 上記のコードを whisper_transcribe.py として保存する
  2. コマンドラインで実行する:
    python whisper_transcribe.py sample.mp4
    

モデルサイズの選択と特徴

プログラム内の load_model() で指定するモデルサイズを変更することで、認識精度と処理速度の違いを体験できる。各モデルの特徴は以下の通りである:

実行例

処理中のファイル: meeting.mp4
1
00:00:00,000 --> 00:00:03,500
こんにちは、いまから会議を開始します。

2
00:00:03,500 --> 00:00:07,200
まず、前回の議事録の確認から始めたいと思います。

体験・実験のアイデア