tts-skill について
tts-skillは、ローカル動画のナレーションや記事デモ向けに、音声生成の経路と制作ルールを定めます。ローカル動画ではIndexTTS2を使い、マニフェスト、発音辞書、字幕の検証を指定します。
主な機能
- 01依頼を音声生成経路に振り分け
- 02ローカル動画でIndexTTS2を使用
- 03WAV、速度、音声マニフェストの指定
- 04発音辞書ルールの適用
- 05最終音声から字幕タイミングを作成
- 06デジタルヒューマン音声の承認必須化
活用シーン
- 01ローカル動画のナレーション生成
- 02記事やチュートリアル用MiniMaxデモの作成
- 03混在言語スクリプトの発音確認
- 04最終ナレーションの字幕生成と検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ pluviobyte/ rnskill --skill tts-skillインストール後、Claude Code で/tts-skillを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlassets/minimax_tts.pyreferences/minimax-relay-article.mdpronunciation-lexicon.jsonscripts/generate_indextts2_narration.py詳細
TTS スキル
すべてのリクエストを、必ずいずれか1つのレーンに振り分けます。
厳守する振り分けルール
- ローカル動画制作では、ローカルの IndexTTS2 のみを使用します。
.envに MiniMax の認証情報があっても、MiniMax を呼び出してはいけません。 automation/config/tts-routing.jsonにある音声 IDpluvio-indextts2-calm-v1と、ロスレスの正規 WAV を使用します。話者の参照音声に MP3 を使用してはいけません。また、正規の参照音声を最新の出力で置き換えてはいけません。置き換えると、クローンのずれが蓄積します。- 固定するナレーションはロスレス WAV として生成します。MP3 を出力できるのは、携帯用の試聴コピーとしてのみであり、別のクローンの音源や最終字幕のタイミング調整には使用できません。
- すべての試聴用 WAV と最終 WAV に、
automation/config/tts-routing.jsonで定義されたdefault_delivery.playback_speedを適用します。制作時のデフォルトは1.12xで、ピッチを保つ FFmpegatempoを使って実装します。有効な倍率をvoice_manifest.jsonに記録します。 - macOS の
say、ブラウザーの音声、MiniMax、または別の汎用/クラウド音声に、黙ってフォールバックしてはいけません。IndexTTS2、そのモデルの重み、Apple MPS/CPU、または正規の参照音声が利用できない場合は、ローカルレーンを修復するか、処理を停止します。 - 最終ナレーションのレンダリングごとに、プロバイダー、音声 ID、モデル、正規の参照音声のパスと SHA-256、セグメント契約、出力パス、および
used_fallback=falseを含むvoice_manifest.jsonを必ず残します。 - TTS セグメントの長さは計画用メタデータにすぎません。連結済みの正確なロスレスナレーションに対して
ra-audio-to-subtitlesを実行し、その単語単位のタイムスタンプを最終字幕に使用します。 - デジタルヒューマン制作では、ユーザーがその音声バージョンを明示的に承認するまで、ナレーション全体を試聴用として扱います。未承認の試聴音声を固定済みと表現したり、HeyGen に送ったりしてはいけません。
- ローカルで試聴または最終レンダリングを行う前に、必ず
references/pronunciation-lexicon.jsonを適用します。ユーザーが承認したこのファイル内の発音は、一般的な音声表記の推測より優先されます。必要に応じて表示用の表記と TTS テキストを分け、禁止された表記はレンダリングせずに停止します。
ローカル動画レーン:IndexTTS2
機械可読なルート設定を次から読み込みます。
automation/config/tts-routing.json
JSONL セグメント契約からナレーションを生成します。
python3 .claude/skills/tts-skill/scripts/generate_indextts2_narration.py \
--batch-file <segments.jsonl> \
--output <final-narration.wav> \
--manifest <voice_manifest.json>
空でない JSONL の各行は、公式の IndexTTS2 バッチ契約に従い、text を含める必要があります。また、emotion_vector、emotion_weight、silence_after_ms を含めることもできます。デフォルトでは落ち着いた読み上げにします。ユーザーから明示的な指定がある場合に限り、感情表現を強めます。
新しい契約を使う場合、またはローカルのモデル設定を変更した後は、--dry-run を実行します。このヘルパーは、正規の話者参照音声がロスレス PCM WAV であることを検証し、公式のローカル IndexTTS2 CLI を呼び出して、結果を正規化し、マニフェストを書き込みます。監査できるよう、正規化済み WAV の隣に未加工の WAV を残します。
中国語と英語が混在するスクリプトでは、全体をレンダリングする前に、モデル名、ブランド名、略語、数字を確認します。まず references/pronunciation-lexicon.json を読み込みます。そこにあるエントリーは承認済みの制作契約です。tts の値をそのまま使用し、forbidden_tts にある形式はすべて拒否します。特に、Codex は英語のトークンのまま使用し、「扣代克斯」、「扣戴克斯」、「扣德克斯」と音訳してはいけません。辞書にまだない用語については、表示用スクリプトと最終字幕で正規の表記を保ちながら、代替案を試聴します。ユーザーが選択した後、全体のレンダリング前に、その決定を辞書に記録します。
公開記事レーン:MiniMax Relay
MiniMax は、記事、チュートリアル、コースの例、リレーステーションのオンボーディングで使用する公開ソリューションとしてのみ維持されています。ローカル制作のプロバイダーではありません。このレーンが要求された場合は、references/minimax-relay-article.md を読み込み、記事/デモの例に限って assets/minimax_tts.py を使用します。
QC
最終動画でナレーションを使用する前に、次の点を確認してください。
providerがIndexTTS2/indextts2-localであることを確認してください。voice_idがpluvio-indextts2-calm-v1であることを確認してください。- 参照用の SHA-256 がルーティング設定と一致することを確認してください。
- 推奨される出力が PCM WAV であり、正常にデコードできることを確認してください。
- 制作契約でワークスペースのデフォルト設定を明示的に上書きしていない限り、
playback_speedが1.12であることを確認してください。 used_fallback=falseであり、セグメントのプロバイダーに MiniMax が使われていないことを確認してください。- 発音に関する契約が
voice_manifest.jsonに記載され、承認済みの混在言語の用語が使用されていることを確認してください。 - その WAV からキャプションを生成し、
caption-qc.jsonが PASS であることを必須としてください。 - デジタルヒューマンを使用する場合、有料のアバター生成を行う前に、該当するオーディション WAV に対するユーザーの明示的な承認を必須としてください。音声を変更すると承認は無効になります。