Pythonのfaster-whisperで文字起こしをする方法

  • URLをコピーしました!

当ブログのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますので、予めご了承ください。

この記事ではWindows11環境のPythonでオーディオファイル(音声ファイル・映像ファイル)の文字起こしをする方法を徹底解説します。

目次

この記事で使用するPythonライブラリ・外部ツール

この記事では以下のPythonライブラリ・外部ツールを使用します。(太文字は必須)

ライブラリ用途ライセンス
faster-whisperWhisperモデルを使った文字起こしMIT
pydub音声ファイルの読み込みMIT
tqdm進捗バーの表示MIT / MPL 2.0
FFmpeg(外部ツール)音声や動画の処理、変換、ストリーミングLGPL 2.1
venv仮想環境構築Python標準モジュール
tkinterGUIファイル選択ダイアログ用Python標準モジュール
datetime日時の取得Python標準モジュール
osファイル操作Python標準モジュール

faster-whisper

WhisperはOpenAI社が開発した汎用音声認識モデルで、多言語対応、ノイズ耐性などに優れています。

faster-whisperは、Whisperを軽量化しつつ処理速度を向上させたモデルで、Guillaume Klein氏が開発したライブラリです。SYSTRAN社では、このライブラリを利用してCTranslate2形式で高速化されたWhisperモデル(例: faster-whisper-large-v3)を提供しています。

Whisperとfaster-whisperの違い

Whisperfaster-whisper
速度普通高速
リソース使用量高い軽量
サポートデバイスCPU/GPUCPU/GPU
精度高いWhisperとほぼ同等
用途高性能環境向け低リソース環境対応
ライセンスApache 2.0MIT

モデルサイズの違い

faster-whisperでは複数のモデルサイズが提供されています。主なモデルサイズは次の通りです。largeモデルはメモリ消費量が多くなるため、できればGPU(CUDA)モードでの利用を推奨しますがCPUモードでも利用可能です。

モデルサイズパラメータ数精度速度対応言語
tiny39M低い最速英語、日本語など99言語(※1)
base74Mやや低い速い英語、日本語など99言語(※1)
small244M普通普通英語、日本語など99言語(※1)
medium769M高いやや遅い英語、日本語など99言語(※1)
large-v1/v21550M最高遅い英語、日本語など99言語(※1)
large-v31550M最高遅い英語、日本語など100言語(※2)

(※1) 英語、日本語、中国語(北京語)、ドイツ語、スペイン語、ロシア語、韓国語、フランス語、ポルトガル語、トルコ語、ポーランド語、カタロニア語、オランダ語、アラビア語、スウェーデン語、イタリア語、インドネシア語、ヒンディー語、フィンランド語、ベトナム語、ヘブライ語、ウクライナ語、ギリシャ語、マレー語、チェコ語、ルーマニア語、デンマーク語、ハンガリー語、タミル語、ノルウェー語、タイ語、ウルドゥー語、クロアチア語、ブルガリア語、リトアニア語、ラテン語、マオリ語、マラヤーラム語、ウェールズ語、スロバキア語、テルグ語、ペルシャ語、ラトビア語、ベンガル語、セルビア語、アゼルバイジャン語、スロベニア語、カンナダ語、エストニア語、マケドニア語、ブルトン語、バスク語、アイスランド語、アルメニア語、ネパール語、モンゴル語、ボスニア語、カザフ語、アルバニア語、スワヒリ語、ガリシア語、マラーティー語、パンジャブ語、シンハラ語、クメール語、ショナ語、ヨルバ語、ソマリア語、アフリカーンス語、オック語、グルジア語、ベラルーシ語、タジク語、シンディー語、グジャラート語、アムハラ語、イディッシュ語、ラオス語、ウズベク語、フェロー語、ハイチ語、パシュトー語、トルクメン語、ノルウェー語(ニーノシュク)、マルタ語、サンスクリット語、ルクセンブルク語、ビルマ語、チベット語、タガログ語、マダガスカル語、アッサム語、タタール語、ハワイ語、リンガラ語、ハウサ語、バシキール語、JW語、スンダ語
(※2) 上記に加え、中国語(広東語)

計算モードの違い

faster-whisperは以下の3つの計算モードをサポートしています。CPU使用時は軽量なint8モード、GPU(CUDA)使用時は通常、float16モードを使用します。更に高精度を求める場合はfloat32モードを使用します。

計算モード精度速度メモリ消費
float32最高遅い高い
float16普通普通普通
int8やや底最速低い

pydub

pydubは、Pythonで音声ファイルを操作するためのライブラリです。音声ファイルの変換、編集、加工を簡単に行えるよう設計されており、音声データを効率的に処理するための便利なツールです。

  1. 音声ファイルの読み込みと保存
    • 様々な形式の音声ファイル(MP3, WAV, AAC, FLAC など)を読み込んで操作可能。
    • 音声ファイルを別の形式に変換して保存できる。
  2. 音声の加工
    • 音量調整、フェードイン・フェードアウト、無音部分の削除など。
  3. 音声の結合や分割
    • 複数の音声ファイルを結合したり、指定した長さやタイミングで分割できる。
  4. 音声のエクスポート
    • 加工した音声を異なるフォーマットで保存。(例: MP3をWAVに変換するなど。)
  5. 波形データへのアクセス
    • 音声データを配列として取得し、カスタム処理が可能。
  6. バックエンドでFFmpegやlibavを使用
    • FFmpegやlibavをバックエンドとして使用し、幅広い音声形式に対応。

FFmpeg

FFmpeg(エフエフエムペグ)は、音声や動画の処理に使用されるオープンソースのマルチメディアツールキットです。動画や音声の変換、編集、ストリーミングなど幅広い用途で利用できます。

  1. マルチプラットフォーム対応
    • Windows、macOS、Linuxなど、主要なOSで利用可能。
    • コマンドラインベースで動作。
  2. 多機能性
    • 動画や音声の変換、トリミング、結合、エンコード、デコード。
    • ストリーミングやライブ配信のサポート。
  3. 広範なフォーマット対応:
    • 動画: MP4, AVI, MKV, MOV など。
    • 音声: MP3, WAV, AAC, FLAC など。
    • コーデック: H.264, H.265, VP9, AAC など。
  4. 高いパフォーマンス:
    • 軽量で高速。
    • GPUエンコーディング(NVIDIA, AMD, Intel)のサポートも可能。

環境構築

STEP
仮想環境の構築

今回の方法は、多くの依存ライブラリがあるため、他プロジェクトのライブラリとバージョンが干渉する可能性があります。そこで、まず仮想環境を構築することをおすすめします。

2024年12月12日現在、faster-whisperの一部の依存ライブラリがPython 3.13に対応していないため、Python 3.12などの環境で実行する必要があります。

インストール済みのPythonのバージョンの確認方法

PowerShellで下記を実行します。

py -0

インストール済みのPythonの一覧が表示されます。「*」のついているバージョンはデフォルトのバージョンになります。

インストール済みのPythonの一覧
Python 3.12の仮想環境構築法

Pythonの公式サイトにアクセスし、「Download」をマウスオーバーし、「Windows」をクリックします。

Pythonの公式サイトにアクセスし、「Download」をマウスオーバーし、「Windows」をクリックします。

「Python 3.12.x」の「Windows installer (64-bit)」をクリックします。

「Python 3.12.x」の「Windows installer (64-bit)」をクリックします。

ダウンロードした実行ファイル(例: python-3.12.8-amd64.exe)を実行し、Pythonをインストールします。「Add python.exe to PATH」のチェックは不要です。

インストールが完了したら、PowerShellで仮想環境を構築するフォルダに移動し、下記コマンドを実行します。

py -3.12 -m venv myenv
STEP
必要なライブラリのインストール

以下のコマンドをPowerShellで実行してください。なお、tqdmは進捗状況のプログレスバーを表示するために必要なライブラリですが、文字起こしするにあたって必須ではないので、インストールしなくても問題ありません。

pip install faster-whisper pydub tqdm
STEP
FFmpegのダウンロード

FFmpeg公式サイトからFFmpegをダウンロードします。ファイルの拡張子は.7zです。7-Zipなどの解凍ソフトを使用してください。

FFmpeg公式サイトからFFmpegをダウンロード
FFmpeg公式サイトからFFmpegをダウンロード
STEP
FFmpegのインストール

解凍したFFmpegを任意の場所に保存します。ここではC:\Program Files (x86)ffmpegフォルダを作成し、保存しています。

FFmpegのインストール

FFmpegの中身は以下のようです。

FFmpegの中身
STEP
FFmpegの環境変数の設定

FFmpegをシステムの環境変数にパスを通します。まずタスクバーで「環境変数」を検索します。そして、「システムの環境変数」をクリックします。

環境変数の編集

「環境変数」をクリックします。

システムのプロパティ

システムの環境変数の中の「Path」を選択し、「OK」をクリックします。

環境変数

「新規」をクリックし、FFmpegの「bin」フォルダまでのパスを入力します。ここでは、下記のとおりです。(保存場所に応じて適宜修正してください。)

入力後、「OK」をクリックします。

C:\Program Files (x86)\ffmpeg\ffmpeg-2024-12-09-git-d21134313f-full_build\bin
環境変数名の編集

環境変数の設定が完了したら、一度PCを再起動します。(環境変数の設定は再起動後、有効化されます。)

STEP
FFmpegインストール確認

PowerShellで以下のコマンドを実行し、FFmpegのバージョン情報が表示されればインストール完了です。

ffmpeg -version
FFmpegインストール確認

コーディング例

下記に、Pythonでオーディオファイルを文字起こしするためのコーディング例を示します。このPythonプログラムは下記を実行します。

  1. オーディオファイル(.wav, .mp3, .m4a, .mp4, .wmv, .avi)をダイアログで選択
  2. faster-whisper(CPU使用int8モード)のモデルを使って文字起こし。(進捗バーで処理の進行状況を可視化)
  3. 文字起こし結果をテキストファイルに保存

なお、faster-whisperのモデルサイズは"large-v3"を指定しています。

モデルサイズを直接指定することで、初回の実行時に自動的にモデルがダウンロードされます。2度目以降はダウンロード不要です。当然のことながら、インターネット回線が必要です。オフライン環境下での実行は後述します。また、計算モードの指定例も後述します。

# 必要なライブラリのインポート
from faster_whisper import WhisperModel
import os
import tkinter.filedialog
from pydub import AudioSegment
import datetime
from tqdm import tqdm

def transcribe_audio_file(file_path, output_folder):
    # 入力ファイルの拡張子を取得
    file_extension = os.path.splitext(file_path)[1].lower()
    file_name = os.path.splitext(os.path.basename(file_path))[0]

    # 音声形式に応じて読み込み方法を設定
    if file_extension in [".wav", ".mp3", ".m4a", ".mp4", ".wmv", ".avi"]:
        # .wmvや.aviファイルに対応するため、すべて from_file を使用
        audio = AudioSegment.from_file(file_path, format=file_extension.strip('.'))
    else:
        raise ValueError("サポートされていない音声形式です。")

    # 音声ファイルの長さを確認
    total_duration = audio.duration_seconds  # 音声全体の長さ
    if total_duration == 0:
        raise ValueError("音声ファイルの読み込みに失敗しました。ファイルが空か、無効な形式です。")

    print(f"音声ファイルの長さ: {total_duration} 秒")
    
    # Whisperを使用して音声ファイルを文字起こし
    print("start:", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

    # Whisperモデルで音声を文字起こし
    transcription = ''
    with tqdm(total=total_duration, desc="Transcribing", unit="seconds") as pbar:
        segments, _ = model.transcribe(file_path, beam_size=5)
        for segment in segments:
            transcription += segment.text + '\n'
            pbar.update(segment.end - segment.start)  # セグメントごとの進捗を更新

    print("Transcription completed.")
    print(transcription)

    # テキストファイルに結果を書き込む
    output_file = os.path.join(output_folder, f"{file_name}_transcription.txt")
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(transcription)

    print(f"テキストファイル {output_file} を保存しました。")
    print("end:", datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))

# 入力ファイルのパスと出力フォルダのパスを指定
filetypes = [("wav files", "*.wav"), ('MP3 Files', '*.mp3'), ('M4A Files', '*.m4a'), ('MP4 Files', '*.mp4'), 
             ('WMV Files', '*.wmv'), ('AVI Files', '*.avi')]
input_file_path = tkinter.filedialog.askopenfilename(filetypes=filetypes, initialdir='./')
if not input_file_path:
    print("ファイルが選択されませんでした。")
    exit()
output_folder_path = "./output_folder"
os.makedirs(output_folder_path, exist_ok=True)

# モデルサイズ
model_size = "large-v3"
model = WhisperModel(model_size, device="cpu", compute_type="int8")

# 音声ファイルを文字変換しテキストファイルに保存
transcribe_audio_file(input_file_path, output_folder_path)

計算モードの記述例

CPU使用int8モード

model_size = "large-v3"
model = WhisperModel(model_size, device="cpu", compute_type="int8")

GPU(CUDA)使用float16モード

model_size = "large-v3"
model = WhisperModel(model_size, device="cuda", compute_type="float16")

GPU(CUDA)使用float32モード

model_size = "large-v3"
model = WhisperModel(model_size, device="cuda", compute_type="float32")

オフライン環境下での実行

Pythonの実行環境がオフラインなどでモデルのダウンロードが出来ない場合は、別PCでモデルをダウンロードしパスを指定することで、実行可能です。

STEP
モデルのダウンロード

ダウンロード元はHugging Faceです。各モデルのリンクを下記に示します。

STEP
「Files and versions」をクリック

「Files and versions」をクリックします。

Hugging Face
STEP
必要なファイルをダウンロード

必要なファイル(.json及び.bin)をダウンロードし、任意のフォルダに保存します。

必要なファイルをダウンロード

ここでは、以下のフォルダにダウンロードしたファイルを保存しています。

C:\py\audio_transcription\models\faster-whisper-large-v3
フォルダにダウンロードしたファイルを保存
STEP
モデルのフォルダパスをPythonで指定

以下のように、モデルを保存したフォルダのパスを指定します。

model_path = r"C:\py\audio_transcription\models\faster-whisper-large-v3"
model = WhisperModel(model_path, device="cpu", compute_type="int8")

まとめ

この記事では、Windows 11環境でPythonを使ってオーディオファイルを文字起こしする方法について解説しました。以下にポイントを整理します。

  • 使用ライブラリ・ツール
    • faster-whisper: 高精度かつ高速な音声認識ライブラリ。
    • pydubやFFmpeg: 幅広い音声フォーマットへの対応と加工を実現。
  • 手順概要
    1. 必要なライブラリを仮想環境にインストール。
    2. FFmpegのインストールと環境変数設定。
    3. faster-whisperを使った音声ファイルの文字起こしスクリプトの作成。
    4. 実行後、結果をテキストファイルに保存。
  • 活用のポイント
    • モデルサイズや計算モードを適切に選択することで、精度や速度のバランスを調整可能。
    • オフライン環境でも事前にモデルをダウンロードすることで実行可能。

今回紹介した方法を応用すれば、多言語対応の音声認識やリアルタイム処理など、さまざまなプロジェクトに応用できます。ぜひ試してみてください!

よかったらシェアしてね!
  • URLをコピーしました!
目次