2026/08/03_さらにアプデする日々っぱ
10:02
2,3日に1度微調整中っぱ((φ(・Θ・。)
そういえぱ 巷じゃBonsaiがLM Studioで試せるようになったみたいっぱねぇ⋯
LLMでぶん回して日本語低負荷で拾えるなら良いんだっぱが
そっちまで試す暇はひとまずないっぱのでこちら側の地味なFixをしていたっぱ
OBS + Cloudflare Workers AI + AI Gateway 字幕スクリプト v6.1
OBS配信用のリアルタイム字幕翻訳スクリプト。Cloudflare Workers AI(Whisper音声認識 + LLM翻訳)とAI Gatewayを組み合わせ、低遅延・低コストで字幕を生成します。
📋 目次
✨ 機能一覧
音声認識・翻訳
| 機能 | 説明 |
|---|---|
| Whisper音声認識 | Cloudflare Workers AI上の @cf/openai/whisper(多言語)または @cf/openai/whisper-tiny-en(英語専用・高速)を使用 |
| LLM翻訳 | @cf/meta/llama-3.1-8b-instruct-fast で翻訳。日本語→英語、英語→日本語、双方向自動検出に対応 |
| AI Gateway経由 | すべてのAPIリクエストがAI Gatewayを経由し、キャッシュ・ログ・レート制限を利用可能 |
ノイズ除去・VAD
| 機能 | 説明 |
|---|---|
| 動的ノイズゲート | マイクモードで起動直後30秒間の環境音を学習し、ノイズフロアを自動設定 |
| 周波数VAD | 200〜3400Hzの音声帯域パワーで人の声を判定。BGM・効果音を弾く |
| FFT事前チェック | 時間領域エネルギーが低いチャンクはFFTをスキップ(CPU負荷削減) |
| 無音トリミング | 前後の無音区間をカットしてAPI送信量を削減 |
| 音声正規化 | DCオフセット除去+ピークゲイン調整 |
ハルシネーション対策
| 機能 | 説明 |
|---|---|
| ハングル検出 | 韓国語文字を検出してスキップ |
| キリル文字検出 | ロシア語等を検出してスキップ |
| ギリシャ文字検出 | ギリシャ語を検出してスキップ |
| タイ文字検出 | タイ語を検出してスキップ |
| 中国語検出 | 簡体字パターンで中国語を検出してスキップ |
| 特殊ラテン文字検出 | トルコ語・北欧系文字を検出してスキップ |
| 繰り返し暴走検出 | 同じ3文字フレーズが8回以上繰り返される場合、切り詰め |
| 短文スキップ | 3文字以下の1単語ハルシネーションをスキップ |
| 補正プロンプト漏出 | “厳守ルール”等のプロンプト漏出を検出してスキップ |
フィルタ・品質管理
| 機能 | 説明 |
|---|---|
| NGワードフィルタ | 200語以上のNGワードを正規表現で事前コンパイル。単語境界\b対応と部分一致の2種類 |
| 重複スキップ | 前回の文字起こし結果と85%以上類似の場合スキップ |
| 翻訳ループ検出 | 翻訳結果で同じフレーズが繰り返される場合、切り詰め |
| 翻訳安全拒否検出 | “I cannot provide”等の安全拒否レスポンスを検出して元テキストを使用 |
| 翻訳失敗検出 | ja_to_enで日本語のまま返却された場合、翻訳失敗として元テキストを使用 |
録音・パイプライン
| 機能 | 説明 |
|---|---|
| InputStream連続録音 | PortAudioコールバックで連続録音。録音の切れ目ゼロ |
| リングバッファ | deque(maxlen=...)でオーバーラン時は古いデータを自動破棄 |
| 非ブロッキングパイプライン | 録音スレッドとAPI処理スレッドを分離 |
| HTTPセッション再用 | TCP/TLSハンドシェイクを初回1回だけ。毎サイクル100〜300ms節約 |
| Atomic write | 一時ファイル書き込み→os.replace()でOBS読み取り中の文字欠落を防止 |
| APIリトライ | Whisper・翻訳APIとも最大2回リトライ |
| ガードレール対応 | AI Gateway Guardrailsのブロック(code 2016/2017)を検出してスキップ |
モード・設定
| 機能 | 説明 |
|---|---|
| マイクモード | 自分の声を拾う。動的ノイズゲート有効 |
| 配信モード | ゲーム・配信音声を拾う。周波数VAD閾値が高め |
| 双方向自動検出 | 日本語と英語を自動判定して翻訳方向を決定。[JA]/[EN]タグ付き |
| 英語のみモード | 英語音声だけを拾い、日本語をスルー |
| 日本語以外すべて | 日本語以外の音声をすべて拾い、日本語に翻訳 |
| レイテンシモード | 3秒(短縮)/ 5秒(通常)/ 8秒(精度優先)から選択 |
| ジャンルヒント | ゲーム/雑談/技術/音楽/かっぱ等の語彙ヒントをWhisperに渡す |
| 15秒自動消去 | 最終更新から15秒経過で字幕を自動消去 |
| 環境変数対応 | APIトークンを環境変数CF_API_TOKENで設定可能 |
🔧 必要なもの
- Python 3.10+
- pipパッケージ:
sounddevice,requests,numpy,scipy - Cloudflareアカウント(Free枠でOK)
- OBS Studio(テキストソース(GDI+)機能が必要)
pipインストール
pip install sounddevice requests numpy scipy
scipyはなくても動作しますが、リサンプリング精度が落ちます。
☁️ Cloudflareアカウント設定手順
ステップ1: Cloudflareアカウント作成
- Cloudflareサインアップからアカウントを作成
- Cloudflareダッシュボードにログイン
ステップ2: Account IDの確認
- ダッシュボード右側のサイドバーでアカウントを選択
- Account ID をコピー(32文字の英数字)
- スクリプトの
ACCOUNT_IDに書き込む
ステップ3: API Tokenの作成
- API Tokens作成ページにアクセス
- Create Token をクリック
- Create Custom Token を選択
- 以下の権限を設定:
- Account > Workers AI — Read
- Account > AI Gateway — Read, Edit
- Continue to summary → Create Token
- 表示されたトークンをコピー(一度しか表示されません)
ステップ4: AI Gatewayの作成
- AI Gatewayページにアクセス
- Create Gateway をクリック
- Gateway名を入力(例:
default) - Create をクリック
💡 自動作成も可能: Gateway IDに
defaultを指定してAPIリクエストを送ると、初回リクエスト時に自動作成されます。
ステップ5: AI Gatewayのキャッシュ設定(推奨)
- AI Gatewayページで作成したGatewayを選択
- Settings を開く
- Cache Responses を有効にする
- デフォルトキャッシュTTLを設定(推奨: 300秒 = 5分)
ステップ6: スクリプトに認証情報を設定
環境変数を使う場合(推奨):
# Windows (コマンドプロンプト)
set CF_API_TOKEN=あなたのトークン
# Mac / Linux
export CF_API_TOKEN=あなたのトークン
または、スクリプト内の CLOUDFLARE_API_TOKEN に直接書き込む:
CLOUDFLARE_API_TOKEN = os.environ.get("CF_API_TOKEN", "cfat_ここにトークンを書く")
ステップ7: Workers AIの利用確認
- Workers AIページにアクセス
- モデル一覧が表示されることを確認
- Usage タブでNeuron使用量を確認可能
🚀 スクリプトの実行方法
python obs_subtitle_translator_0802_v6_1.py
起動すると以下の選択が順番に表示されます:
- モード選択: マイクモード(1) or 配信モード(2)
- 言語選択: 翻訳方向を選択(1-5)
- デバイス選択: デフォルト(d) or 一覧から選ぶ(l) or デバイス番号直指定
- ジャンル選択: ゲーム/雑談/技術/音楽/指定しない/かっぱ(1-6)
- レイテンシー選択: 短縮(3秒)/通常(5秒)/精度優先(8秒)
📺 OBSでの設定
- OBS Studioを開く
- ソース → + → テキスト(GDI+) を追加
- テキストソースのプロパティを開く
- ファイルから読み込む にチェックを入れる
- 参照ボタンで
output_mic.txtまたはoutput_game.txtを選択 - エンコーディング を UTF-8 に設定
- フォント・サイズ・色を調整
💡 活用例
例1: 日本語配信者 → 英語字幕(海外視聴者向け)
モード: 1 (マイク) 言語: 1 (日本語→英語) レイテンシー: 2 (通常5秒)
例2: 英語ゲーム配信 → 日本語字幕
モード: 2 (配信) 言語: 1 (英語→日本語) レイテンシー: 3 (精度優先8秒)
例3: 双方向自動検出(日英混在コラボ配信)
モード: 1 (マイク) 言語: 3 (自動検出) レイテンシー: 2 (通常5秒)
例4: 英語のみモード(チャット読み上げスルー)
モード: 2 (配信) 言語: 4 (英語のみ・日本語スルー)
例5: かっぱ配信(語彙ヒント活用)
モード: 1 (マイク) 言語: 1 (日本語→英語) ジャンル: 6 (かっぱ)
例6: 技術配信(技術用語認識精度向上)
モード: 1 (マイク) 言語: 1 (日本語→英語) ジャンル: 3 (技術・プログラミング)
例7: 短縮モードで低遅延
モード: 1 (マイク) 言語: 1 (日本語→英語) レイテンシー: 1 (短縮3秒)
例8: 精度優先でノイズの多い環境
モード: 2 (配信) 言語: 1 (英語→日本語) レイテンシー: 3 (精度優先8秒)
🔧 トラブルシューティング
| 症状 | 原因 | 対策 |
|---|---|---|
| 話声を拾わない | ノイズゲート閾値が高い | NOISE_GATE_MULTIPLIER を 3.0→2.0 に下げる |
| ノイズを拾いすぎる | ノイズゲート閾値が低い | NOISE_GATE_MULTIPLIER を 3.0→4.0 に上げる |
| ゲーム音声を拾わない | VAD閾値が高い | VAD_THRESHOLD_GAME を 400→300 に下げる |
| ゲーム音声を拾いすぎる | VAD閾値が低い | VAD_THRESHOLD_GAME を 400→500 に上げる |
| APIエラー 401 | トークン権限不足 | Workers AI Read + AI Gateway Read/Edit 権限を確認 |
| APIタイムアウト | ネットワーク遅延 | API_TIMEOUT を 30→60 に上げる |
| 字幕が文字化け | OBSのエンコーディング | テキストソース(GDI+)で UTF-8 を指定 |
| 起動直後に拾わない | ノイズ学習中(正常) | 30秒待つ。[ノイズゲート確定]が出たら話してOK |
📈 v6.1の改善点
| 改善 | 効果 |
|---|---|
| A. FFT前エネルギー事前チェック | 無音チャンクのFFTをスキップ、CPU負荷大幅削減 |
| B. 英語専用Whisper自動選択 | 英語モードで whisper-tiny-en 使用、レイテンシ短縮 |
| C. 翻訳APIキャッシュ | cf-aig-cache-ttl で重複フレーズをキャッシュヒット、Neuron節約 |
| D. 周波数マスク事前計算 | 毎チャンクの再計算を削減 |
| E. VAD FFTウィンドウ短縮 | 中央1秒だけFFT、計算量1/3〜1/8に削減 |
🔗 参考リンク
⚠️ 免責事項
- 本ソフトウェアの利用はすべて利用者自己責任となります
- Cloudflare Workers AI の仕様変更・料金改定により、予告なく動作しなくなる可能性があります
- 無料枠であっても設定ミス等による想定外の消費についても責任を負いません
- 放送禁止用語の抑止機能を備えていますが、100%の保証はできません
- 本ソフトウェアをインストール・実行した時点で、上記に同意したものとみなします
ポィ(ノΘ )ノ ⌒ 畄 ファイルをまた忘れるところだったっぱ(ぉぃ 2026年8月3日版
コメント