はじめに
議事録の自動化といえば、Whisper API + ChatGPT の組み合わせを使った実装例がQiitaにも数多くあります。自分もこのパターンで作ってみたのですが、1時間を超える会議の録音データを投げたところ、Whisper APIの 25MBファイルサイズ制限 に引っかかりました。
圧縮フォーマットに変換しても、1時間超のマイク録音は普通に25MBを超えます。回避策としてファイルを分割して複数回APIを叩く方法が定番ですが、
- 分割ロジックとレスポンスの結合処理を自前で書く必要がある
- 分割位置の文脈が切れて認識精度が落ちることがある
- 複数回リクエストが飛ぶのでレイテンシが伸びる
という地味な面倒くささがあります。今回はこの制限を回避するために、大容量ファイルにそのまま対応した動画文字起こしAPIを試してみました。
Whisper APIの25MB制限、実際どのくらいで引っかかるか
(ここで実際に計測した数値・音声時間の目安を入れる)
大容量ファイル対応APIを使ってみる
Transcript APIはファイルをアップロードする代わりにURL(もしくは大容量ファイルの直接アップロード)を渡す形式で、25MBのような制限を気にせず長時間の会議録音をそのまま処理できます。話者分離も標準機能として含まれているため、別途ダイアライゼーション処理を組む必要もありません。
※ 対応可能な最大ファイルサイズやアップロード方式の詳細は、必ずダッシュボードの最新ドキュメントで確認してください。
```python
import requests
API_KEY = "YOUR_API_KEY"
ENDPOINT = "https://videotranscriber.ai/transcript-api"
※エンドポイント・パラメータ名は一般的なREST APIの例です。実際の値は公式ドキュメントで確認してください。
def transcribe(video_url: str) -> dict:
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json",
}
payload = {
"url": video_url,
"speaker_diarization": True,
"language": "ja",
}
res = requests.post(ENDPOINT, json=payload, headers=headers)
res.raise_for_status()
return res.json()
1時間超の会議録音でも、分割せずそのまま渡せる
result = transcribe("https://example.com/long_meeting.mp4")
```
Whisper APIチャンク分割方式との比較
| 項目 | Whisper API(25MB制限あり) | 今回のAPI |
|---|---|---|
| ファイルサイズ制限 | 25MB | (実測値を記入) |
| 分割処理 | 自前実装が必要 | 不要 |
| 話者分離 | 別途実装が必要 | 標準搭載 |
| コード量 | 分割・結合ロジック込みで増える | シンプル |
まとめ
Whisper APIベースの議事録自動化は定番の実装パターンですが、長時間会議になると25MB制限という地味な壁にぶつかります。ファイル分割の面倒な実装を書く前に、大容量ファイルにそのまま対応したAPIを検討してみるのも一つの選択肢です。