【Groq】GroqAPIで低額・高速で音声ファイルを文字起こしする
アプリケーション

【Groq】GroqAPIで低額・高速で音声ファイルを文字起こしする

Groq APIのWhisper Turboを使って音声ファイルを効率的に文字起こしする方法とPythonスクリプトの作成手順

8k39

8k39

公開日: 2025年9月28日

【Groq】Whisperで音声ファイルを自動で文字起こしする

はじめに

Colab等も有りますが低速なので、より高速で安く処理出来るGroqCloudをおすすめします。

無料枠も有るため、一度無料枠で試してから有料プランに移行する事をおすすめします。

whisper自体はローカルのGPUでも動かすことが出来ます。

詳しくは【Whisper】ローカルで音声ファイルを文字起こしする方法もご参照ください。

Groqでは最適化されたより高速なTurboモデルがあり、通常のWhisperモデルよりも安く高速に処理できるので、使うならTurboモデル一択です。

事前準備

必要なもの

  • Python 3.7以上
  • Groq APIキー
  • 文字起こししたい音声ファイル

APIキーの取得

  1. Groq公式サイトにアクセス
  2. アカウントを作成(GitHubアカウントでも可)
  3. APIキーを生成
  4. 生成されたキーをコピーして保存

右上の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}")

スクリプトの使い方

スクリプト内のAUDIO_DIRを自分の音声ファイルフォルダのパスに変更。

AUDIO_DIR = r"C:\Users\YourName\Documents\audio_files"

音声ファイルの置き場所は自分が分かる場所であればどこでも大丈夫です。

3. スクリプトの実行

python groq_transcribe.py

スクリプトを実行すると、指定したフォルダ内の音声ファイルが順次処理され、transcriptsフォルダに文字起こし結果が保存されます。

参考リンク