Tous les produits
Search
Centre de documentation

Alibaba Cloud Model Studio:Wan2.7 - référence de l'API de montage vidéo

Dernière mise à jour :Oct 22, 2026

Le modèle de montage vidéo Wan 2.7 accepte des entrées multimodales (texte, images et vidéos) pour le montage par instruction et le transfert de style .

Documentation connexe : Guide

Applicabilité

Le modèle, l'URL de l'endpoint et la clé API doivent tous appartenir à la même région. Les appels interrégions échouent.

  • Sélectionnez un modèle : Confirmez la région du modèle.
  • Sélectionnez une URL d'endpoint : Choisissez l'URL de l'endpoint correspondant à la région. Les URL HTTP et SDK DashScope sont prises en charge.
  • Configurez une clé API : Obtenez une clé API pour la région, puis configurez-la en tant que variable d'environnement.

RemarqueLes exemples de code de cette rubrique utilisent la région Singapour.

ImportantAlibaba Cloud Model Studio a publié des domaines spécifiques aux espaces de travail pour les régions Chine (Pékin) et Singapour. Les nouveaux domaines dédiés offrent des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous vous recommandons de migrer vers les nouveaux domaines :

  • Chine (Pékin) : passez de https://dashscope.aliyuncs.com à https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com
  • Singapour : passez de https://dashscope-intl.aliyuncs.com à https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com

{WorkspaceId} correspond à votre ID d'espace de travail, que vous pouvez trouver sur la page Détails de l'espace de travail dans la console Alibaba Cloud Model Studio. Le domaine existant reste entièrement fonctionnel.

HTTP

Les tâches de montage vidéo prennent généralement entre 1 et 5 minutes. L'API utilise des appels asynchrones avec deux étapes principales : Créer une tâche -> Interroger le résultat.

Étape 1 : Créer une tâche

Singapour

POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis

Pékin

POST https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis

Remplacez {WorkspaceId} par votre ID d'espace de travail réel.

Remarque

  • Une fois la tâche créée, utilisez le task_id renvoyé pour interroger le résultat. Le task_id est valide pendant 24 heures. Ne créez pas de tâches en double. Utilisez plutôt l'interrogation pour récupérer le résultat.
  • Pour obtenir des conseils destinés aux débutants, consultez la rubrique Appeler des API avec Postman ou cURL.

Paramètres de la requête

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
            -H 'X-DashScope-Async: enable' \
            -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
            -H 'Content-Type: application/json' \
            -d '{
            "model": "wan2.7-videoedit",
            "input": {
                "prompt": "Convert the entire scene to a claymation style",
                "media": [
                    {
                        "type": "video",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/ldnfdf/wan2.7-videoedit-style-change.mp4"
                    }
                ]
            },
            "parameters": {
                "resolution": "720P",
                "prompt_extend": true,
                "watermark": true
            }
        }'
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/video-generation/video-synthesis' \
            -H 'X-DashScope-Async: enable' \
            -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
            -H 'Content-Type: application/json' \
            -d '{
            "model": "wan2.7-videoedit",
            "input": {
                "prompt": "Replace the girl''s clothes in the video with the clothes from the image",
                "media": [
                    {
                        "type": "video",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260403/nlspwm/T2VA_22.mp4"
                    },
                    {
                        "type": "reference_image",
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/fwjpqf/wan2.7-videoedit-change-clothes.png"
                    }
                ]
            },
            "parameters": {
                "resolution": "720P",
                "prompt_extend": true,
                "watermark": true
            }
        }'

Content-Type string (Obligatoire)

Type de contenu de la requête. Doit être application/json.

Authorization string (Obligatoire)

Authentifie la requête avec une clé API Model Studio. Exemple : Bearer sk-xxxx.

X-DashScope-Async string (Obligatoire)

Active le traitement asynchrone. Les requêtes HTTP ne prennent en charge que les appels asynchrones. Doit être défini sur enable.

ImportantSi cet en-tête de requête est manquant, l'erreur « current user api does not support synchronous calls » est renvoyée.

Corps de la requête

model string (Obligatoire)

Nom du modèle.

Exemple de valeur : wan2,7-videoedit.

input object (Obligatoire)

Paramètres d'entrée, y compris l'instruction (prompt).

Propriétés

prompt string (Facultatif)

Décrit les éléments souhaités et les caractéristiques visuelles dans la vidéo générée.

Le chinois et l'anglais sont pris en charge. Chaque caractère chinois ou lettre anglaise compte pour un caractère. Le texte plus long est automatiquement tronqué.

  • wan2,7-videoedit : jusqu'à 5 000 caractères.

Exemple de valeur : Change the character's clothes to a cool, flashy outfit and add the hat from the reference image.

negative_prompt string (Facultatif)

Instruction négative décrivant le contenu à exclure de la vidéo, ce qui permet d'affiner le résultat.

Le chinois et l'anglais sont pris en charge. La longueur ne peut pas dépasser 500 caractères. Le texte plus long est automatiquement tronqué.

Exemple de valeur : low resolution, error, worst quality, low quality, disfigured, extra fingers, bad proportions.

media array (Obligatoire)

Liste des ressources multimédias, telles que des images et des vidéos, utilisées comme références pour la génération de la vidéo.

Chaque élément du tableau est un objet média contenant les champs type et url.

Propriétés

type string (Obligatoire)

Type de la ressource multimédia. Valeurs valides :

  • video : Obligatoire. La vidéo à modifier.
  • reference_image : Facultatif. Une image de référence.

Limites des ressources :

  • Une seule vidéo est autorisée.
  • Maximum quatre images de référence.

url string (Obligatoire)

URL ou données encodées en Base64 de la ressource multimédia. Les ressources incluent des vidéos et des images.

Vidéo d'entrée (type=video)

URL du fichier vidéo à modifier.

Exigences relatives à la vidéo :

  • Format : MP4, MOV.
  • Durée : 2–10 s.
  • Résolution : La largeur et la hauteur doivent être comprises entre 240 et 4 096 pixels.
  • Ratio d'aspect : 1:8 à 8:1.
  • Taille du fichier : Jusqu'à 100 Mo.

Le format d'entrée pris en charge est une URL publique utilisant HTTP ou HTTPS. Exemple : https://xxx/xxx.mp4.

Image d'entrée (type=reference_image)

URL ou données encodées en Base64 de l'image de référence.

Exigences relatives à l'image :

  • Format : JPEG, JPG, PNG (canal alpha non pris en charge), BMP, WEBP.
  • Résolution : La largeur et la hauteur doivent être comprises entre 240 et 8 000 pixels.
  • Ratio d'aspect : 1:8 à 8:1.
  • Taille du fichier : Jusqu'à 20 Mo.

Formats d'entrée pris en charge :

  1. URL publique :

  2. Chaîne encodée en Base64 :

    • Format des données : data:{MIME_type};base64,{base64_data}.
    • Exemple de valeur : data:image/png;base64,GDU7MtCZzEbTbmRZ...... (Cet exemple est tronqué à des fins de démonstration).

    Format des données encodées en Base64

    Format : data:{MIME_type};base64,{base64_data} .

    • {base64_data} : Chaîne encodée en Base64 du fichier image.
    • {MIME_type} : Type MIME de l'image, qui doit correspondre au format du fichier.

    Format d'image

    Type MIME

    JPEG

    image/jpeg

    JPG

    image/jpeg

    PNG

    image/png

    BMP

    image/bmp

    WEBP

    image/webp

parameters object (Facultatif)

Paramètres de traitement vidéo, tels que la résolution, la durée, la réécriture intelligente de l'instruction et le filigrane.

Propriétés

resolution string (Facultatif)

Niveau de résolution de la vidéo générée, qui contrôle sa netteté (nombre total de pixels).

  • wan2,7-videoedit : Les valeurs valides sont 720P et 1080P. La valeur par défaut est 1080P.

ratio string (Facultatif)

Ratio d'aspect de la vidéo générée.

Comportement :

  • Si vous ne spécifiez pas le paramètre ratio, le modèle génère une vidéo avec un ratio d'aspect similaire à celui de la vidéo d'entrée.
  • Si vous spécifiez le paramètre ratio, le modèle génère une vidéo avec le ratio spécifié.

Valeurs valides :

  • 16:9
  • 9:16
  • 1:1
  • 4:3
  • 3:4

Consultez le tableau ci-dessous pour connaître la résolution de la vidéo de sortie (largeur × hauteur) pour différents ratios d'aspect.

Niveau de résolution

Ratio d'aspect

Résolution de la vidéo de sortie (largeur*hauteur)

720P

16:9

1280*720

9:16

720*1280

1:1

960*960

4:3

1104*832

3:4

832*1104

1080P

16:9

1920*1080

9:16

1080*1920

1:1

1440*1440

4:3

1648*1248

3:4

1248*1648

duration integer (Facultatif)

Durée de la vidéo générée, en secondes.

Recommandation : Définissez ce paramètre uniquement pour tronquer la vidéo. Pour conserver la même durée que la vidéo d'entrée, omettez ce paramètre ou transmettez la valeur par défaut 0.

Règles d'utilisation :

  • Comportement par défaut : La valeur par défaut est 0, ce qui signifie que la durée de la vidéo d'entrée est utilisée sans troncature.
  • Troncation : Lorsqu'une durée spécifique est transmise, le système tronque la vidéo originale de 0 seconde jusqu'à la longueur spécifiée par duration.
  • Plage de valeurs : Un entier compris dans l'intervalle [2, 10].

audio_setting string (Facultatif)

Paramètres audio de la vidéo.

  • auto (Par défaut) : Le modèle détermine intelligemment l'audio en fonction de l'instruction (prompt). Si l'instruction décrit un son, un nouvel audio peut être généré. Sinon, l'audio original de la ressource d'entrée peut être conservé.
  • origin : Force la conservation de l'audio original de la vidéo d'entrée sans régénération.

prompt_extendboolean (Facultatif)

Active la réécriture intelligente de l'instruction. Lorsqu'elle est activée, un grand modèle réécrit l'instruction d'entrée, améliorant considérablement la qualité de génération pour les instructions courtes, au prix d'un temps de traitement accru.

  • true : Valeur par défaut. Active la réécriture intelligente.
  • false : Désactive la réécriture intelligente.

watermark boolean (Facultatif)

Indique s'il faut ajouter un filigrane. Le filigrane se trouve dans le coin inférieur droit de la vidéo avec le texte « AI Generated ».

  • false (par défaut)
  • true

Exemple : false.

seed integer (Facultatif)

La graine aléatoire doit être un entier compris dans l'intervalle [0, 2147483647].

Si elle n'est pas spécifiée, une graine aléatoire est générée. Une graine fixe améliore la reproductibilité.

Étant donné que la génération du modèle est probabiliste, la même graine ne garantit pas des résultats identiques.

Paramètres de réponse

Réponse en cas de succès

Enregistrez le task_id pour interroger l'état et le résultat de la tâche.

{
        "output": {
            "task_status": "PENDING",
            "task_id": "0385dc79-5ff8-4d82-bcb6-xxxxxx"
        },
        "request_id": "4909100c-7b5a-9f92-bfe5-xxxxxx"
    }

Réponse d'erreur

La création de la tâche a échoué. Consultez les Codes d'erreur.

{
    "code": "InvalidApiKey",
    "message": "Invalid API-key provided.",
    "request_id": "7438d53d-6eb8-4596-8835-xxxxxx"
}

output object

Contient la sortie de la tâche.

Propriétés

task_id string

Identifiant de la tâche. Valide pour les requêtes pendant 24 heures.

task_status string

État de la tâche.

Valeurs d'énumération

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN : la tâche n'existe pas ou son état est inconnu.

request_id string

Identifiant unique de la requête, utilisé pour le suivi et le dépannage.

code string

Code d'erreur. Renvoyé uniquement en cas d'échec de la requête. Consultez les Codes d'erreur.

message string

Message d'erreur détaillé. Renvoyé uniquement en cas d'échec de la requête. Consultez les Codes d'erreur.

Étape 2 : Interroger le résultat

Singapore

GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id}

Beijing

GET https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1/tasks/{task_id}

Remplacez {WorkspaceId} par votre ID d'espace de travail réel.

Remarque

  • Recommandation d'interrogation : la génération de vidéo prend plusieurs minutes. Mettez en place un mécanisme d'interrogation avec un intervalle raisonnable, par exemple 15 secondes.
  • Transition d'état de la tâche : PENDING → RUNNING → SUCCEEDED ou FAILED.
  • Lien vers le résultat : une fois la tâche réussie, une URL de vidéo valide pendant 24 heures est renvoyée. Téléchargez et enregistrez la vidéo dans un stockage permanent, tel que OSS.
  • Validité du task_id : 24 heures. Au-delà de cette période, les requêtes renvoient l'état de la tâche comme étant UNKNOWN.

Paramètres de requête

Interroger le résultat

Remplacez {task_id} par la valeur task_id renvoyée par l'appel d'API précédent. Le task_id est valide pour les requêtes pendant 24 heures. Remplacez {WorkspaceId} par votre ID d'espace de travail réel.

curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/{task_id} \
    --header "Authorization: Bearer $DASHSCOPE_API_KEY"
En-têtes

Authorization string (Obligatoire)

Authentifie la requête à l'aide d'une clé API Model Studio. Exemple : Bearer sk-xxxx.

Paramètres de chemin

task_id string (Obligatoire)

Identifiant de la tâche.

Paramètres de réponse

Tâche réussie

Les URL de vidéo ne sont valides que pendant 24 heures, puis sont automatiquement supprimées. Enregistrez rapidement les vidéos générées.

{
    "request_id": "f16ae7e9-d518-92f8-a02c-xxxxxx",
    "output": {
        "task_id": "05e68c7e-850c-49e4-b866-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2026-04-03 00:08:03.576",
        "scheduled_time": "2026-04-03 00:08:13.408",
        "end_time": "2026-04-03 00:11:57.286",
        "orig_prompt": "Replace the girl''s clothes in the video with the clothes from the image",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?xxxx"
    },
    "usage": {
        "duration": 10,04,
        "input_video_duration": 5,02,
        "output_video_duration": 5,02,
        "video_count": 1,
        "SR": 720
    }
}

Échec de la tâche

En cas d'échec d'une tâche, le champ task_status prend la valeur FAILED, accompagné d'un code d'erreur et d'un message. Consultez les Codes d'erreur.

{
    "request_id": "e5d70b02-ebd3-98ce-9fe8-759d7d7b107d",
    "output": {
        "task_id": "86ecf553-d340-4e21-af6e-a0c6a421c010",
        "task_status": "FAILED",
        "code": "InvalidParameter",
        "message": "The size is not match xxxxxx"
    }
}

Requête expirée

Le task_id est valide pendant 24 heures. Au-delà de cette période, les requêtes renvoient l'erreur suivante.

{
        "request_id": "a4de7c32-7057-9f82-8581-xxxxxx",
        "output": {
            "task_id": "502a00b1-19d9-4839-a82f-xxxxxx",
            "task_status": "UNKNOWN"
        }
    }

outputobject

Contient la sortie de la tâche.

Propriétés

task_id string

Identifiant de la tâche. Valide pour les requêtes pendant 24 heures.

task_status string

État de la tâche.

Valeurs d'énumération

  • PENDING
  • RUNNING
  • SUCCEEDED
  • FAILED
  • CANCELED
  • UNKNOWN : la tâche n'existe pas ou son état est inconnu.
Transitions d'état lors de l'interrogation :
  • PENDING → RUNNING → SUCCEEDED ou FAILED.
  • L'état initial de la requête est généralement PENDING ou RUNNING.
  • Lorsque l'état passe à SUCCEEDED, la réponse contient l'URL de la vidéo générée.
  • Si l'état est FAILED, vérifiez le message d'erreur et relancez la tâche.

submit_time string

Heure de soumission de la tâche. L'heure est exprimée en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

scheduled_time string

Heure d'exécution de la tâche. L'heure est exprimée en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

end_time string

Heure de fin de la tâche. L'heure est exprimée en UTC+8 et le format est AAAA-MM-JJ HH:mm:ss.SSS.

video_url string

URL de la vidéo générée. Renvoyée uniquement lorsque task_status est SUCCEEDED.

Valide pendant 24 heures. La vidéo est au format MP4 avec encodage H.264.

orig_prompt string

Invite d'entrée originale, correspondant au paramètre de requête prompt.

code string

Code d'erreur. Renvoyé uniquement en cas d'échec de la requête. Consultez les Codes d'erreur.

message string

Message d'erreur détaillé. Renvoyé uniquement en cas d'échec de la requête. Consultez les Codes d'erreur.

usage object

Statistiques d'utilisation pour la facturation. Facturées uniquement pour les tâches réussies.

Propriétés

input_video_duration float

Durée de la vidéo d'entrée, en secondes.

output_video_duration float

Durée de la vidéo de sortie, en secondes.

duration float

Durée totale de la vidéo, utilisée pour la facturation.

Formule de facturation : duration=input_video_duration+output_video_duration.

SR integer

Niveau de résolution de la vidéo de sortie. Exemple de valeur : 720.

video_count integer

Nombre de vidéos générées. Cette valeur est fixée à 1.

request_id string

Identifiant unique de la requête, utilisé pour le suivi et le dépannage.

SDK DashScope

Les noms de paramètres du SDK sont généralement cohérents avec ceux de l'API HTTP, mais la structure des paramètres respecte les conventions propres à chaque langage.

Le montage vidéo prend généralement entre 1 et 5 minutes. Le SDK gère en interne le processus d'appel HTTP asynchrone et prend en charge les appels synchrones et asynchrones.

La durée de traitement réelle dépend du nombre de tâches en file d'attente et de l'état du service. Patientez jusqu'à l'obtention du résultat.

SDK Python

ImportantAssurez-vous d'utiliser la version 1.25.16 ou ultérieure du SDK Python DashScope.

L'utilisation d'une version antérieure peut provoquer des erreurs telles que « url error, please check url! ». Reportez-vous à la rubrique Installer le SDK pour mettre à jour votre version.

Définissez le paramètre base_http_api_url en fonction de la région du service :

Singapore

dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

China (Beijing)

dashscope.base_http_api_url = 'https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1'

Remplacez {WorkspaceId} par votre ID d'espace de travail réel.

Synchronous call

Request example
import base64
import mimetypes
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
import os

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If the DASHSCOPE_API_KEY environment variable is not set, provide your Model Studio API key here: api_key="sk-xxx"
# API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# The format is data:{MIME_type};base64,{base64_data}
def encode_file(file_path):
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type or not mime_type.startswith("image/"):
        raise ValueError("Unsupported or unrecognized image format.")
    with open(file_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return f"data:{mime_type};base64,{encoded_string}"

# The reference_image_url parameter supports the following three input methods.

# Method 1: Use a public URL of an image.
reference_image_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/fwjpqf/wan2.7-videoedit-change-clothes.png"

# Method 2: Use a local file (absolute and relative paths are supported).
# Format: file:// + file path
# Example (absolute path):
# reference_image_url = "file://" + "/path/to/image.png"     # Linux/macOS
# reference_image_url = "file://" + "C:/path/to/image.png"    # Windows
# Example (relative path):
# reference_image_url = "file://" + "./image.png"             # Relative to the path of the current script.

# Method 3: A Base64-encoded string.
# reference_image_url = encode_file("/path/to/image.png")

def sample_sync_call_videoedit():
    # Call the synchronous API, which will return the result directly.
    print('Please wait...')
    rsp = VideoSynthesis.call(
        api_key=api_key,
        model='wan2.7-videoedit',
        prompt='Replace the clothes of the girl in the video with the clothes from the image.',
        media=[
            {
                "type": "video",
                "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260403/nlspwm/T2VA_22.mp4"
            },
            {
                "type": "reference_image",
                "url": reference_image_url
            }
        ],
        resolution='720P',
        prompt_extend=True,
        watermark=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_sync_call_videoedit()
Response example

L'URL video_url est valide pendant 24 heures. Téléchargez la vidéo dès que possible.

{
    "status_code": 200,
    "request_id": "d6c3c865-34e9-98a9-a53d-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "1de7c853-755a-454a-91bc-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxxx",
        "submit_time": "2026-04-10 17:16:30.821",
        "scheduled_time": "2026-04-10 17:16:46.379",
        "end_time": "2026-04-10 17:24:59.352",
        "orig_prompt": "Replace the clothes of the girl in the video with the clothes from the image."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 0,
        "video_ratio": "",
        "duration": 10.08,
        "input_video_duration": 5.04,
        "output_video_duration": 5.04,
        "SR": 720
    }
}

Asynchronous call

Request example
import base64
import mimetypes
from http import HTTPStatus
from dashscope import VideoSynthesis
import dashscope
import os

# The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# If the DASHSCOPE_API_KEY environment variable is not set, provide your Model Studio API key here: api_key="sk-xxx"
# API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key = os.getenv("DASHSCOPE_API_KEY")

# The format is data:{MIME_type};base64,{base64_data}
def encode_file(file_path):
    mime_type, _ = mimetypes.guess_type(file_path)
    if not mime_type or not mime_type.startswith("image/"):
        raise ValueError("Unsupported or unrecognized image format.")
    with open(file_path, "rb") as image_file:
        encoded_string = base64.b64encode(image_file.read()).decode('utf-8')
    return f"data:{mime_type};base64,{encoded_string}"

# The reference_image_url parameter supports the following three input methods.

# Method 1: Use a public URL of an image.
reference_image_url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/fwjpqf/wan2.7-videoedit-change-clothes.png"

# Method 2: Use a local file (absolute and relative paths are supported).
# Format: file:// + file path
# Example (absolute path):
# reference_image_url = "file://" + "/path/to/image.png"     # Linux/macOS
# reference_image_url = "file://" + "C:/path/to/image.png"    # Windows
# Example (relative path):
# reference_image_url = "file://" + "./image.png"             # Relative to the path of the current script.

# Method 3: A Base64-encoded string.
# reference_image_url = encode_file("/path/to/image.png")

def sample_async_call_videoedit():
    # Call the asynchronous API, which returns task information.
    # You can then check the task status using the returned task ID.
    rsp = VideoSynthesis.async_call(
        api_key=api_key,
        model='wan2.7-videoedit',
        prompt='Replace the clothes of the girl in the video with the clothes from the image.',
        media=[
            {
                "type": "video",
                "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260403/nlspwm/T2VA_22.mp4"
            },
            {
                "type": "reference_image",
                "url": reference_image_url
            }
        ],
        resolution='720P',
        prompt_extend=True,
        watermark=True)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print("task_id: %s" % rsp.output.task_id)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

    # Get the task information, which includes the task status.
    status = VideoSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)  # Check the task status.
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # Wait for the task to complete. This method polls at intervals until the task is finished.
    rsp = VideoSynthesis.wait(task=rsp, api_key=api_key)
    print(rsp)
    if rsp.status_code == HTTPStatus.OK:
        print(rsp.output.video_url)
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))

if __name__ == '__main__':
    sample_async_call_videoedit()
Response examples
  1. Réponse à la création de la tâche

    {
        "status_code": 200,
        "request_id": "f16ae7e9-d518-92f8-a02c-xxxxxx",
        "code": "",
        "message": "",
        "output": {
            "task_id": "05e68c7e-850c-49e4-b866-xxxxxx",
            "task_status": "PENDING",
            "video_url": ""
        },
        "usage": null
    }
    
  2. Réponse à la requête d'interrogation de la tâche

    L'URL video_url est valide pendant 24 heures. Téléchargez la vidéo dès que possible.

    {
        "status_code": 200,
        "request_id": "d6c3c865-34e9-98a9-a53d-xxxxxx",
        "code": null,
        "message": "",
        "output": {
            "task_id": "1de7c853-755a-454a-91bc-xxxxxx",
            "task_status": "SUCCEEDED",
            "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxxx",
            "submit_time": "2026-04-10 17:16:30.821",
            "scheduled_time": "2026-04-10 17:16:46.379",
            "end_time": "2026-04-10 17:24:59.352",
            "orig_prompt": "Replace the clothes of the girl in the video with the clothes from the image."
        },
        "usage": {
            "video_count": 1,
            "video_duration": 0,
            "video_ratio": "",
            "duration": 10.08,
            "input_video_duration": 5.04,
            "output_video_duration": 5.04,
            "SR": 720
        }
    }
    

SDK Java

ImportantAssurez-vous d'utiliser la version 2.22.14 ou ultérieure du SDK Java DashScope.

L'utilisation d'une version antérieure peut provoquer des erreurs telles que « url error, please check url! ». Reportez-vous à la rubrique Installer le SDK pour mettre à jour votre version.

Définissez la constante Constants.baseHttpApiUrl en fonction de la région du service :

Singapore

Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";

China (Beijing)

Constants.baseHttpApiUrl = "https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api/v1";

Remplacez {WorkspaceId} par votre ID d'espace de travail réel.

Synchronous call

Request example
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

public class VideoEdit {

    static {
        // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If the DASHSCOPE_API_KEY environment variable is not set, provide your Model Studio API key here: apiKey="sk-xxx"
    // API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    // The referenceImageUrl parameter supports the following three input methods.

    // Method 1: Use a public URL of an image.
    static String referenceImageUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/fwjpqf/wan2.7-videoedit-change-clothes.png";

    // Method 2: Use a local file (absolute and relative paths are supported).
    // Format: file:// + file path
    // Example (absolute path):
    // static String referenceImageUrl = "file://" + "/path/to/image.png";     // Linux/macOS
    // static String referenceImageUrl = "file://" + "C:/path/to/image.png";   // Windows
    // Example (relative path):
    // static String referenceImageUrl = "file://" + "./image.png";             // Relative to the path of the current executable.

    // Method 3: Use Base64 encoding.
    // static String referenceImageUrl = encodeFile("/path/to/image.png");

    // The format is data:{MIME_type};base64,{base64_data}
    public static String encodeFile(String filePath) {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            throw new IllegalArgumentException("File does not exist: " + filePath);
        }
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot detect file type: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("Unsupported or unrecognized image format.");
        }
        byte[] fileBytes = null;
        try {
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read file content: " + filePath);
        }
        String encodedString = Base64.getEncoder().encodeToString(fileBytes);
        return "data:" + mimeType + ";base64," + encodedString;
    }

    public static void videoEdit() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>(){{
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260403/nlspwm/T2VA_22.mp4")
                    .type("video")
                    .build());
            add(VideoSynthesisParam.Media.builder()
                    .url(referenceImageUrl)
                    .type("reference_image")
                    .build());
        }};
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("resolution", "720P");
        parameters.put("prompt_extend", true);
        parameters.put("watermark", true);

        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-videoedit")
                        .prompt("Replace the clothes of the girl in the video with the clothes from the image.")
                        .media(media)
                        .parameters(parameters)
                        .build();
        System.out.println("Please wait...");
        VideoSynthesisResult result = vs.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        try {
            videoEdit();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
Response example

L'URL video_url est valide pendant 24 heures. Téléchargez la vidéo dès que possible.

{
    "request_id": "0a15ad3c-cde7-9f7e-b8d2-xxxxxx",
    "output": {
        "task_id": "0025d1e1-009a-4f53-9c27-xxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
        "orig_prompt": "Replace the clothes of the girl in the video with the clothes from the image.",
        "submit_time": "2026-04-10 17:21:01.719",
        "scheduled_time": "2026-04-10 17:21:13.182",
        "end_time": "2026-04-10 17:31:41.286"
    },
    "usage": {
        "video_count": 1,
        "duration": 10.08,
        "input_video_duration": 5.04,
        "output_video_duration": 5.04,
        "SR": "720"
    },
    "status_code": 200,
    "code": "",
    "message": ""
}

Asynchronous call

Exemple de requête
// Copyright (c) Alibaba, Inc. and its affiliates.

import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesis;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisParam;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisResult;
import com.alibaba.dashscope.aigc.videosynthesis.VideoSynthesisListResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.task.AsyncTaskListParam;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

public class VideoEdit {

    static {
        // The following URL is for the Singapore region. When calling, replace {WorkspaceId} with your actual workspace ID. URLs vary by region.
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    // If the DASHSCOPE_API_KEY environment variable is not set, provide your Model Studio API key here: apiKey="sk-xxx"
    // API keys are region-specific. To get an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
    public static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    // The referenceImageUrl parameter supports the following three input methods.

    // Method 1: Use a public URL of an image.
    static String referenceImageUrl = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260402/fwjpqf/wan2.7-videoedit-change-clothes.png";

    // Method 2: Use a local file (absolute and relative paths are supported).
    // Format: file:// + file path
    // Example (absolute path):
    // static String referenceImageUrl = "file://" + "/path/to/image.png";     // Linux/macOS
    // static String referenceImageUrl = "file://" + "C:/path/to/image.png";   // Windows
    // Example (relative path):
    // static String referenceImageUrl = "file://" + "./image.png";             // Relative to the path of the current executable.

    // Method 3: Use Base64 encoding.
    // static String referenceImageUrl = encodeFile("/path/to/image.png");

    // The format is data:{MIME_type};base64,{base64_data}
    public static String encodeFile(String filePath) {
        Path path = Paths.get(filePath);
        if (!Files.exists(path)) {
            throw new IllegalArgumentException("File does not exist: " + filePath);
        }
        String mimeType = null;
        try {
            mimeType = Files.probeContentType(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot detect file type: " + filePath);
        }
        if (mimeType == null || !mimeType.startsWith("image/")) {
            throw new IllegalArgumentException("Unsupported or unrecognized image format.");
        }
        byte[] fileBytes = null;
        try {
            fileBytes = Files.readAllBytes(path);
        } catch (IOException e) {
            throw new IllegalArgumentException("Cannot read file content: " + filePath);
        }
        String encodedString = Base64.getEncoder().encodeToString(fileBytes);
        return "data:" + mimeType + ";base64," + encodedString;
    }

    public static void videoEdit() throws ApiException, NoApiKeyException, InputRequiredException {
        VideoSynthesis vs = new VideoSynthesis();
        List<VideoSynthesisParam.Media> media = new ArrayList<VideoSynthesisParam.Media>(){{
            add(VideoSynthesisParam.Media.builder()
                    .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20260403/nlspwm/T2VA_22.mp4")
                    .type("video")
                    .build());
            add(VideoSynthesisParam.Media.builder()
                    .url(referenceImageUrl)
                    .type("reference_image")
                    .build());
        }};
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("resolution", "720P");
        parameters.put("prompt_extend", true);
        parameters.put("watermark", true);

        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.7-videoedit")
                        .prompt("Replace the clothes of the girl in the video with the clothes from the image.")
                        .media(media)
                        .parameters(parameters)
                        .build();

        // Make an asynchronous call.
        VideoSynthesisResult task = vs.asyncCall(param);
        System.out.println(JsonUtils.toJson(task));
        System.out.println("Please wait...");

        // Wait for the task to complete and retrieve the final result.
        VideoSynthesisResult result = vs.wait(task, apiKey);
        System.out.println(JsonUtils.toJson(result));
    }

    // Retrieve the task list.
    public static void listTask() throws ApiException, NoApiKeyException {
        VideoSynthesis is = new VideoSynthesis();
        AsyncTaskListParam param = AsyncTaskListParam.builder().build();
        param.setApiKey(apiKey);
        VideoSynthesisListResult result = is.list(param);
        System.out.println(result);
    }

    // Retrieve the result of a single task.
    public static void fetchTask(String taskId) throws ApiException, NoApiKeyException {
        VideoSynthesis is = new VideoSynthesis();
        // The apiKey can be null if the DASHSCOPE_API_KEY environment variable is set.
        VideoSynthesisResult result = is.fetch(taskId, apiKey);
        System.out.println(result.getOutput());
        System.out.println(result.getUsage());
    }

    public static void main(String[] args) {
        try {
            videoEdit();
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
Exemples de réponse
  1. Réponse à la création d'une tâche

    {
        "request_id": "f16ae7e9-d518-92f8-a02c-xxxxxx",
        "output": {
            "task_id": "05e68c7e-850c-49e4-b866-xxxxxx",
            "task_status": "PENDING",
            "video_url": ""
        },
        "usage": null,
        "status_code": 200,
        "code": "",
        "message": ""
    }
    
  2. Réponse à l'interrogation d'une tâche

    Le paramètre video_url est valide pendant 24 heures. Veuillez télécharger la vidéo dans les plus brefs délais.

    {
        "request_id": "0a15ad3c-cde7-9f7e-b8d2-xxxxxx",
        "output": {
            "task_id": "0025d1e1-009a-4f53-9c27-xxxxx",
            "task_status": "SUCCEEDED",
            "video_url": "https://dashscope-a717.oss-accelerate.aliyuncs.com/xxx.mp4?Expires=xxx",
            "orig_prompt": "Replace the clothes of the girl in the video with the clothes from the image.",
            "submit_time": "2026-04-10 17:21:01.719",
            "scheduled_time": "2026-04-10 17:21:13.182",
            "end_time": "2026-04-10 17:31:41.286"
        },
        "usage": {
            "video_count": 1,
            "duration": 10.08,
            "input_video_duration": 5.04,
            "output_video_duration": 5.04,
            "SR": "720"
        },
        "status_code": 200,
        "code": "",
        "message": ""
    }
    

Codes d'erreur

Si un appel de modèle échoue, reportez-vous à la rubrique Codes d'erreur pour le dépannage.