Kurzanleitung für professionelles Voice Cloning

Dieser Leitfaden zeigt Ihnen, wie Sie mit der PVC API eine Professional Voice Clone erstellen.

Dieser Leitfaden zeigt Ihnen, wie Sie mit der PVC API einen professionellen Stimmklon (PVC) erstellen. Informationen zum Erstellen eines PVC über das Dashboard finden Sie im Produktleitfaden Professioneller Stimmklon.

Zum Erstellen eines PVC benötigen Sie mindestens den Creator-Tarif.

Eine ausführliche Erklärung, wie IVC und PVC technisch funktionieren und wann Sie welche Option wählen sollten, finden Sie unter Stimmklonen: So funktioniert es.

Wenn Sie sich nicht sicher sind, was rechtlich zulässig ist, lesen Sie bitte die Nutzungsbedingungen und unsere Informationen zur KI-Sicherheit .

Das Erstellen eines PVC über die API umfasst deutlich mehr Schritte als das Erstellen eines Instant Voice Clone. PVCs sind komplexer und benötigen mehr Daten sowie Finetuning, um einen hochwertigen Klon zu erstellen.

Die Professional Voice Clone API verwenden

Dieser Leitfaden setzt voraus, dass Sie Ihren API-Schlüssel und das SDK eingerichtet haben. Falls noch nicht geschehen, schließen Sie zuerst den Quickstart ab.

1

PVC-Stimme erstellen

Erstellen Sie je nach bevorzugter Sprache eine neue Datei mit dem Namen example.py oder example.mts und fügen Sie folgenden Code ein, um eine PVC-Stimme zu erstellen:

# example.py
import os
import time
import base64
from contextlib import ExitStack
from io import BytesIO
from dotenv import load_dotenv
from elevenlabs.client import ElevenLabs
load_dotenv()
elevenlabs = ElevenLabs(
api_key=os.getenv("ELEVENLABS_API_KEY"),
)
voice = elevenlabs.voices.pvc.create(
name="My Professional Voice Clone",
language="en",
description="A professional voice clone of my voice"
)
print(voice)
2

Audiodateien hochladen

Als Nächstes laden wir die Audiodateien hoch, die zum Trainieren des PVC verwendet werden. Weitere Informationen dazu, wie Sie mit Ihren Audiodateien die besten Ergebnisse erzielen, finden Sie im Abschnitt Tipps und Vorschläge des PVC-Produktleitfadens.

# Define the list of file paths explicitly
# Replace with the paths to your audio and/or video files.
# The more files you add, the better the clone will be.
sample_file_paths = [
"/path/to/your/first_sample.mp3",
"/path/to/your/second_sample.wav",
"relative/path/to/another_sample.mp4"
]
samples = None
files_to_upload = []
# Use ExitStack to manage multiple open files
with ExitStack() as stack:
for filepath in sample_file_paths:
# Open each file and add it to the stack
audio_file = stack.enter_context(open(filepath, "rb"))
filename = os.path.basename(filepath)
# Create a File object for the SDK
files_to_upload.append(
BytesIO(audio_file.read())
)
samples = elevenlabs.voices.pvc.samples.create(
voice_id=voice.voice_id,
files=files_to_upload # Pass the list of File objects
)
3

Sprechertrennung starten

In diesem Schritt wird versucht, die Audiodateien in einzelne Sprecher zu trennen. Dies ist erforderlich, wenn Sie Audio mit mehreren Sprechern hochladen.

sample_ids_to_check = []
for sample in samples:
if sample.sample_id:
print(f"Starting separation for sample: {sample.sample_id}")
elevenlabs.voices.pvc.samples.speakers.separate(
voice_id=voice.voice_id,
sample_id=sample.sample_id
)
sample_ids_to_check.append(sample.sample_id)
while sample_ids_to_check:
# Create a copy of the list to iterate over, so we can remove items from the original
ids_in_batch = list(sample_ids_to_check)
for sample_id in ids_in_batch:
status_response = elevenlabs.voices.pvc.samples.speakers.get(
voice_id=voice.voice_id,
sample_id=sample_id
)
status = status_response.status
print(f"Sample {sample_id} status: {status}")
if status == "completed" or status == "failed":
sample_ids_to_check.remove(sample_id)
if sample_ids_to_check:
# Wait before the next poll cycle
time.sleep(5) # Wait for 5 seconds
print("All samples have been processed or removed from polling.")
4

Sprecher-Audio abrufen

Da der vorherige Schritt einige Zeit benötigt, sollten Sie den folgenden Schritt nach Abschluss des vorherigen Schritts in einem separaten Prozess ausführen.

Nach Abschluss der Sprechertrennung erhalten Sie für jedes Sample eine Liste von Sprechern. Bei Samples mit mehreren Sprechern müssen Sie den Sprecher auswählen, den Sie für den PVC verwenden möchten. Um den Sprecher zu identifizieren, können Sie das Audio für jeden Sprecher abrufen und anhören.

# Get the list of samples from the voice created in Step 3
voice = elevenlabs.voices.get(voice_id=voice_id)
samples = voice.samples
# Loop over each sample and save the audio for each speaker to a file
speaker_audio_output_dir = "path/to/speakers/"
if not os.path.exists(speaker_audio_output_dir):
os.makedirs(speaker_audio_output_dir)
for sample in samples:
speaker_info = elevenlabs.voices.pvc.samples.speakers.get(
voice_id=voice.voice_id,
sample_id=sample.sample_id
)
# Proceed only if separation is actually complete
if getattr(speaker_info, 'status', 'unknown') != "completed":
continue
if hasattr(speaker_info, 'speakers') and speaker_info.speakers:
speaker_list = speaker_info.speakers
if isinstance(speaker_info.speakers, dict):
speaker_list = speaker_info.speakers.values()
for speaker in speaker_list:
audio_response = elevenlabs.voices.pvc.samples.speakers.audio.get(
voice_id=voice.voice_id,
sample_id=sample.sample_id,
speaker_id=speaker.speaker_id
)
audio_base64 = audio_response.audio_base_64
audio_data = base64.b64decode(audio_base64)
output_filename = os.path.join(speaker_audio_output_dir, f"sample_{sample.sample_id}_speaker_{speaker.speaker_id}.mp3")
with open(output_filename, "wb") as f:
f.write(audio_data)
5

Samples mit Sprecher-IDs aktualisieren

Nach Abschluss der Sprechertrennung können Sie die Samples aktualisieren, um auszuwählen, welchen Sprecher Sie für den PVC verwenden möchten.

elevenlabs.voices.pvc.samples.update(
voice_id=voice.voice_id,
sample_id=sample.sample_id,
selected_speaker_ids=[speaker.speaker_id]
)
6

PVC verifizieren

Bevor das Training beginnen kann, ist ein Verifizierungsschritt erforderlich, um sicherzustellen, dass Sie die Berechtigung haben, die Stimme zu verwenden. Fordern Sie zuerst das Verifizierungs-CAPTCHA an.

captcha_response = elevenlabs.voices.pvc.verification.captcha.get(voice.voice_id)
# Save captcha image to file
captcha_buffer = base64.b64decode(captcha_response)
with open('captcha.png', 'wb') as f:
f.write(captcha_buffer)

Das Bild enthält mehrere Textzeilen, die der Eigentümer der Stimme laut vorlesen und aufnehmen muss. Reichen Sie die Aufnahme anschließend ein, um die Identität des Stimmeigentümers zu verifizieren.

elevenlabs.voices.pvc.verification.captcha.verify(
voice_id=voice.voice_id,
recording=open('path/to/recording.mp3', 'rb')
)
7

(Optional) Manuelle Verifizierung anfordern

Wenn Sie das CAPTCHA nicht verifizieren können, können Sie eine manuelle Verifizierung anfordern. Beachten Sie, dass die Bearbeitung länger dauert.

Verwenden Sie dies nur, wenn die vorherigen Verifizierungsschritte fehlgeschlagen sind oder nicht möglich sind, beispielsweise wenn der Eigentümer der Stimme sehbehindert ist.

Bitte kontaktieren Sie den Support, um eine Liste der für die manuelle Verifizierung erforderlichen Dateien zu erhalten, da jeder Fall individuell sein kann.

elevenlabs.voices.pvc.verification.request(
voice_id=voice.voice_id,
files=[open('path/to/verification/files.txt', 'rb')],
)
8

PVC trainieren

Starten Sie als Nächstes den Trainingsprozess. Die Dauer hängt von der Länge und Anzahl der bereitgestellten Samples ab.

elevenlabs.voices.pvc.train(
voice_id=voice.voice_id,
# Specify the model the PVC should be trained on
model_id="eleven_multilingual_v2"
)
# Poll the fine tuning status until it is complete or fails
# This example specifically checks for the eleven_multilingual_v2 model
while True:
voice_details = elevenlabs.voices.get(voice_id=voice.voice_id)
fine_tuning_state = None
if voice_details.fine_tuning and voice_details.fine_tuning.state:
fine_tuning_state = voice_details.fine_tuning.state.get("eleven_multilingual_v2")
if fine_tuning_state:
progress = None
if voice_details.fine_tuning.progress and voice_details.fine_tuning.progress.get("eleven_multilingual_v2"):
progress = voice_details.fine_tuning.progress.get("eleven_multilingual_v2")
print(f"Fine tuning progress: {progress}")
if fine_tuning_state == "fine_tuned" or fine_tuning_state == "failed":
print("Fine tuning completed or failed")
break
# Wait for 5 seconds before polling again
time.sleep(5)
9

Neu erstellte Stimme verwenden

Sobald der PVC verifiziert ist, können Sie ihn wie jede andere Stimme verwenden. Weitere Informationen zur Verwendung einer Stimme finden Sie im Text to Speech-Quickstart.

Nächste Schritte