voice-changer について
voice-changer は、録音音声を指定した声に変換する ElevenLabs のスキルです。感情やペース、話し方を保ち、Python、JavaScript、コマンドラインでの利用例を紹介しています。
主な機能
- 01録音音声を指定した声に変換
- 02感情や話し方を維持
- 03多言語モデルと英語モデルに対応
- 04リクエストごとの音声設定
- 05音声の入出力形式を選択
活用シーン
- 01録音したナレーションの声を変更
- 02別の言語への吹き替え
- 03ゲームやアニメ向けのキャラクターボイス制作
- 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_id | string(必須) | — | 使用するターゲット音声です。既成の音声 ID、クローン音声、またはライブラリーの音声を使用できます |
audio | file(必須) | — | パフォーマンス(感情、タイミング、話し方)が保持されるソース音声です |
model_id | string | eleven_english_sts_v2 | 29 言語には eleven_multilingual_sts_v2、英語のみには eleven_english_sts_v2 を使用します |
output_format | string | mp3_44100_128 | 下記の出力形式の表を参照してください |
voice_settings | JSON string | — | このリクエストに限り、保存されている音声設定を上書きします |
seed | integer | — | 可能な範囲で決定的なサンプリングを行います(0~4294967295) |
remove_background_noise | boolean | false | 変換前に、入力音声に分離モデルを適用します |
file_format | string | other | エンコード済みの音声には other、または 16 ビット PCM モノラル @ 16kHz リトルエンディアン(低レイテンシ)には pcm_s16le_16 を指定します |
optimize_streaming_latency | int(query) | — | 0~4。品質とレイテンシのバランスを調整します。4 が最速ですが、テキストノーマライザーが無効になります |
enable_logging | boolean(query) | true | ゼロリテンションモードにするには false を設定します(エンタープライズのみ。履歴/つなぎ合わせ機能が無効になります) |
モデル
| モデル ID | 言語 | 最適な用途 |
|---|---|---|
eleven_multilingual_sts_v2 | 29 | あらゆる用途に推奨されます。英語の音声でも英語モデルを上回ることがよくあります |
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_128 | MP3 44.1kHz 128kbps(デフォルト)— Web/アプリに適しています |
mp3_44100_192 | MP3 44.1kHz 192kbps(Creator+)— 高品質です |
mp3_44100_64 | MP3 44.1kHz 64kbps — ファイルサイズが小さくなります |
mp3_22050_32 | MP3 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_8000 | A-law 8kHz — 電話向けです |
opus_48000_64 | Opus 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:レート制限を超過しました