
【Groq】GroqAPIで低額・高速で音声ファイルを文字起こしする
Groq APIのWhisper Turboを使って音声ファイルを効率的に文字起こしする方法とPythonスクリプトの作成手順
8k39
公開日: 2025年9月28日
【Groq】Whisperで音声ファイルを自動で文字起こしする方法
はじめに
Colab等も有りますが低速なので、より高速で安く処理出来るGroqCloudをおすすめします。
無料枠も有るため、一度無料枠で試してから有料プランに移行する事をおすすめします。
ローカル処理
whisper自体はローカルのGPUでも動かすことが出来ます。
詳しくは【Whisper】ローカルで音声ファイルを文字起こしする方法もご参照ください。
Groq APIとWhisperTurboについて
Groqでは最適化されたより高速なTurboモデルがあり、通常のWhisperモデルよりも安く高速に処理できるので、使うならTurboモデル一択です。
事前準備
必要なもの
- Python 3.7以上
- Groq APIキー
- 文字起こししたい音声ファイル
APIキーの取得
- Groq公式サイトにアクセス
- アカウントを作成(GitHubアカウントでも可)
- APIキーを生成
- 生成されたキーをコピーして保存
右上のAPI Keysを選択し、Create API Keyをクリック。
適当な名前をつけてSubmit。
生成されたキーをコピーして.envに保存
必要なライブラリのインストール
Pythonとpipがインストールされている事を確認するためにバージョン確認を行う。
python --version
pip --versionバージョンが表示される事を確認できたら、依存関係をインストールする。
pip install groq python-dotenv環境設定
.envファイルの作成
プロジェクトフォルダに.envファイルを作成し、APIキーを設定する。
GROQ_API_KEY=""""内に発行したAPIキーを記述してください。
スクリプトの作成
次にPythonスクリプトを作成します。
以下のスクリプトをコピーして、設定項目の音声ファイルが入っているフォルダのパスを変更してください
基本バージョン
import os
import time
from groq import Groq
from dotenv import load_dotenv
# .envファイルから環境変数を読み込む
load_dotenv()
# --- 設定項目 ---
# 1. 音声ファイルが入っているフォルダのパス
AUDIO_DIR = r"C:\your\audio\folder"
# 2. 文字起こし結果を保存するフォルダのパス
TRANSCRIPT_DIR = os.path.join(AUDIO_DIR, "transcripts")
# ----------------
# Groqクライアントの初期化
try:
client = Groq(api_key=os.environ.get("GROQ_API_KEY"))
if not client.api_key:
raise ValueError("APIキーが設定されていません。.envファイルを確認してください。")
except Exception as e:
print(f"[致命的なエラー] Groqクライアントの初期化に失敗しました: {e}")
exit()
# 出力用フォルダがなければ作成
os.makedirs(TRANSCRIPT_DIR, exist_ok=True)
def transcribe_audio_file(audio_path, output_path):
"""音声ファイルを文字起こしする関数"""
filename = os.path.basename(audio_path)
try:
start_time = time.time()
# ファイルをバイナリモードで開いてAPIに渡す
with open(audio_path, "rb") as file:
transcription = client.audio.transcriptions.create(
file=(filename, file.read()),
model="whisper-large-v3-turbo",
response_format="verbose_json",
language="ja"
)
# 結果をテキストファイルに書き込む
with open(output_path, "w", encoding="utf-8") as f:
f.write(f"# {filename} の文字起こし結果\n\n")
for segment in transcription.segments:
start = segment['start']
end = segment['end']
text = segment['text']
start_str = time.strftime('%H:%M:%S', time.gmtime(start)) + f".{int((start % 1) * 1000):03d}"
end_str = time.strftime('%H:%M:%S', time.gmtime(end)) + f".{int((end % 1) * 1000):03d}"
f.write(f"[{start_str} -> {end_str}] {text.strip()}\n")
end_time = time.time()
print(f"-> 完了: {os.path.basename(output_path)} に保存しました。(処理時間: {end_time - start_time:.2f}秒)")
return True
except Exception as e:
print(f"-> [エラー] {filename} の処理中にエラーが発生しました: {e}")
return False
# メイン処理
if __name__ == "__main__":
# 処理対象の音声ファイルリストを取得
try:
audio_files = sorted([f for f in os.listdir(AUDIO_DIR) if f.lower().endswith(('.mp3', '.wav', '.m4a', '.flac'))])
total_files = len(audio_files)
if total_files == 0:
print(f"[情報] {AUDIO_DIR} に音声ファイルが見つかりませんでした。")
exit()
print(f"合計 {total_files} 個の音声ファイルを検出しました。処理を開始します。")
except FileNotFoundError:
print(f"[エラー] 音声ファイルフォルダが見つかりません: {AUDIO_DIR}")
exit()
# 各ファイルを処理
success_count = 0
for i, filename in enumerate(audio_files):
audio_path = os.path.join(AUDIO_DIR, filename)
transcript_filename = os.path.splitext(filename)[0] + ".txt"
transcript_path = os.path.join(TRANSCRIPT_DIR, transcript_filename)
print("-" * 50)
print(f"[{i + 1}/{total_files}] ファイルを処理中: {filename}")
# すでに文字起こし済みの場合はスキップ
if os.path.exists(transcript_path):
print("-> スキップ: このファイルは既に文字起こし済みです。")
continue
# ファイルサイズのチェック (Groqの推奨上限は100MB)
file_size_mb = os.path.getsize(audio_path) / (1024 * 1024)
if file_size_mb > 100:
print(f"-> [警告] ファイルサイズが100MBを超えています ({file_size_mb:.2f} MB)。スキップします。")
continue
# 文字起こし実行
if transcribe_audio_file(audio_path, transcript_path):
success_count += 1
# APIへの連続リクエストを避けるための短い待機
time.sleep(1)
print("-" * 50)
print(f"\n全ての処理が完了しました。成功: {success_count}/{total_files}")スクリプトの使い方
1. フォルダ構造の準備
your_project/
├── groq_transcribe.py
├── .env
└── audio_files/
├── file1.mp3
├── file2.wav
└── transcripts/ (自動作成される)
├── file1.txt
└── file2.txt
2. 設定の変更
スクリプト内のAUDIO_DIRを自分の音声ファイルフォルダのパスに変更。
AUDIO_DIR = r"C:\Users\YourName\Documents\audio_files"音声ファイルの置き場所は自分が分かる場所であればどこでも大丈夫です。
3. スクリプトの実行
python groq_transcribe.pyスクリプトを実行すると、指定したフォルダ内の音声ファイルが順次処理され、transcriptsフォルダに文字起こし結果が保存されます。
出力形式の説明
生成されるテキストファイルは以下の形式になります。
# example.mp3 の文字起こし結果
[00:00:00.000 -> 00:00:05.240] こんにちは。今日はWhisperの使い方について説明します。
[00:00:05.240 -> 00:00:12.840] まず最初に、Groq APIのアカウントを作成する必要があります。
[00:00:12.840 -> 00:00:18.600] 公式サイトにアクセスして、無料でアカウントを作成できます。
高度な機能
言語の自動検出
言語を指定せずに自動検出させることも可能。
transcription = client.audio.transcriptions.create(
file=(filename, file.read()),
model="whisper-large-v3-turbo",
response_format="verbose_json"
# language="ja" を削除
)出力形式の変更
テキストのみが欲しい場合。
transcription = client.audio.transcriptions.create(
file=(filename, file.read()),
model="whisper-large-v3-turbo",
response_format="text",
language="ja"
)
# シンプルなテキスト出力
with open(output_path, "w", encoding="utf-8") as f:
f.write(transcription)字幕形式(SRT)での出力
transcription = client.audio.transcriptions.create(
file=(filename, file.read()),
model="whisper-large-v3-turbo",
response_format="srt",
language="ja"
)トラブルシューティング
よくあるエラーと対処法
1. APIキーエラー
[致命的なエラー] Groqクライアントの初期化に失敗しました
.envファイルのAPIキーが正しいか確認- ファイル名が
.env(ドット付き)になっているか確認
2. ファイルサイズエラー
ファイルサイズが100MBを超えています
- 音声ファイルを短く分割する
- 音質を下げて容量を減らす
- FFmpegなどを使用してファイルサイズを圧縮
3. 文字化け
- 出力ファイルのエンコーディングが
utf-8になっているか確認 - Windowsのメモ帳ではなくVS CodeやNotePad++で開く
ファイルサイズを圧縮する方法
FFmpegを使用してファイルサイズを削減。
# 音質を下げて容量を削減
ffmpeg -i input.mp3 -b:a 64k output.mp3
# モノラルに変換してサイズを半分に
ffmpeg -i input.mp3 -ac 1 output.mp3