curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "videoretalk",
"video_url": "https://example.com/speaker.mp4",
"audio_url": "https://example.com/target-speech.wav"
}
'{
"created": 1775200000,
"id": "task-unified-1775200000-xyz12345",
"model": "videoretalk",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 90,
"video_duration": 0
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 480,
"user_group": "default"
}
}{
"error": {
"code": "missing_required_params",
"message": "Missing required parameter: video_url or audio_url",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: videoretalk",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}VideoRetalk
- Generación de movimiento labial en video impulsada por audio; reemplaza el movimiento labial de la persona en el video para que coincida con el audio objetivo
- Modo de procesamiento asíncrono, use el ID de tarea devuelto para consultar
- Los enlaces de video generados son válidos por 24 horas, guárdelos cuanto antes
Escenarios de aplicación típicos:
- Doblaje multilingüe: reemplaza el movimiento labial del video original con doblaje en otro idioma
- Presentador virtual: impulsa el video del personaje con audio generado por TTS
- Producción publicitaria: genera rápidamente versiones publicitarias en distintos idiomas con el mismo material de video
- Formación educativa: reemplaza el video del instructor con explicaciones en distintos idiomas
Notas importantes:
- Las URL de entrada deben ser accesibles públicamente en internet
- El video debe contener al menos un rostro; de lo contrario, la tarea fallará
- En escenarios con múltiples rostros, asegúrese de pasar
ref_image_url
curl --request POST \
--url https://api.evolink.ai/v1/videos/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "videoretalk",
"video_url": "https://example.com/speaker.mp4",
"audio_url": "https://example.com/target-speech.wav"
}
'{
"created": 1775200000,
"id": "task-unified-1775200000-xyz12345",
"model": "videoretalk",
"object": "video.generation.task",
"progress": 0,
"status": "pending",
"task_info": {
"can_cancel": false,
"estimated_time": 90,
"video_duration": 0
},
"type": "video",
"usage": {
"billing_rule": "per_second",
"credits_reserved": 480,
"user_group": "default"
}
}{
"error": {
"code": "missing_required_params",
"message": "Missing required parameter: video_url or audio_url",
"type": "invalid_request_error"
}
}{
"error": {
"code": "unauthorized",
"message": "Invalid or expired token",
"type": "authentication_error"
}
}{
"error": {
"code": "insufficient_quota",
"message": "Insufficient quota. Please top up your account.",
"type": "insufficient_quota"
}
}{
"error": {
"code": "model_access_denied",
"message": "Token does not have access to model: videoretalk",
"type": "invalid_request_error"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Too many requests, please try again later",
"type": "rate_limit_error"
}
}{
"error": {
"code": "internal_error",
"message": "Internal server error",
"type": "api_error"
}
}Autorizaciones
##Todas las interfaces requieren autenticación con Bearer Token##
Obtener API Key:
Visita la página de administración de API Key para obtener tu API Key
Agrégalo en el encabezado de solicitud:
Authorization: Bearer YOUR_API_KEY
Cuerpo
Nombre del modelo
videoretalk "videoretalk"
URL del video de entrada que contiene la persona cuyo movimiento labial se reemplazará
Requisitos:
- URL de video accesible públicamente en internet
- Formatos: MP4, MOV y otros formatos comunes
- El video debe contener un rostro claramente visible
- Duración recomendada:
2~300segundos
"https://example.com/speaker.mp4"
URL del audio objetivo; la persona en el video hablará sincronizando con este audio
Requisitos:
- URL de audio accesible públicamente en internet
- Formatos: WAV, MP3, M4A y otros formatos comunes
- Se recomienda que sea contenido de voz hablada
"https://example.com/target-speech.wav"
URL de imagen de referencia facial
Cuando el video contiene múltiples rostros, use esta imagen para especificar el rostro objetivo cuyo movimiento labial se reemplazará
Requisitos:
- La imagen debe contener el rostro frontal de la persona objetivo
- Solo es necesario cuando el video contiene múltiples rostros
"https://example.com/target-person-face.jpg"
Cuando la duración del audio > duración del video, indica si se extiende automáticamente el video a la duración del audio
true: duración de salida = duración del audio (el video se extiende automáticamente)false: duración de salida = min(duración del video, duración del audio)
false
Umbral de confianza para la coincidencia facial
- Rango:
120~200 - Cuanto menor es el valor, más fácil es la coincidencia (puede haber coincidencias incorrectas)
- Cuanto mayor es el valor, más estricta es la coincidencia (puede fallar la coincidencia)
- Si aparece el error "no se encontró rostro coincidente", reduzca el valor apropiadamente (por ejemplo,
140) - Si coincide con el rostro incorrecto, aumente el valor apropiadamente (por ejemplo,
190)
120 <= x <= 200170
Dirección de callback HTTPS tras completar la tarea
Momento del callback:
- Se activa cuando la tarea se completa (completed), falla (failed) o se cancela (cancelled)
- Se envía tras confirmar la facturación
Restricciones de seguridad:
- Solo se admite el protocolo HTTPS
- Prohibido hacer callback a direcciones IP internas (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)
- La URL no debe superar los
2048caracteres
Mecanismo de callback:
- Tiempo de espera:
10segundos - Máximo
3reintentos tras fallo (respectivamente1/2/4segundos después del fallo) - El formato del cuerpo de respuesta del callback es igual al formato de retorno de la interfaz de consulta de tareas
- Si la dirección de callback devuelve código de estado 2xx se considera exitoso; otros códigos activan reintentos
"https://your-domain.com/webhooks/video-task-completed"
Respuesta
Tarea de generación de video con sincronización labial creada con éxito
Marca de tiempo de creación de la tarea
1775200000
ID de tarea
"task-unified-1775200000-xyz12345"
Nombre del modelo realmente utilizado
"videoretalk"
Tipo específico de la tarea
video.generation.task Porcentaje de progreso de la tarea (0-100)
0 <= x <= 1000
Estado de la tarea
| Estado | progress | Descripción |
|---|---|---|
pending | 0~10 | En espera de procesamiento |
processing | 10~80 | En procesamiento |
completed | 100 | Completado |
failed | 0 | Fallido |
pending, processing, completed, failed "pending"
Información detallada de la tarea de video
Show child attributes
Show child attributes
Tipo de salida de la tarea
video "video"
Información de uso y facturación
Show child attributes
Show child attributes