Zur Navigation springen

API-Anleitung für Videosynchronisation

Bei der Videosynchronisation werden übersetzte Audioinhalte mit lippensynchronen Videos kombiniert, sodass synchronisierte Inhalte in der Zielsprache natürlich aussehen. Sie können entweder den integrierten Synchronisierungsablauf von Sync Labs mit dubParams verwenden oder selbst übersetztes Audio bereitstellen und Sync Labs für den lip syncsschritt verwenden.

Voraussetzungen - A Sync Labs API Schlüssel - Ein Quellvideo (URL oder hochgeladenes Asset) - Für integriertes Überspielen: Quellaudio in der Videodatei - Für manuelles Überspielen: übersetztes Audio in der Zielsprache (von einem TTS-Dienst oder einem menschlichen Synchronsprecher)

Installieren Sie den SDK für Ihre Sprache:

# Python
pip install syncsdk
# TypeScript
npm i @sync.so/sdk

Legen Sie Ihren API-Schlüssel fest:

export SYNC_API_KEY="your-api-key"

Integriertes API-Überspielen mit dubParams

Verwenden Sie dubParams, wenn Sie möchten, dass Sync Labs das Quellaudio aus dem Video extrahiert, es über ElevenLabs übersetzt und überspielt und dann die lip sync für das überspielte Ergebnis durchführt. Dies ist der einfachste Weg, wenn Ihr Eingabevideo bereits über Quellaudio verfügt. Wenn dubParams vorhanden ist: - Stellen Sie einen einzelnen video-Eingang mit Audio bereit - Stellen Sie dubParams.targetLang auf den Zielsprachencode ein, z. B. "es", "fr" oder "hi" - optionales Set dubParams.sourceLang; Lassen Sie es weg oder verwenden Sie "auto" für die automatische Erkennung der Quellsprache - dubParams.numSpeakers ist veraltet und wird ignoriert - Synchronisation v2 erkennt Lautsprecher automatisch - Fügen Sie keinen separaten Audioeingang für den übersetzten Titel hinzu. Audioeingänge werden ignoriert, während das Überspielen aktiviert ist

dub_with_params.ts
import \{ SyncClient } from "@sync.so/sdk";
const sync = new SyncClient();
const response = await sync.generations.create(\{
input: [
\{
type: "video",
url: "https://your-cdn.com/original-video-with-audio.mp4",
},
],
model: "lipsync-2",
dubParams: \{
providerName: "elevenlabs",
targetLang: "es",
sourceLang: "auto",
},
});
console.log(`Dubbing job submitted: $\{response.id}`);

<Note> Die integrierte Synchronisierung wird durch ElevenLabs unterstützt. Wenn das Video kein verwendbares Quellaudio hat, stellen Sie stattdessen Ihr eigenes übersetztes Audio bereit und folgen Sie der Anleitung pipeline unten. </Note>

Manuelle Synchronisationspipeline

<Steps> <Step title=“Bereiten Sie Ihr übersetztes Audio vor”> Generieren Sie übersetzte Audiodaten mit einem Text-zu-Sprache-Dienst wie ElevenLabs, Google Cloud TTS oder Amazon Polly. Sie können auch einen menschlichen Synchronsprecher einsetzen. Das Audio muss auf einem öffentlich zugänglichen URL gehostet werden. Wenn Sie bereits über eine übersetzte Audiodatei verfügen, laden Sie diese auf Ihren Hosting-Dienst hoch und schnappen Sie sich den URL. </Step> <Step title=“Senden Sie an Sync Labs API”> Senden Sie das Quellvideo und das übersetzte Audio an den Sync Labs API. Der API generiert neue Lippenbewegungen passend zum übersetzten Audio. <CodeBlocks> ```typescript dub.ts import { SyncClient } from “@sync.so/sdk”;

const sync = new SyncClient();

// Source video with original language const videoUrl = “https://your-cdn.com/original-video.mp4”; // Translated audio in target language const dubbedAudioUrl = “https://your-cdn.com/translated-audio-spanish.wav”;

const response = await sync.generations.create({ input: [ { type: “video”, url: videoUrl }, { type: “audio”, url: dubbedAudioUrl }, ], model: “lipsync-2”, options: { sync_mode: “cut_off” }, });

const jobId = response.id; console.log(Synchronisation job submitted: $\{jobId});

```python dub.py
import time
from sync import Sync
from sync.common import Audio, Video, GenerationOptions
sync = Sync()
# Source video with original language
video_url = "https://your-cdn.com/original-video.mp4"
# Translated audio in target language
dubbed_audio_url = "https://your-cdn.com/translated-audio-spanish.wav"
response = sync.generations.create(
input=[
Video(url=video_url),
Audio(url=dubbed_audio_url),
],
model="lipsync-2",
options=GenerationOptions(sync_mode="cut_off"),
)
job_id = response.id
print(f"Synchronisation job submitted: \{job_id}")

</CodeBlocks> </Step> <Step title=“Umfrage zum Abschluss”> Überprüfen Sie den Generierungsstatus, bis er abgeschlossen ist. Verwenden Sie für Produktionssysteme webhooks anstelle von Polling. <CodeBlocks> ```typescript let generation = await sync.generations.get(jobId); while (![“COMPLETED”, “FAILED”, “REJECTED”].includes(generation.status)) { console.log(Status: $\{generation.status}); await new Promise((r) => setTimeout(r, 10000)); generation = await sync.generations.get(jobId); }

if (generation.status === “COMPLETED”) { console.log(Dubbed video ready: $\{generation.outputUrl}); } else { console.log(Dubbing failed for job $\{jobId}); }

```python
generation = sync.generations.get(job_id)
while generation.status not in ["COMPLETED", "FAILED", "REJECTED"]:
print(f"Status: \{generation.status}")
time.sleep(10)
generation = sync.generations.get(job_id)
if generation.status == "COMPLETED":
print(f"Dubbed video ready: \{generation.output_url}")
else:
print(f"Dubbing failed for job \{job_id}")

</CodeBlocks> </Step> <Step title=“Laden Sie das synchronisierte Video herunter”> Der output_url (Python) oder outputUrl (TypeScript) enthält einen direkten Link zum synchronisierten Video. Laden Sie es herunter oder geben Sie es an Ihre Lieferung pipeline weiter. </Step> </Steps>

Verwendung der ElevenLabs-Integration

Sync Labs verfügt über eine integrierte ElevenLabs-Integration, die Text-zu-Sprache und lip sync in einem einzigen API-Anruf übernimmt. Anstatt Audio separat zu generieren, übergeben Sie den übersetzten Text direkt. <CodeBlocks>```typescript dub_with_elevenlabs.ts import { SyncClient } from “@sync.so/sdk”;

const sync = new SyncClient();

const response = await sync.generations.create({ input: [ { type: “video”, url: “https://your-cdn.com/original-video.mp4”, }, { type: “text”, provider: { name: “elevenlabs”, voiceId: “EXAVITQu4vr4xnSDxMaL”, script: “Hola, bienvenidos a nuestra plataforma. Hoy les mostraremos las nuevas funciones.”, stability: 0.5, similarityBoost: 0.75, }, }, ], model: “lipsync-2”, options: { sync_mode: “cut_off” }, });

console.log(Job ID: $\{response.id});

```python dub_with_elevenlabs.py
from sync import Sync
from sync.common import Video, TTS, GenerationOptions
sync = Sync()
response = sync.generations.create(
input=[
Video(url="https://your-cdn.com/original-video.mp4"),
TTS(
provider=\{
"name": "elevenlabs",
"voiceId": "EXAVITQu4vr4xnSDxMaL",
"script": "Hola, bienvenidos a nuestra plataforma. Hoy les mostraremos las nuevas funciones.",
"stability": 0.5,
"similarityBoost": 0.75,
}
),
],
model="lipsync-2",
options=GenerationOptions(sync_mode="cut_off"),
)
print(f"Job ID: \{response.id}")

</CodeBlocks> <Note> Das Feld script hat maximal 5.000 Zeichen pro Generation. Teilen Sie längere Skripte in Segmente auf. Einzelheiten zur ElevenLabs-Einrichtung finden Sie auf der Seite Integrationen. </Note>

Unterstützte Sprachen

Die Lipsync-Modelle von Sync Labs sind sprachunabhängig. Sie arbeiten mit Audio in jeder Sprache - die Modelle analysieren Mundformen anhand der Audiowellenform, nicht anhand der Sprache selbst. Wenn Ihr übersetzter Ton klar und gut produziert ist, stimmt die lip syncsausgabe überein. Wählen Sie für den integrierten dubParams-Flow einen der unterstützten targetLang-Codes in der API-Referenz. Wenn Sie eine Sprache außerhalb dieser Liste benötigen oder mehr Kontrolle über die Übersetzung wünschen, generieren oder zeichnen Sie die übersetzten Audiodaten separat auf und verwenden Sie das Handbuch pipeline oben. Eine vollständige Komplettlösung für die Übersetzung von pipeline (Transkription, Übersetzung, TTS und Lipsync) finden Sie im Video Translation API-Handbuch.

Synchronisation mit mehreren Sprechern

Bei Videos mit mehreren Sprechern nutzen Sie die Segmente API, um unterschiedliche Audiospuren unterschiedlichen Zeitbereichen zuzuordnen. Jedes Segment kann auf einen separaten Audioeingang mit einer bestimmten Stimme verweisen.

from sync import Sync
from sync.common import Audio, Video
sync = Sync()
response = sync.generations.create(
input=[
Video(url="https://your-cdn.com/interview.mp4"),
Audio(url="https://your-cdn.com/speaker-a-spanish.wav", ref_id="speaker_a"),
Audio(url="https://your-cdn.com/speaker-b-spanish.wav", ref_id="speaker_b"),
],
segments=[
\{"startTime": 0, "endTime": 15, "audioInput": \{"refId": "speaker_a"}},
\{"startTime": 15, "endTime": 30, "audioInput": \{"refId": "speaker_b"}},
],
model="lipsync-2",
)

Eine vollständige Dokumentation und weitere Beispiele finden Sie im Segment-Leitfaden.

Leistungstipps

<CardGroup cols={1}> <Card title=“Verwenden Sie webhooks für die Produktion” icon=“bell”> Ersetzen Sie die Abfrage durch webhooks für Produktions-pipelines. Sie erhalten eine POST-Benachrichtigung, wenn der Auftrag abgeschlossen ist, wodurch unnötige API-Aufrufe vermieden werden. </Card> <Card title=“Verwenden Sie die batch-Verarbeitung für die Massenüberspielung” icon=“layer-group”> Eine ganze Videobibliothek überspielen? Mit dem Batch-API können Sie bis zu 500 Generationen in einem einzigen Vorgang mit einer Bearbeitungszeit von 24 Stunden einreichen. </Card> <Card title=“Wählen Sie das richtige Modell” icon=“sliders”> Verwenden Sie lipsync-2 für die meisten Synchronisationsaufträge. Verwenden Sie sync-3 für Synchronisation in Produktionsqualität, komplexe Szenen, Hindernisse, Profilwinkel oder 4K-Ausgabe. Wechseln Sie zu lipsync-2-pro, wenn Sie erstklassige Gesichtsdetails zu einem günstigeren Preis als sync-3 benötigen. </Card> <Card title=“Passen Sie die Audiodauer an” icon=“clock”> Stellen Sie sync_mode ein, um zu steuern, was passiert, wenn Audio- und Videolängen unterschiedlich sind. cut_off schneidet überschüssiges Audio ab. bounce wiederholt das Video, um es an die Audiolänge anzupassen. Die vollständige Verhaltensmatrix finden Sie unter Sync-Modus. </Card> </CardGroup> <llms-ignore>

Nächste Schritte - Video Translation API-Anleitung - Erstellen Sie eine vollständige Transkription-zu-Lipsync-pipeline - Batch-API - Hunderte von Synchronisationsaufträgen gleichzeitig verarbeiten - Segment-Leitfaden - Behandeln Sie Videos mit mehreren Sprechern - Leitfaden für Lip sync mit Text-zu-Sprache - Kombinieren Sie TTS mit Lipsync

</llms-ignore>