2026/07/30眠い時にやったので修正したっぱ
01:22
2026/07/30 2:29追記 うっかりファイルへのリンク貼り忘れたっぱ( ・Θ・).;’.、ブッ obs_subtitle_translator2026-07-30.rar をダウンロード
ばんわっぱ かっぱだっぱ(。-Θ-。)ボォ…
大した話じゃないっぱが
前回のファイル2つだとわかりにくいって言われたっぱ
ついでに
デバイス探すの手動だとめんどくさいって言われたっぱ
なおしたっぱo(・Θ・)oウン!!
(。-Θ-。)ボォ…っと睡眠不足じゃなければ秒だったっぱ…
あとはAI様の解説を貼っておくっぱ((・Θ・))


Cloudflare Workers AI + Whisper でリアルタイム字幕翻訳を自作する
概要
CloudflareのWorkers AI(Whisper + LLM)を使って、リアルタイムで音声を文字起こし&翻訳するOBS字幕スクリプトを自作しました。月額0円の無料枠で1日約8時間使えます。
できること
| 機能 | 説明 |
|---|---|
| 🎤 マイクモード | 自分の声を日本語→英語(または英語→日本語)に翻訳 |
| 🎮 配信モード | ゲーム・配信音声を英語→日本語(または日本語→英語)に翻訳 |
| 🔇 ノイズ除去 | 動的ノイズゲート + 無音トリミング + 周波数VAD |
| 🚫 NGワードフィルタ | 不適切表現を *** に自動伏せ(単語境界対応で誤爆防止) |
| 🔄 重複スキップ | 同じ内容の繰り返しを翻訳せずNeuron節約 |
| 👻 ハルシネーション対策 | ハングル/キリル/タイ/中国語/英語の幻覚出力を検出してスキップ |
| ⏱️ 自動消去 | 15秒経過で字幕を自動クリア |
必要なもの
- Python 3.10以上
- Cloudflareアカウント(FreeプランでOK)
- Cloudflare APIトークン(Workers AI権限付き)
セットアップ手順
1. Pythonパッケージのインストール
pip install sounddevice requests numpy scipy
2. Cloudflare APIトークンの取得
- Cloudflareダッシュボードにアクセス
- 「Create Token」→「Create Custom Token」
- 権限設定:
- Account → Workers AI → Edit
- Account → AI Gateway → Edit
- トークンをコピー
3. AI Gatewayの作成
- AI Gatewayにアクセス
- 「Create Gateway」→ 名前は
default - GuardrailsはOFFのまま(Neuron節約のため)
4. スクリプトの設定
obs_subtitle_translator.py を開き、以下を書き換え:
CLOUDFLARE_API_TOKEN = "あなたのAPIトークン"
ACCOUNT_ID = "あなたのアカウントID"
5. OBSの設定
- OBSに「テキストソース(GDI+)」を追加
- 「ファイルから読み込む」にチェック
output_mic.txtまたはoutput_game.txtを指定- エンコーディングを UTF-8 に設定
使い方
起動
python obs_subtitle_translator.py
起動すると以下のメニューが表示されます:
============================================================
OBS字幕スクリプト v5 統合版
============================================================
どちらの音声を文字起こししますか?
1: 🎤 マイクモード(自分の声を拾う)
─ マイクで自分の声を拾います
─ 動的ノイズゲート+無音トリミングでノイズを除去します
─ 起動直後の約30秒はノイズ学習中です(黙って待ってください)
2: 🎮 配信モード(ゲーム・配信音声を拾う)
─ Voicemeeter等でゲーム音声をB2チャンネルに出してください
─ 周波数VADでBGM・効果音を弾き、人の声だけを拾います
番号を入力 (1 または 2) [デフォルト: 1]:
選択項目
| ステップ | 選択肢 | 説明 |
|---|---|---|
| 1. モード | 1: マイク / 2: 配信 | 音声の入力元を選ぶ |
| 2. 言語 | 1: 日本語→英語 / 2: 英語→日本語 | 聞き取る言語と翻訳方向を選ぶ |
| 3. デバイス | d: デフォルト / l: 一覧 / 番号直接 | 音声入力デバイスを選ぶ |
| 4. ジャンル | 1-5 | Whisperの語彙ヒント(ゲーム・雑談・技術・音楽・指定しない) |
マイクモードの**
起動直後の約30秒(5秒×6フレーム)はノイズフロア学習中です。
- 黙って待つ — 話すと閾値が高くなりすぎて話声を拾わなくなる
- BGMがある環境 — BGMを流したまま学習すると、BGM音量がノイズフロアになり話声だけを拾いやすくなる
- 学習完了 —
[ノイズゲート確定]のログが出たら話し始めてOK
終了
Ctrl+C で終了。outputファイルが空になります。
料金
| 項目 | 無料枠 |
|---|---|
| Workers AI | 1日10,000 Neurons(毎日UTC 00:00リセット) |
| AI Gateway | ベータ期間中は無料 |
| Guardrails | OFF運用で追加消費ゼロ |
実測値
| 項目 | 数値 |
|---|---|
| 30分あたりの消費 | 約626 Neurons |
| 1時間あたりの消費 | 約1,252 Neurons |
| 1日の無料枠 | 10,000 Neurons |
| 使える時間 | 約8時間 |
10,000 Neuronsに達したらエラーになるだけで課金されません。Freeプランなら絶対に課金されないので安心です。
トラブルシューティング
| 症状 | 対策 |
|---|---|
| 話声を拾わない | NOISE_GATE_MULTIPLIER を 3.0→2.0 に下げる |
| ノイズを拾いすぎる | NOISE_GATE_MULTIPLIER を 3.0→4.0 に上げる |
| ゲーム音声を拾わない | VAD_THRESHOLD_GAME を 400→300 に下げる |
| ゲーム音声を拾いすぎる | VAD_THRESHOLD_GAME を 400→500 に上げる |
| scipyエラー | pip install scipy(なくても動作しますが精度が落ちます) |
技術解説
通信**
Python(PC)
│
├─→ Whisper API(音声→テキスト)
│ @cf/openai/whisper
│
├─→ LLM翻訳 API(テキスト→翻訳)
│ @cf/meta/llama-3.1-8b-instruct-fast
│
└─→ output_*.txt → OBSが読み込み
音声処理フロー
音声録音
→ 動的ノイズゲート(マイクモードのみ)
→ 周波数VAD(200〜3400Hzの音声帯域パワーで判定)
→ 音声正規化(DCオフセット除去 + ゲイン調整)
→ 無音トリミング(前後の無音をカット)
→ リサンプリング(scipy高品質、フォールバック付き)
→ Whisper API送信
Guardrailsについて
Cloudflare AI GatewayのGuardrailsは、リクエストごとに追加のWorkers AI推論を実行するためNeuronを消費します。本スクリプトでは以下の理由でOFF運用としています:
- NGワードフィルタ(コード内で
***に伏せ置換) - 翻訳プロンプトで不適切表現の伏せを指示
- これら2層でGuardrails相当の機能をNeuron追加消費ゼロで実現
制限事項
- Whisper baseモデルの日本語認識精度には限界があります(滑舌の悪い話声は特に苦手)
- ハルシネーション(無音区間で幻覚出力)が発生することがあります
- 無料枠10,000 Neurons/日で約8時間が目安です
- APIタイムアウトが稀に発生します(1回リトライで対応)
ということで前回よりさらに節約重視にしておいたっぱ(´・Θ・)アラマァ え? あれっぱよ?
- 英語配信を日本語字幕にして読んだり
- 英語配信からの精度は高いけど日本語を英語にするのは怪しいっぱから( ・Θ・).;’.、ブッ
- けど、一般的な聞き取らせるもののジャンル補正をいれればマシになるようにはしたっぱ(*´-Θ-)ホッ-3
ということで勘弁してくれっぱ(現状は
前回も言った気がするっぱが
こんなインターネットのど僻地の妖怪のこねくり回した怪しい生成物を使って何が起きても利用者の問題だっぱからのヾノ’Θ’o) おいらは知らんっぱ
(まあ当たり前だよの)
コメント