mcpField
V
voice-changer

voice-changer

github.com/elevenlabsクリエイティブ・メディア5166.8k 回インストール今日更新
リポジトリ

voice-changer について

voice-changer は、録音音声を指定した声に変換する ElevenLabs のスキルです。感情やペース、話し方を保ち、Python、JavaScript、コマンドラインでの利用例を紹介しています。

主な機能

  1. 01録音音声を指定した声に変換
  2. 02感情や話し方を維持
  3. 03多言語モデルと英語モデルに対応
  4. 04リクエストごとの音声設定
  5. 05音声の入出力形式を選択

活用シーン

  1. 01録音したナレーションの声を変更
  2. 02別の言語への吹き替え
  3. 03ゲームやアニメ向けのキャラクターボイス制作
  4. 04話し方を保って識別可能な声を置換

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/elevenlabs/skills --skill voice-changer

インストール後、Claude Code で/voice-changerを入力して読み込まれたか確認します。

同梱ファイルreferences/installation.md

詳細

ElevenLabs ボイスチェンジャー

音声録音の声を別のターゲット音声に変換します。ボイスチェンジャー(以前は Speech-to-Speech と呼ばれていました。API エンドポイントと SDK メソッドでは引き続き speech_to_speech/speechToSpeech という名前が使われます)は、感情、ペース、イントネーション、息づかい、ささやき、笑い、泣き声など、元のパフォーマンスを保ったまま、話者だけを入れ替えます。

コードを書く前のセットアップ: このプロジェクトで ELEVENLABS_API_KEY が設定されていない場合は、まずアプリのフォルダーから npx -y @elevenlabs/cli@latest onboard init を実行し、表示される手順に従ってください。ユーザーのサインインとプロジェクト用キーの保存が行われるため、手動でキーをコピーする必要はありません。それ以外の場合は、インストールガイドを参照してください。JavaScript では、@elevenlabs/* パッケージのみを使用してください。

主な仕様

  • 入力の最大長: 1 リクエストあたり 5 分です。それより長い録音は分割して、出力をつなぎ合わせてください。
  • ファイルの最大サイズ: 1 リクエストあたり 50 MB です。ソースがそれより大きい場合は、MP3 に圧縮してください。
  • 料金: 処理する音声 1 分あたり 1,000 文字です(テキスト量ではなく、音声の長さに基づきます)。
  • 推奨モデル: eleven_multilingual_sts_v2 です。英語のみのコンテンツでも、eleven_english_sts_v2 を上回ることがよくあります。

クイックスタート

Python
from elevenlabs import ElevenLabs

client = ElevenLabs()

with open("source.mp3", "rb") as audio_file:
    audio_stream = client.speech_to_speech.convert(
        voice_id="JBFqnCBsd6RMkjVDRZzb",  # George
        audio=audio_file,
        model_id="eleven_multilingual_sts_v2",
        output_format="mp3_44100_128",
    )

with open("converted.mp3", "wb") as f:
    for chunk in audio_stream:
        f.write(chunk)
JavaScript
import { ElevenLabsClient } from "@elevenlabs/elevenlabs-js";
import { createReadStream, createWriteStream } from "fs";

const client = new ElevenLabsClient();

const audioStream = await client.speechToSpeech.convert("JBFqnCBsd6RMkjVDRZzb", {
  audio: createReadStream("source.mp3"),
  modelId: "eleven_multilingual_sts_v2",
  outputFormat: "mp3_44100_128",
});

audioStream.pipe(createWriteStream("converted.mp3"));
CLI
elevenlabs speech-to-speech convert \
  --voice-id JBFqnCBsd6RMkjVDRZzb \
  --audio source.mp3 \
  --model-id eleven_multilingual_sts_v2 \
  --output-format mp3_44100_128 \
  --output converted.mp3

パラメーター

パラメーター型デフォルト説明
voice_idstring(必須)—使用するターゲット音声です。既成の音声 ID、クローン音声、またはライブラリーの音声を使用できます
audiofile(必須)—パフォーマンス(感情、タイミング、話し方)が保持されるソース音声です
model_idstringeleven_english_sts_v229 言語には eleven_multilingual_sts_v2、英語のみには eleven_english_sts_v2 を使用します
output_formatstringmp3_44100_128下記の出力形式の表を参照してください
voice_settingsJSON string—このリクエストに限り、保存されている音声設定を上書きします
seedinteger—可能な範囲で決定的なサンプリングを行います(0~4294967295)
remove_background_noisebooleanfalse変換前に、入力音声に分離モデルを適用します
file_formatstringotherエンコード済みの音声には other、または 16 ビット PCM モノラル @ 16kHz リトルエンディアン(低レイテンシ)には pcm_s16le_16 を指定します
optimize_streaming_latencyint(query)—0~4。品質とレイテンシのバランスを調整します。4 が最速ですが、テキストノーマライザーが無効になります
enable_loggingboolean(query)trueゼロリテンションモードにするには false を設定します(エンタープライズのみ。履歴/つなぎ合わせ機能が無効になります)

モデル

モデル ID言語最適な用途
eleven_multilingual_sts_v229あらゆる用途に推奨されます。英語の音声でも英語モデルを上回ることがよくあります
eleven_english_sts_v2英語API のデフォルト。英語のみのフォールバック

ここで使用できるのは、can_do_voice_conversion プロパティが true のモデルのみです。ボイスチェンジャーには現在、低レイテンシの「flash/turbo」ティアはありません。必要な場合は、入力に pcm_s16le_16、出力に opus_*/低ビットレートの mp3_* を使用し、optimize_streaming_latency の値を上げてください。

対応言語(eleven_multilingual_sts_v2)

英語(US、UK、AU、CA)、日本語、中国語、ドイツ語、ヒンディー語、フランス語(FR、CA)、韓国語、ポルトガル語(BR、PT)、イタリア語、スペイン語(ES、MX)、インドネシア語、オランダ語、トルコ語、フィリピン語、ポーランド語、スウェーデン語、ブルガリア語、ルーマニア語、アラビア語(SA、AE)、チェコ語、ギリシャ語、フィンランド語、クロアチア語、マレー語、スロバキア語、デンマーク語、タミル語、ウクライナ語、ロシア語。

ターゲット音声

既成の音声、クローン音声、または音声ライブラリーの任意の音声 ID を使用できます。

人気の音声:

  • JBFqnCBsd6RMkjVDRZzb — George(男性、ナレーション)
  • EXAVITQu4vr4xnSDxMaL — Sarah(女性、柔らかい声)
  • onwK4e9ZLuTAKqWW03F9 — Daniel(男性、権威のある声)
  • XB0fDUnXU5powFXDhCwa — Charlotte(女性、会話調)
voices = client.voices.get_all()
for voice in voices.voices:
    print(f"{voice.voice_id}: {voice.name}")

URL から変換する

import requests
from io import BytesIO
from elevenlabs import ElevenLabs

client = ElevenLabs()

audio_url = "https://storage.googleapis.com/eleven-public-cdn/audio/marketing/nicole.mp3"
response = requests.get(audio_url)
audio_data = BytesIO(response.content)

audio_stream = client.speech_to_speech.convert(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    audio=audio_data,
    model_id="eleven_multilingual_sts_v2",
    output_format="mp3_44100_128",
)

with open("converted.mp3", "wb") as f:
    for chunk in audio_stream:
        f.write(chunk)

音声設定のオーバーライド

保存済みのデフォルト設定を変更せずに、1 回のリクエストに限ってターゲット音声を微調整します。

from elevenlabs import VoiceSettings

audio_stream = client.speech_to_speech.convert(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    audio=audio_file,
    model_id="eleven_multilingual_sts_v2",
    voice_settings=VoiceSettings(
        stability=0.5,
        similarity_boost=0.75,
        style=0.0,
        use_speaker_boost=True,
    ),
)
  • 安定性:低いほど感情表現の幅が広がり(ソース音声により忠実に従い)、高いほど安定した話し方になります。
  • 類似性ブースト:高いほどターゲット音声の音色に近づきますが、ソース音声のアーティファクトが強調される場合があります。
  • スタイル:ターゲット音声の独自の特徴を強調します(v2 以降のモデル)。
  • スピーカーブースト:ターゲット音声の明瞭さを高めるポストプロセスです。

ノイズの多いソース音声のクリーンアップ

入力録音にノイズがある場合は、voice-isolator スキルで前処理するか、remove_background_noise=True を渡すことで、1 回の呼び出しで処理できます。

audio_stream = client.speech_to_speech.convert(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    audio=audio_file,
    model_id="eleven_multilingual_sts_v2",
    remove_background_noise=True,
)

よりクリーンな入力は、ほぼ常に変換品質を向上させます。モデルは音素と韻律を一致させようとするため、バックグラウンドノイズは妨げになります。

低レイテンシ PCM 入力

16-bit PCM モノラル、16kHz の生データがある場合は、file_format="pcm_s16le_16" を渡すとデコードがスキップされ、レイテンシが低下します。

audio_stream = client.speech_to_speech.convert(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    audio=pcm_bytes,
    model_id="eleven_multilingual_sts_v2",
    file_format="pcm_s16le_16",
)

品質が多少低下する代わりに、クエリパラメーターとして optimize_streaming_latency(0~4)を組み合わせると、さらにレイテンシを低減できます。

出力形式

形式説明
mp3_44100_128MP3 44.1kHz 128kbps(デフォルト)— Web/アプリに適しています
mp3_44100_192MP3 44.1kHz 192kbps(Creator+)— 高品質です
mp3_44100_64MP3 44.1kHz 64kbps — ファイルサイズが小さくなります
mp3_22050_32MP3 22.05kHz 32kbps — 最小サイズの MP3 です
pcm_16000生 PCM 16kHz — リアルタイムパイプライン向けです
pcm_24000生 PCM 24kHz — ストリーミングのバランスに優れています
pcm_44100生 PCM 44.1kHz(Pro+)— CD 品質です
pcm_48000生 PCM 48kHz(Pro+)— 最高品質です
ulaw_8000μ-law 8kHz — Twilio/電話向けです
alaw_8000A-law 8kHz — 電話向けです
opus_48000_64Opus 48kHz 64kbps — 効率的なストリーミング向けです

決定論的な出力

seed を渡すと、同じ入力を繰り返し変換した際に、ベストエフォートで同一の音声が返されます。テストや A/B 比較に便利です。

audio_stream = client.speech_to_speech.convert(
    voice_id="JBFqnCBsd6RMkjVDRZzb",
    audio=audio_file,
    model_id="eleven_multilingual_sts_v2",
    seed=12345,
)

入力音声のベストプラクティス

変換品質は入力録音の品質に左右されます。モデルが変更できるのは音色だけで、質の悪いソース音声を修復することはできません。実践的なルールをいくつか紹介します。

  • 表情豊かに話しましょう。 ささやき、叫び、笑い、泣きなどの表現はすべてモデルに引き継がれます。平坦な入力では、出力も平坦になります。
  • マイクのゲインに注意しましょう。 小さすぎるとモデルが音素を検出しにくくなり、大きすぎるとクリッピングが変換結果に混入します。クリッピングを避け、適切なピークレベルを目指してください。
  • アクセントと話すテンポは、ターゲットではなくソース音声から引き継がれます。 アメリカ英語のアクセントで読み上げて、イギリス英語の「George」をターゲットにすると、George の音色でアメリカ英語のアクセントになります。別のアクセントや言語に吹き替えるには、そのターゲットのアクセント/言語で話す人の録音を用意し、クローン音声またはライブラリ音声に変換してください。
  • まずノイズを除去しましょう。 remove_background_noise=True を渡すか、変換前に voice-isolator スキルでソース音声を処理してください。ノイズは TTS よりもこの処理に大きな影響を与えます。
  • 長い録音は分割しましょう。 5 分を超える録音は分割する必要があります。自然な間で区切り、各部分を変換してから、生成された音声を連結してください。

よくあるワークフロー

  • ナレーションの声を差し替える — 仮録音の演技を保ったまま、別のナレーターの声に差し替えます。
  • ローカライズ/吹き替え — ナレーションを、別の言語で話す同じ話者のクローン音声に変換します(eleven_multilingual_sts_v2 を使用)。
  • キャラクターボイスを作成する — 自分でセリフを演じ、その声をゲームやアニメーション向けの特徴的なキャラクターボイスに変換します。
  • 話者を匿名化する — 話した内容と話し方を保ちながら、認識可能な声をニュートラルな既製音声に置き換えます。
  • voice-isolator と組み合わせる — ノイズの多い現場録音を変換する前に、ソース音声の声を分離するか、remove_background_noise=True を設定します。
  • ボイスクローニングと組み合わせる — 短いサンプルからターゲット音声をクローンし、その voice_id を変換先としてここで使用します。

エラー処理

try:
    audio_stream = client.speech_to_speech.convert(
        voice_id="JBFqnCBsd6RMkjVDRZzb",
        audio=audio_file,
        model_id="eleven_multilingual_sts_v2",
    )
except Exception as e:
    print(f"Voice changer failed: {e}")

よくあるエラー:

  • 401:API キーが無効です
  • 422:パラメーターが無効です(voice_id、model_id、または指定した音声に対する file_format を確認してください)
  • 429:レート制限を超過しました

参考資料

コメント