Closed3

[Whisper] Whisper APIを素早く叩く

Srgr0Srgr0
  1. 音声ファイルを変換&分割する
    Whisper APIには1ファイルあたり25MBの制限があります。
    圧縮率の高いOpusフォーマットに変換することで、処理回数を減らすことができます。
    変換元のファイル名 (audio.mp3) と変換後のファイル名 (audio.ogg) は適当に指定してください。
ffmpeg -i audio.mp3 -vn -map_metadata -1 -ac 1 -c:a libopus -b:a 12k -application voip audio.ogg

変換後も25MBを超える場合は、以下のようにしてファイルを分割してください。

import os

def split_file(file_path, chunk_size):
    # ファイル名と拡張子を分離する
    file_name, file_ext = os.path.splitext(file_path)

    # 分割したファイルの数を初期化する
    part_num = 1

    # ファイルをバイナリモードで開く
    with open(file_path, 'rb') as f:
        while True:
            # ファイルから一定サイズのデータを読み込む
            chunk = f.read(chunk_size)
            if not chunk:
                break

            # 分割したファイルのファイル名を生成する
            part_file_name = f"{file_name}_part{part_num}{file_ext}"
            part_num += 1

            # 分割したファイルを書き込む
            with open(part_file_name, 'wb') as part_file:
                part_file.write(chunk)

split_file('filepath.m4a', 20 * 1024 * 1024)
Srgr0Srgr0
  1. iOSのボイスメモで録音した場合は、各ファイルで以下を実行
    これを叩いておかないとAPI側で正常に認識されない
ffmpeg -i filepath_raw.m4a -c copy filepath_convert.m4a

カレントディレクトリ一括でやる場合は以下

#!/bin/bash

for file in *.m4a
do
  base_name=$(basename "$file" .m4a)
  ffmpeg -i "$file" -c copy "${base_name}_convert.m4a"
done

ffmpegでエラーになった場合、分割前のファイルでこの処理をした後、分割してみる。

Srgr0Srgr0
  1. Whisper APIを叩く
curl https://api.openai.com/v1/audio/transcriptions \
  -H "Authorization: Bearer sk-hogehoge" \
  -H "Content-Type: multipart/form-data" \
  -F file="@filepath.m4a" \
  -F model="whisper-1" \
  -F language="ja" \
  -F response_format="text"
このスクラップは2023/04/06にクローズされました