> ## Documentation Index
> Fetch the complete documentation index at: https://docs.evolink.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# VideoRetalk

> - Génération de mouvements labiaux vidéo pilotée par audio : remplace les mouvements labiaux du personnage dans la vidéo par ceux correspondant à l'audio cible
- Traitement asynchrone : utilisez l'ID de tâche retourné pour [interroger le résultat](/fr/api-manual/task-management/get-task-detail)
- Le lien vidéo généré est valable 24 heures, veuillez le sauvegarder rapidement

**Cas d'usage typiques :**
- Doublage multilingue : remplacer les mouvements labiaux de la vidéo originale par ceux d'un doublage dans une autre langue
- Présentateur virtuel : animer une vidéo de personnage avec un audio généré par TTS
- Production publicitaire : générer rapidement des versions publicitaires en différentes langues à partir d'une même vidéo source
- Formation et éducation : remplacer les explications d'un formateur en vidéo par celles dans différentes langues

**Remarques importantes :**
- Les URL d'entrée doivent être accessibles depuis Internet
- La vidéo doit contenir un visage humain, sinon la tâche échouera
- En cas de plusieurs visages, veillez à renseigner `ref_image_url`



## OpenAPI

````yaml fr/api-manual/video-series/videoretalk/videoretalk-video-generate.json POST /v1/videos/generations
openapi: 3.1.0
info:
  title: Interface VideoRetalk - Génération de Portrait Animé par Audio
  description: >-
    Génération de mouvements labiaux vidéo pilotée par audio. Prenez une vidéo
    d'une personne qui parle et un audio cible, puis remplacez les mouvements
    labiaux du personnage dans la vidéo par ceux correspondant à l'audio cible.
  license:
    name: MIT
  version: 1.0.0
servers:
  - url: https://api.evolink.ai
    description: Environnement de production
security:
  - bearerAuth: []
tags:
  - name: Portrait Animé par Audio
    description: >-
      Interfaces relatives à la génération de portrait animé par audio
      VideoRetalk
paths:
  /v1/videos/generations:
    post:
      tags:
        - Portrait Animé par Audio
      summary: VideoRetalk - Génération de Portrait Animé par Audio
      description: >-
        - Génération de mouvements labiaux vidéo pilotée par audio : remplace
        les mouvements labiaux du personnage dans la vidéo par ceux
        correspondant à l'audio cible

        - Traitement asynchrone : utilisez l'ID de tâche retourné pour
        [interroger le résultat](/fr/api-manual/task-management/get-task-detail)

        - Le lien vidéo généré est valable 24 heures, veuillez le sauvegarder
        rapidement


        **Cas d'usage typiques :**

        - Doublage multilingue : remplacer les mouvements labiaux de la vidéo
        originale par ceux d'un doublage dans une autre langue

        - Présentateur virtuel : animer une vidéo de personnage avec un audio
        généré par TTS

        - Production publicitaire : générer rapidement des versions
        publicitaires en différentes langues à partir d'une même vidéo source

        - Formation et éducation : remplacer les explications d'un formateur en
        vidéo par celles dans différentes langues


        **Remarques importantes :**

        - Les URL d'entrée doivent être accessibles depuis Internet

        - La vidéo doit contenir un visage humain, sinon la tâche échouera

        - En cas de plusieurs visages, veillez à renseigner `ref_image_url`
      operationId: createVideoRetalkGeneration
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/VideoRetalkRequest'
            examples:
              minimal:
                summary: Appel minimal
                value:
                  model: videoretalk
                  video_url: https://example.com/speaker.mp4
                  audio_url: https://example.com/target-speech.wav
              multi_face:
                summary: Scène multi-visages + extension vidéo
                value:
                  model: videoretalk
                  video_url: https://example.com/two-people-talking.mp4
                  audio_url: https://example.com/long-speech.wav
                  ref_image_url: https://example.com/target-person-face.jpg
                  video_extension: true
                  query_face_threshold: 150
              adjust_threshold:
                summary: Ajuster la sensibilité de correspondance faciale
                value:
                  model: videoretalk
                  video_url: https://example.com/speaker.mp4
                  audio_url: https://example.com/speech.wav
                  query_face_threshold: 140
      responses:
        '200':
          description: Tâche de génération de portrait animé créée avec succès
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/VideoRetalkResponse'
        '400':
          description: Paramètres de requête invalides
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: missing_required_params
                  message: 'Missing required parameter: video_url or audio_url'
                  type: invalid_request_error
        '401':
          description: Non authentifié, token invalide ou expiré
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: unauthorized
                  message: Invalid or expired token
                  type: authentication_error
        '402':
          description: Quota insuffisant, rechargement nécessaire
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: insufficient_quota
                  message: Insufficient quota. Please top up your account.
                  type: insufficient_quota
        '403':
          description: Accès refusé
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: model_access_denied
                  message: 'Token does not have access to model: videoretalk'
                  type: invalid_request_error
        '429':
          description: Limite de fréquence de requêtes dépassée
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: rate_limit_exceeded
                  message: Too many requests, please try again later
                  type: rate_limit_error
        '500':
          description: Erreur interne du serveur
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              example:
                error:
                  code: internal_error
                  message: Internal server error
                  type: api_error
components:
  schemas:
    VideoRetalkRequest:
      type: object
      required:
        - model
        - video_url
        - audio_url
      properties:
        model:
          type: string
          description: Nom du modèle
          enum:
            - videoretalk
          default: videoretalk
          example: videoretalk
        video_url:
          type: string
          format: uri
          description: >-
            URL de la vidéo d'entrée contenant le personnage dont les mouvements
            labiaux doivent être remplacés


            **Exigences :**

            - URL vidéo accessible depuis Internet

            - Formats : MP4, MOV et autres formats courants

            - La vidéo doit contenir un visage clairement visible

            - Durée recommandée : `2` à `300` secondes
          example: https://example.com/speaker.mp4
        audio_url:
          type: string
          format: uri
          description: >-
            URL de l'audio cible ; le personnage de la vidéo parlera selon cet
            audio


            **Exigences :**

            - URL audio accessible depuis Internet

            - Formats : WAV, MP3, M4A et autres formats courants

            - De préférence, il doit s'agir d'une voix humaine parlée
          example: https://example.com/target-speech.wav
        ref_image_url:
          type: string
          format: uri
          description: >-
            URL de l'image de référence du visage


            Lorsque la vidéo contient **plusieurs visages**, utilisez cette
            image pour indiquer le visage cible dont les mouvements labiaux
            doivent être remplacés


            **Exigences :**

            - L'image doit contenir le visage de face du personnage cible

            - Uniquement nécessaire lorsque la vidéo contient plusieurs visages
          example: https://example.com/target-person-face.jpg
        video_extension:
          type: boolean
          description: >-
            Lorsque la durée de l'audio est supérieure à celle de la vidéo,
            indique si la vidéo doit être automatiquement étendue à la durée de
            l'audio


            - `true` : durée de sortie = durée de l'audio (la vidéo est
            automatiquement étendue)

            - `false` : durée de sortie = min(durée de la vidéo, durée de
            l'audio)
          default: false
          example: false
        query_face_threshold:
          type: integer
          description: >-
            Seuil de confiance pour la correspondance faciale


            - Plage : `120` à `200`

            - Plus la valeur est basse, plus la correspondance est facile
            (risque de faux positifs)

            - Plus la valeur est haute, plus la correspondance est stricte
            (risque de non-correspondance)

            - Si l'erreur `aucun visage correspondant trouvé` apparaît, réduisez
            légèrement (par ex. `140`)

            - Si un mauvais visage est trouvé, augmentez légèrement (par ex.
            `190`)
          default: 170
          minimum: 120
          maximum: 200
          example: 170
        callback_url:
          type: string
          description: >-
            URL de rappel HTTPS après la fin de la tâche


            **Déclenchement du rappel :**

            - Déclenché lorsque la tâche est terminée (completed), échouée
            (failed) ou annulée (cancelled)

            - Envoyé après confirmation de la facturation


            **Restrictions de sécurité :**

            - Uniquement le protocole HTTPS est pris en charge

            - Les rappels vers des adresses IP internes sont interdits
            (127.0.0.1, 10.x.x.x, 172.16-31.x.x, 192.168.x.x, etc.)

            - La longueur de l'URL ne doit pas dépasser `2048` caractères


            **Mécanisme de rappel :**

            - Délai d'expiration : `10` secondes

            - Maximum `3` nouvelles tentatives en cas d'échec (à `1` s / `2` s /
            `4` s après l'échec respectivement)

            - Le format du corps de rappel est identique à celui retourné par
            l'interface de requête de tâche

            - Un code de statut 2xx de l'URL de rappel est considéré comme un
            succès ; tout autre code déclenche une nouvelle tentative
          format: uri
          example: https://your-domain.com/webhooks/video-task-completed
    VideoRetalkResponse:
      type: object
      properties:
        created:
          type: integer
          description: Horodatage de création de la tâche
          example: 1775200000
        id:
          type: string
          description: ID de la tâche
          example: task-unified-1775200000-xyz12345
        model:
          type: string
          description: Nom du modèle réellement utilisé
          example: videoretalk
        object:
          type: string
          enum:
            - video.generation.task
          description: Type spécifique de la tâche
        progress:
          type: integer
          description: Pourcentage de progression de la tâche (0-100)
          minimum: 0
          maximum: 100
          example: 0
        status:
          type: string
          description: |-
            Statut de la tâche

            | Statut | progress | Description |
            |------|----------|------|
            | `pending` | 0~10 | En attente de traitement |
            | `processing` | 10~80 | En cours de traitement |
            | `completed` | 100 | Terminé |
            | `failed` | 0 | Échec |
          enum:
            - pending
            - processing
            - completed
            - failed
          example: pending
        task_info:
          $ref: '#/components/schemas/VideoTaskInfo'
          description: Informations détaillées sur la tâche vidéo
        type:
          type: string
          enum:
            - video
          description: Type de sortie de la tâche
          example: video
        usage:
          $ref: '#/components/schemas/VideoUsage'
          description: Informations d'utilisation et de facturation
    ErrorResponse:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              description: Identifiant du code d'erreur
            message:
              type: string
              description: Description de l'erreur
            type:
              type: string
              description: Type d'erreur
    VideoTaskInfo:
      type: object
      properties:
        can_cancel:
          type: boolean
          description: Indique si la tâche peut être annulée
          example: false
        estimated_time:
          type: integer
          description: Temps d'achèvement estimé (secondes)
          minimum: 0
          example: 90
        video_duration:
          type: integer
          description: Durée estimée de la vidéo (secondes)
          example: 0
    VideoUsage:
      type: object
      description: Informations d'utilisation
      properties:
        billing_rule:
          type: string
          description: Règle de facturation
          enum:
            - per_second
          example: per_second
        credits_reserved:
          type: number
          description: >-
            Nombre de crédits estimés consommés (basé sur la durée de la vidéo
            et de l'audio)
          minimum: 0
          example: 480
        user_group:
          type: string
          description: Catégorie du groupe utilisateur
          example: default
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        ##Toutes les interfaces nécessitent une authentification par Bearer
        Token##


        **Obtenir une clé API :**


        Visitez la [page de gestion des clés
        API](https://evolink.ai/dashboard/keys) pour obtenir votre clé API


        **Ajoutez ceci dans l'en-tête de la requête :**

        ```

        Authorization: Bearer YOUR_API_KEY

        ```

````