Closed3
[Whisper] Whisper APIを素早く叩く
- 音声ファイルを変換&分割する
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)
- 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でエラーになった場合、分割前のファイルでこの処理をした後、分割してみる。
- 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にクローズされました