当ブログのコンテンツ・情報について、できる限り正確な情報を提供するように努めておりますが、正確性や安全性を保証するものではありません。
当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますので、予めご了承ください。
Pythonのfaster-whisperで文字起こしをする方法
この記事ではWindows11環境のPythonでオーディオファイル(音声ファイル・映像ファイル)の文字起こしをする方法を徹底解説します。
この記事で使用するPythonライブラリ・外部ツール
この記事では以下のPythonライブラリ・外部ツールを使用します。(太文字は必須)
ライブラリ | 用途 | ライセンス |
---|---|---|
faster-whisper | Whisperモデルを使った文字起こし | MIT |
pydub | 音声ファイルの読み込み | MIT |
tqdm | 進捗バーの表示 | MIT / MPL 2.0 |
FFmpeg(外部ツール) | 音声や動画の処理、変換、ストリーミング | LGPL 2.1 |
venv | 仮想環境構築 | Python標準モジュール |
tkinter | GUIファイル選択ダイアログ用 | Python標準モジュール |
datetime | 日時の取得 | Python標準モジュール |
os | ファイル操作 | Python標準モジュール |
faster-whisper
WhisperはOpenAI社が開発した汎用音声認識モデルで、多言語対応、ノイズ耐性などに優れています。
faster-whisperは、Whisperを軽量化しつつ処理速度を向上させたモデルで、Guillaume Klein氏が開発したライブラリです。SYSTRAN社では、このライブラリを利用してCTranslate2形式で高速化されたWhisperモデル(例: faster-whisper-large-v3)を提供しています。
Whisperとfaster-whisperの違い
Whisper | faster-whisper | |
---|---|---|
速度 | 普通 | 高速 |
リソース使用量 | 高い | 軽量 |
サポートデバイス | CPU/GPU | CPU/GPU |
精度 | 高い | Whisperとほぼ同等 |
用途 | 高性能環境向け | 低リソース環境対応 |
ライセンス | Apache 2.0 | MIT |
モデルサイズの違い
faster-whisperでは複数のモデルサイズが提供されています。主なモデルサイズは次の通りです。largeモデルはメモリ消費量が多くなるため、できればGPU(CUDA)モードでの利用を推奨しますがCPUモードでも利用可能です。
モデルサイズ | パラメータ数 | 精度 | 速度 | 対応言語 |
---|---|---|---|---|
tiny | 39M | 低い | 最速 | 英語、日本語など99言語(※1) |
base | 74M | やや低い | 速い | 英語、日本語など99言語(※1) |
small | 244M | 普通 | 普通 | 英語、日本語など99言語(※1) |
medium | 769M | 高い | やや遅い | 英語、日本語など99言語(※1) |
large-v1/v2 | 1550M | 最高 | 遅い | 英語、日本語など99言語(※1) |
large-v3 | 1550M | 最高 | 遅い | 英語、日本語など100言語(※2) |
(※1) 英語、日本語、中国語(北京語)、ドイツ語、スペイン語、ロシア語、韓国語、フランス語、ポルトガル語、トルコ語、ポーランド語、カタロニア語、オランダ語、アラビア語、スウェーデン語、イタリア語、インドネシア語、ヒンディー語、フィンランド語、ベトナム語、ヘブライ語、ウクライナ語、ギリシャ語、マレー語、チェコ語、ルーマニア語、デンマーク語、ハンガリー語、タミル語、ノルウェー語、タイ語、ウルドゥー語、クロアチア語、ブルガリア語、リトアニア語、ラテン語、マオリ語、マラヤーラム語、ウェールズ語、スロバキア語、テルグ語、ペルシャ語、ラトビア語、ベンガル語、セルビア語、アゼルバイジャン語、スロベニア語、カンナダ語、エストニア語、マケドニア語、ブルトン語、バスク語、アイスランド語、アルメニア語、ネパール語、モンゴル語、ボスニア語、カザフ語、アルバニア語、スワヒリ語、ガリシア語、マラーティー語、パンジャブ語、シンハラ語、クメール語、ショナ語、ヨルバ語、ソマリア語、アフリカーンス語、オック語、グルジア語、ベラルーシ語、タジク語、シンディー語、グジャラート語、アムハラ語、イディッシュ語、ラオス語、ウズベク語、フェロー語、ハイチ語、パシュトー語、トルクメン語、ノルウェー語(ニーノシュク)、マルタ語、サンスクリット語、ルクセンブルク語、ビルマ語、チベット語、タガログ語、マダガスカル語、アッサム語、タタール語、ハワイ語、リンガラ語、ハウサ語、バシキール語、JW語、スンダ語
(※2) 上記に加え、中国語(広東語)
計算モードの違い
faster-whisperは以下の3つの計算モードをサポートしています。CPU使用時は軽量なint8モード、GPU(CUDA)使用時は通常、float16モードを使用します。更に高精度を求める場合はfloat32モードを使用します。
計算モード | 精度 | 速度 | メモリ消費 |
---|---|---|---|
float32 | 最高 | 遅い | 高い |
float16 | 普通 | 普通 | 普通 |
int8 | やや底 | 最速 | 低い |
pydub
pydubは、Pythonで音声ファイルを操作するためのライブラリです。音声ファイルの変換、編集、加工を簡単に行えるよう設計されており、音声データを効率的に処理するための便利なツールです。
- 音声ファイルの読み込みと保存
- 様々な形式の音声ファイル(MP3, WAV, AAC, FLAC など)を読み込んで操作可能。
- 音声ファイルを別の形式に変換して保存できる。
- 音声の加工
- 音量調整、フェードイン・フェードアウト、無音部分の削除など。
- 音声の結合や分割
- 複数の音声ファイルを結合したり、指定した長さやタイミングで分割できる。
- 音声のエクスポート
- 加工した音声を異なるフォーマットで保存。(例: MP3をWAVに変換するなど。)
- 波形データへのアクセス
- 音声データを配列として取得し、カスタム処理が可能。
- バックエンドでFFmpegやlibavを使用
- FFmpegやlibavをバックエンドとして使用し、幅広い音声形式に対応。
FFmpeg
FFmpeg(エフエフエムペグ)は、音声や動画の処理に使用されるオープンソースのマルチメディアツールキットです。動画や音声の変換、編集、ストリーミングなど幅広い用途で利用できます。
- マルチプラットフォーム対応
- Windows、macOS、Linuxなど、主要なOSで利用可能。
- コマンドラインベースで動作。
- 多機能性
- 動画や音声の変換、トリミング、結合、エンコード、デコード。
- ストリーミングやライブ配信のサポート。
- 広範なフォーマット対応:
- 動画: MP4, AVI, MKV, MOV など。
- 音声: MP3, WAV, AAC, FLAC など。
- コーデック: H.264, H.265, VP9, AAC など。
- 高いパフォーマンス:
- 軽量で高速。
- GPUエンコーディング(NVIDIA, AMD, Intel)のサポートも可能。
環境構築
今回の方法は、多くの依存ライブラリがあるため、他プロジェクトのライブラリとバージョンが干渉する可能性があります。そこで、まず仮想環境を構築することをおすすめします。
2024年12月12日現在、faster-whisperの一部の依存ライブラリがPython 3.13に対応していないため、Python 3.12などの環境で実行する必要があります。
インストール済みのPythonのバージョンの確認方法
PowerShellで下記を実行します。
py -0
インストール済みのPythonの一覧が表示されます。「*」のついているバージョンはデフォルトのバージョンになります。
Python 3.12の仮想環境構築法
Pythonの公式サイトにアクセスし、「Download」をマウスオーバーし、「Windows」をクリックします。
「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
以下のコマンドをPowerShellで実行してください。なお、tqdmは進捗状況のプログレスバーを表示するために必要なライブラリですが、文字起こしするにあたって必須ではないので、インストールしなくても問題ありません。
pip install faster-whisper pydub tqdm
解凍したFFmpegを任意の場所に保存します。ここではC:\Program Files (x86)
にffmpeg
フォルダを作成し、保存しています。
FFmpegの中身は以下のようです。
FFmpegをシステムの環境変数にパスを通します。まずタスクバーで「環境変数」を検索します。そして、「システムの環境変数」をクリックします。
「環境変数」をクリックします。
システムの環境変数の中の「Path」を選択し、「OK」をクリックします。
「新規」をクリックし、FFmpegの「bin」フォルダまでのパスを入力します。ここでは、下記のとおりです。(保存場所に応じて適宜修正してください。)
入力後、「OK」をクリックします。
C:\Program Files (x86)\ffmpeg\ffmpeg-2024-12-09-git-d21134313f-full_build\bin
環境変数の設定が完了したら、一度PCを再起動します。(環境変数の設定は再起動後、有効化されます。)
PowerShellで以下のコマンドを実行し、FFmpegのバージョン情報が表示されればインストール完了です。
ffmpeg -version
コーディング例
下記に、Pythonでオーディオファイルを文字起こしするためのコーディング例を示します。このPythonプログラムは下記を実行します。
- オーディオファイル(.wav, .mp3, .m4a, .mp4, .wmv, .avi)をダイアログで選択
- faster-whisper(CPU使用int8モード)のモデルを使って文字起こし。(進捗バーで処理の進行状況を可視化)
- 文字起こし結果をテキストファイルに保存
なお、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でモデルをダウンロードしパスを指定することで、実行可能です。
「Files and versions」をクリックします。
必要なファイル(.json及び.bin)をダウンロードし、任意のフォルダに保存します。
ここでは、以下のフォルダにダウンロードしたファイルを保存しています。
C:\py\audio_transcription\models\faster-whisper-large-v3
以下のように、モデルを保存したフォルダのパスを指定します。
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: 幅広い音声フォーマットへの対応と加工を実現。
- 手順概要
- 必要なライブラリを仮想環境にインストール。
- FFmpegのインストールと環境変数設定。
- faster-whisperを使った音声ファイルの文字起こしスクリプトの作成。
- 実行後、結果をテキストファイルに保存。
- 活用のポイント
- モデルサイズや計算モードを適切に選択することで、精度や速度のバランスを調整可能。
- オフライン環境でも事前にモデルをダウンロードすることで実行可能。
今回紹介した方法を応用すれば、多言語対応の音声認識やリアルタイム処理など、さまざまなプロジェクトに応用できます。ぜひ試してみてください!