All Products
Search
Document Center

Alibaba Cloud Model Studio:Wan - referensi API video dari frame pertama dan terakhir (2.2)

Last Updated:Jun 04, 2026

Model Wan 2.2 menghasilkan video dengan transisi mulus dari frame pertama, frame terakhir, dan prompt teks.

Dokumen terkait: Panduan pengguna

Catatan penggunaan

Untuk memastikan panggilan API berhasil, model, URL titik akhir, dan Kunci API Anda harus berada di wilayah yang sama. Panggilan lintas wilayah akan gagal.

Catatan

Contoh kode dalam topik ini berlaku untuk Singapore.

Penting

Domain lama https://dashscope-intl.aliyuncs.com untuk wilayah Singapore akan segera ditinggalkan. Harap migrasi ke domain baru https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com sesegera mungkin.

Panggilan HTTP

Karena tugas image-to-video merupakan operasi berdurasi panjang yang biasanya memakan waktu 1 hingga 5 menit, API menggunakan panggilan asinkron. Prosesnya melibatkan dua langkah inti: membuat tugas, lalu polling hasilnya.

Langkah 1: Buat tugas

Singapore

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

调用时请将WorkspaceId替换为真实的Workspace ID

China (Beijing)

POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis

Catatan
  • Setelah tugas dibuat, gunakan task_id yang dikembalikan untuk mengkueri hasilnya. task_id berlaku selama 24 jam. Jangan membuat tugas duplikat. Sebagai gantinya, gunakan polling untuk mengambil hasilnya.

  • Untuk panduan pemula, lihat Postman.

Parameter permintaan

Frame pertama dan terakhir

Menghasilkan video berdasarkan frame pertama, frame terakhir, dan prompt.

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.2-kf2v-flash",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view."
    },
    "parameters": {
        "resolution": "480P",
        "prompt_extend": true
    }
}'

Prompt negatif

Gunakan parameter negative_prompt untuk mengecualikan elemen tertentu, seperti orang, dari video yang dihasilkan.

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis' \
    -H 'X-DashScope-Async: enable' \
    -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
    -H 'Content-Type: application/json' \
    -d '{
    "model": "wan2.1-kf2v-plus",
    "input": {
        "first_frame_url": "https://wanx.alicdn.com/material/20250318/first_frame.png",
        "last_frame_url": "https://wanx.alicdn.com/material/20250318/last_frame.png",
        "prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "negative_prompt": "people"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true
    }
}'
Header permintaan

Content-Type string (Wajib)

Tipe konten permintaan. Harus application/json.

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

X-DashScope-Async string (Wajib)

Mengaktifkan pemrosesan asinkron. Permintaan HTTP hanya mendukung panggilan asinkron. Harus enable.

Penting

Jika header permintaan ini tidak ada, error "current user api does not support synchronous calls" dikembalikan.

Body permintaan

model string (Wajib)

Nama model. Contoh: wan2.2-kf2v-flash.

Untuk detailnya, lihat Konsol Model Studio.

input object (Wajib)

Berisi input utama untuk tugas, seperti prompt.

Properti

prompt string (Opsional)

Prompt teks. Mendukung bahasa Mandarin dan Inggris. Panjang maksimum adalah 800 karakter. Baik karakter Mandarin maupun huruf dihitung sebagai satu karakter. Teks yang melebihi batas ini akan dipotong.

Jika terdapat perubahan signifikan pada subjek atau adegan antara frame pertama dan terakhir, kami merekomendasikan untuk menggambarkan proses transisinya, seperti pergerakan kamera (misalnya, "kamera bergerak ke kiri") atau pergerakan subjek (misalnya, "seseorang berlari maju").

Contoh: "Seekor kucing hitam kecil menatap langit dengan rasa ingin tahu. Kamera secara bertahap naik dari ketinggian mata dan akhirnya menangkap tatapan ingin tahunya dari sudut pandang atas."

Untuk tips menulis prompt yang efektif, lihat Panduan prompt untuk text-to-video dan image-to-video.

negative_prompt string (Opsional)

Prompt negatif yang menggambarkan konten yang harus dikecualikan dari video, yang membantu membatasi output.

Mendukung bahasa Mandarin dan Inggris. Panjang maksimum adalah 500 karakter. Teks yang melebihi batas ini akan dipotong.

Contoh: "low resolution, error, worst quality, low quality, deformed, extra fingers, bad proportions".

first_frame_url string (Wajib)

URL gambar frame pertama. Rasio aspek video output akan mengikuti rasio aspek gambar tersebut.

URL harus berupa alamat publik yang dapat diakses serta mendukung protokol HTTP atau HTTPS.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (saluran alfa tidak didukung), BMP, WEBP.

  • Resolusi: Lebar dan tinggi masing-masing harus berada dalam rentang 240 hingga 8.000 piksel.

  • Ukuran file: Maksimal 10 MB.

last_frame_url string (Wajib)

URL gambar frame terakhir.

URL harus berupa alamat publik yang dapat diakses dan mendukung protokol HTTP atau HTTPS.

Persyaratan gambar:

  • Format: JPEG, JPG, PNG (saluran alfa tidak didukung), BMP, WEBP.

  • Resolusi: Lebar dan tinggi masing-masing harus berada dalam rentang 240 hingga 8.000 piksel. Resolusi frame terakhir boleh berbeda dari frame pertama, dan tidak perlu memiliki resolusi atau rasio aspek yang sama.

  • Ukuran file: Maksimal 10 MB.

parameters object (Opsional)

Parameter pemrosesan video.

Properti

resolution string (Opsional)

Penting

Parameter resolution secara langsung memengaruhi biaya. Untuk model yang sama, hierarki biayanya adalah 1080P > 720P > 480P. Konfirmasi harga di Konsol Model Studio sebelum melakukan panggilan.

Resolusi video yang dihasilkan. Parameter ini menyesuaikan definisi (total piksel) tanpa mengubah rasio aspeknya.

Nilai default dan nilai yang tersedia untuk parameter ini bergantung pada parameter model, seperti dijelaskan di bawah ini:

  • wan2.2-kf2v-flash: Nilai yang mungkin adalah 480P, 720P, dan 1080P. Nilai default adalah 720P.

  • wan2.1-kf2v-plus: Satu-satunya nilai yang mungkin adalah 720P. Nilai default adalah 720P.

Contoh: 720P

duration integer (Opsional)

Penting

Parameter duration secara langsung memengaruhi biaya, yang ditagih per detik. Konfirmasi harga di Konsol Model Studio sebelum melakukan panggilan.

Nilai ini tetap 5.

prompt_extend bool (Opsional)

Menentukan apakah akan mengaktifkan penulisan ulang prompt. Saat diaktifkan, model bahasa besar (LLM) secara cerdas menulis ulang prompt input. Ini dapat meningkatkan hasil secara signifikan untuk prompt pendek tetapi meningkatkan latensi.

  • true: Nilai default. Mengaktifkan penulisan ulang prompt.

  • false: Menonaktifkan penulisan ulang prompt.

Contoh: true

watermark bool (Opsional)

Menentukan apakah akan menambahkan watermark dengan teks "AI-generated" di pojok kanan bawah video.

  • false: Nilai default. Tidak menambahkan watermark.

  • true: Menambahkan watermark.

Contoh: false

seed integer (Opsional)

Bilangan acak seed harus berupa integer dalam rentang [0, 2147483647].

Jika tidak ditentukan, seed acak akan dihasilkan. Seed tetap meningkatkan kemampuan reproduksi.

Karena generasi model bersifat probabilistik, seed yang sama tidak menjamin hasil yang identik.

Parameter respons

Respons berhasil

Simpan task_id untuk mengkueri status dan hasil tugas.

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

Respons error

Pembuatan tugas gagal. Lihat Kode kesalahan.

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

output object

Informasi output untuk tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

request_id string

Identifikasi permintaan unik untuk pelacakan dan troubleshooting.

code string

Kode kesalahan. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

Langkah 2: Kueri hasil

Singapore

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

调用时请将WorkspaceId替换为真实的Workspace ID

China (Beijing)

GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}

Catatan
  • Rekomendasi polling: Pembuatan video memakan waktu beberapa menit. Gunakan mekanisme polling dengan interval yang masuk akal, seperti 15 detik.

  • Transisi status tugas: PENDING → RUNNING → SUCCEEDED atau FAILED.

  • Tautan hasil: Setelah tugas berhasil, URL video yang berlaku selama 24 jam dikembalikan. Unduh dan simpan video ke penyimpanan permanen, seperti OSS.

  • task_id masa berlaku: 24 jam. Setelah periode ini, kueri mengembalikan status tugas sebagai UNKNOWN.

Parameter permintaan

Kueri hasil tugas

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan task_id aktual Anda.

Kunci API berbeda untuk setiap wilayah. Untuk informasi lebih lanjut, lihat Buat Kunci API.
Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx.
curl -X GET https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Header permintaan

Authorization string (Wajib)

Mengotentikasi permintaan dengan Kunci API Model Studio. Contoh: Bearer sk-xxxx.

Parameter path

task_id string (Wajib)

ID tugas.

Parameter respons

Tugas berhasil

URL video hanya berlaku selama 24 jam, lalu secara otomatis dihapus. Segera simpan video yang dihasilkan.

{
    "request_id": "ec016349-6b14-9ad6-8009-xxxxxx",
    "output": {
        "task_id": "3f21a745-9f4b-4588-b643-xxxxxx",
        "task_status": "SUCCEEDED",
        "submit_time": "2025-04-18 10:36:58.394",
        "scheduled_time": "2025-04-18 10:37:13.802",
        "end_time": "2025-04-18 10:45:23.004",
        "video_url": "https://dashscope-result-wlcb.oss-cn-wulanchabu.aliyuncs.com/xxx.mp4?xxxxx",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its fur is smooth, and its whiskers are clearly visible. The background is a simple light-colored wall, highlighting the cat's black silhouette. A close-up shot emphasizes the changes in the cat's expression and the details of its eyes."
    },
    "usage": {
        "video_duration": 5,
        "video_count": 1,
        "SR": 480
    }
}

Tugas gagal

Saat tugas gagal, task_status bernilai FAILED dengan kode kesalahan dan pesan. Lihat Kode kesalahan.

{
    "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"
    }
}

Kueri tugas kedaluwarsa

task_id berlaku selama 24 jam. Setelah periode ini, kueri mengembalikan error berikut.

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

output object

Informasi output untuk tugas.

Properti

task_id string

ID tugas. Berlaku untuk kueri selama 24 jam.

task_status string

Status tugas.

Nilai enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak diketahui.

Transisi status selama polling:

  • PENDING → RUNNING → SUCCEEDED atau FAILED.

  • Status kueri awal biasanya PENDING atau RUNNING.

  • Saat status berubah menjadi SUCCEEDED, respons berisi URL video yang dihasilkan.

  • Jika statusnya FAILED, periksa pesan kesalahan dan coba ulang tugas tersebut.

submit_time string

Waktu saat tugas diajukan. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu saat tugas dieksekusi. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

end_time string

Waktu saat tugas selesai. Waktu dalam UTC+8 dan formatnya YYYY-MM-DD HH:mm:ss.SSS.

video_url string

URL video yang dihasilkan. Dikembalikan hanya saat task_status bernilai SUCCEEDED.

Berlaku selama 24 jam. Video dalam format MP4 dengan encoding H.264.

orig_prompt string

Prompt input asli, sesuai dengan parameter permintaan prompt.

actual_prompt string

Prompt yang dioptimalkan yang digunakan saat penulisan ulang prompt diaktifkan. Tidak dikembalikan saat dinonaktifkan.

code string

Kode kesalahan. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

message string

Pesan kesalahan detail. Dikembalikan hanya untuk permintaan yang gagal. Lihat Kode kesalahan.

usage object

Statistik penggunaan tugas. Hanya tugas yang berhasil yang ditagih.

Properti

video_duration integer

Durasi video yang dihasilkan dalam detik, yang selalu 5. Rumus penagihan: Biaya = Detik video × Harga satuan.

video_count integer

Jumlah video yang dihasilkan. Nilai ini tetap 1.

video_ratio string

Nilai ini saat ini hanya dikembalikan oleh model 2.1. Rasio aspek video yang dihasilkan, yang tetap standard.

SR integer

Nilai ini saat ini hanya dikembalikan oleh model 2.2. Tingkat resolusi video yang dihasilkan. Nilai yang mungkin adalah 480, 720, dan 1080.

request_id string

Identifikasi permintaan unik untuk pelacakan dan troubleshooting.

Panggilan SDK DashScope

Nama parameter SDK sebagian besar konsisten dengan API HTTP, dan struktur parameternya mengikuti konvensi masing-masing bahasa pemrograman.

Karena tugas image-to-video berdurasi panjang (biasanya 1–5 menit), SDK menangani panggilan HTTP asinkron secara internal, mendukung metode panggilan sinkron dan asinkron.

Waktu pemrosesan aktual bergantung pada jumlah tugas dalam antrian dan kinerja layanan. Harap bersabar.

Panggilan SDK Python

Penting

Sebelum menjalankan kode berikut, pastikan versi SDK Python DashScope Anda minimal 1.23.8.

Versi lama dapat memicu error seperti "url error, please check url!". Lihat Instal SDK untuk memperbarui.

Tetapkan base_http_api_url berdasarkan wilayah model:

Singapore

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

调用时请将WorkspaceId替换为真实的Workspace ID

Beijing

dashscope.base_http_api_url = 'https://dashscope.aliyuncs.com/api/v1'

Kode contoh

Panggilan sinkron

Contoh ini menunjukkan panggilan sinkron dengan dua metode input gambar: URL publik dan jalur file lokal.

Contoh permintaan
import os
from http import HTTPStatus
# SDK DashScope >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

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

# Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input gambar (pilih salah satu) ==========
# [Metode 1] Gunakan URL gambar publik
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Metode 2] Gunakan jalur file lokal (file:// + jalur file)
# Gunakan jalur absolut:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Atau gunakan jalur relatif:
# first_frame_url = "file://" + "./first_frame.png"              # Gunakan jalur aktual Anda.
# last_frame_url = "file://" + "./last_frame.png"                # Gunakan jalur aktual Anda.

def sample_sync_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.call(api_key=api_key,
                              model="wan2.2-kf2v-flash",
                              prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                              first_frame_url=first_frame_url,
                              last_frame_url=last_frame_url,
                              resolution="720P",
                              prompt_extend=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_kf2v()
Contoh respons
video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.
{
    "status_code": 200,
    "request_id": "a37fafc3-907c-96f3-95a6-5b2a8268a3fd",
    "code": null,
    "message": "",
    "output": {
        "task_id": "4dba0092-da13-42b2-afb1-0f7b8a0f4643",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-05-23 15:50:12.404",
        "scheduled_time": "2025-05-23 15:50:12.443",
        "end_time": "2025-05-23 15:54:56.502",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's yellow eyes are bright and expressive, its ears are pricked, and its whiskers are clearly visible. The background is a simple, light-colored wall that highlights the cat's black fur and focused expression. A close-up shot emphasizes the change in the cat's gaze and posture."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan asinkron

Contoh ini menunjukkan panggilan asinkron, yang segera mengembalikan ID tugas. Anda harus melakukan polling status tugas atau menunggu tugas selesai.

Contoh permintaan
import os
from http import HTTPStatus
# SDK DashScope >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

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

# Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input gambar (pilih salah satu) ==========
# [Metode 1] Gunakan URL gambar publik
first_frame_url = "https://wanx.alicdn.com/material/20250318/first_frame.png"
last_frame_url = "https://wanx.alicdn.com/material/20250318/last_frame.png"

# [Metode 2] Gunakan jalur file lokal (file:// + jalur file)
# Gunakan jalur absolut:
# first_frame_url = "file://" + "/path/to/your/first_frame.png"  # Linux/macOS
# last_frame_url = "file://" + "C:/path/to/your/last_frame.png"  # Windows
# Atau gunakan jalur relatif:
# first_frame_url = "file://" + "./first_frame.png"              # Gunakan jalur aktual Anda.
# last_frame_url = "file://" + "./last_frame.png"                # Gunakan jalur aktual Anda.

def sample_async_call_kf2v():
    print('please wait...')
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model="wan2.2-kf2v-flash",
                                    prompt="Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
                                    first_frame_url=first_frame_url,
                                    last_frame_url=last_frame_url,
                                    resolution="720P",
                                    prompt_extend=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))

    # Dapatkan informasi tugas, termasuk status tugas.
    status = VideoSynthesis.fetch(task=rsp, api_key=api_key)
    if status.status_code == HTTPStatus.OK:
        print(status.output.task_status)  # periksa status tugas
    else:
        print('Failed, status_code: %s, code: %s, message: %s' %
              (status.status_code, status.code, status.message))

    # Tunggu hingga tugas selesai. Metode ini melakukan polling endpoint fetch pada interval hingga tugas selesai.
    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_kf2v()
Contoh respons

1. Respons saat pembuatan tugas

{
    "status_code": 200,
    "request_id": "c86ff7ba-8377-917a-90ed-xxxxxx",
    "code": "",
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "PENDING",
        "video_url": ""
    },
    "usage": null
}

2. Contoh respons untuk tugas yang selesai

video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.
{
    "status_code": 200,
    "request_id": "efa545b3-f95c-9e3a-a3b6-xxxxxx",
    "code": null,
    "message": "",
    "output": {
        "task_id": "721164c6-8619-4a35-a6d9-xxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxx",
        "submit_time": "2025-02-12 11:03:30.701",
        "scheduled_time": "2025-02-12 11:06:05.378",
        "end_time": "2025-02-12 11:12:18.853",
        "orig_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.",
        "actual_prompt": "Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view. The cat's fur is jet-black and glossy, its eyes are large and bright with golden pupils. It looks up with its ears pricked, appearing exceptionally focused. After the camera moves up, the cat turns to face the camera, its eyes filled with curiosity and alertness. The background is simple, highlighting the cat's detailed features. A close-up shot with soft, natural light."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan SDK Java

Penting

Sebelum menjalankan kode berikut, pastikan versi SDK Java DashScope Anda minimal 2.20.9.

Versi lama dapat memicu error seperti "url error, please check url!". Lihat Instal SDK untuk memperbarui.

Kode contoh

Panggilan sinkron

Contoh ini menunjukkan panggilan sinkron dengan dua metode input gambar: URL publik dan jalur file lokal.

Contoh permintaan
// Copyright (c) Alibaba, Inc. and its affiliates.

// SDK DashScope >= 2.20.1
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.Constants;
import com.alibaba.dashscope.utils.JsonUtils;

import java.util.HashMap;
import java.util.Map;


public class Kf2vSyncIntl {

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

    // Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar (pilih salah satu):
     *
     * [Metode 1] URL publik
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

     /**
     * [Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";  // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows

    public static void syncCall() {

        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Melakukan panggilan sinkron. Ini mungkin memakan waktu.
            result = videoSynthesis.call(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));
    }

    public static void main(String[] args) {
        syncCall();
    }
}
Contoh respons
video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.
{
    "request_id": "e6bb4517-c073-9c10-b748-dedb8c11bb41",
    "output": {
        "task_id": "984784fe-83c1-4fc4-88c7-52c2c1fa92a2",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-wlcb-acdr-1.oss-cn-wulanchabu-acdr-1.aliyuncs.com/xxx.mp4?xxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Panggilan asinkron

Contoh ini menunjukkan panggilan asinkron, yang segera mengembalikan ID tugas. Anda harus melakukan polling status tugas atau menunggu tugas selesai.

Contoh permintaan
// Copyright (c) Alibaba, Inc. and its affiliates.

// SDK DashScope >= 2.20.1
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.Constants;
import com.alibaba.dashscope.utils.JsonUtils;
import java.util.HashMap;
import java.util.Map;

public class Kf2vAsync {

    static {
        Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    // Dapatkan Kunci API DashScope (yang merupakan Kunci API Model Studio Anda) dari variabel lingkungan.
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input gambar (pilih salah satu):
     *
     * [Metode 1] URL publik
     */
    static String firstFrameUrl = "https://wanx.alicdn.com/material/20250318/first_frame.png";
    static String lastFrameUrl = "https://wanx.alicdn.com/material/20250318/last_frame.png";

    /**
     * [Metode 2] Jalur file lokal (file://+jalur absolut atau file:///+jalur absolut)
     */
    // static String firstFrameUrl = "file://" + "/your/path/to/first_frame.png";   // Linux/macOS
    // static String lastFrameUrl = "file:///" + "C:/path/to/your/img.png";        // Windows
    
    public static void asyncCall(){

        // Tetapkan parameter.
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("prompt_extend", true);
        parameters.put("resolution", "720P");

        VideoSynthesis videoSynthesis = new VideoSynthesis();
        VideoSynthesisParam param =
                VideoSynthesisParam.builder()
                        .apiKey(apiKey)
                        .model("wan2.2-kf2v-flash")
                        .prompt("Realistic style, a small black cat looks up at the sky curiously, the camera gradually rises from eye level, and finally captures its curious gaze from a top-down view.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            // Melakukan panggilan asinkron.
            result = videoSynthesis.asyncCall(param);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        } catch (InputRequiredException e) {
            throw new RuntimeException(e);
        }
        System.out.println(JsonUtils.toJson(result));

        String taskId = result.getOutput().getTaskId();

        System.out.println("taskId=" + taskId);

        try {
            result = videoSynthesis.wait(taskId, apiKey);
        } catch (ApiException | NoApiKeyException e){
            throw new RuntimeException(e.getMessage());
        }
        System.out.println(JsonUtils.toJson(result));
        System.out.println(JsonUtils.toJson(result.getOutput()));
    }

    public static void main(String[] args){
        asyncCall();
    }
}
Contoh respons

1. Respons saat pembuatan tugas

{
    "request_id": "5dbf9dc5-4f4c-9605-85ea-xxxxxxxx",
    "output": {
        "task_id": "7277e20e-aa01-4709-xxxxxxxx",
        "task_status": "PENDING"
    }
}

2. Contoh respons untuk tugas yang selesai

video_url berlaku selama 24 jam. Harap unduh video dalam periode ini.
{
    "request_id": "1625235c-c13e-93ec-aff7-xxxxxxxx",
    "output": {
        "task_id": "464a5e46-79a6-46fd-9823-xxxxxxxx",
        "task_status": "SUCCEEDED",
        "video_url": "https://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?xxxxxx"
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Batasan

  • Retensi data: task_id dan video_url disimpan selama 24 jam, setelah itu tidak dapat dikueri atau diunduh.

  • Dukungan audio: Layanan ini hanya menghasilkan video tanpa suara. Untuk menghasilkan audio, gunakan sintesis suara.

  • Moderasi Konten: Moderasi Konten meninjau semua prompt input, gambar, dan video output. Jika ada konten yang melanggar kebijakan penggunaan, layanan mengembalikan error "IPInfringementSuspect" atau "DataInspectionFailed". Untuk detailnya, lihat Kode kesalahan.

Kode kesalahan

Jika panggilan model gagal, lihat Kode kesalahan untuk troubleshooting.

FAQ

T: Bagaimana cara menghasilkan rasio aspek tertentu?

J: Rasio aspek video output bergantung pada gambar frame pertama (first_frame_url). Namun, rasio eksak (seperti 3:4 ketat) tidak dapat dijamin, dan mungkin sedikit menyimpang.

  • Mengapa rasio aspek menyimpang?

    Model menggunakan rasio aspek gambar input sebagai garis dasar dan menghitung resolusi valid terdekat berdasarkan total piksel dari pengaturan resolution yang dipilih. Karena lebar dan tinggi video harus kelipatan 16, model melakukan penyesuaian kecil pada resolusi akhir.

    • Sebagai contoh, jika Anda memberikan gambar input 750×1000 (rasio aspek 3:4 atau 0,75) dan mengatur resolution ke "720P" (menargetkan sekitar 920.000 piksel), output aktual mungkin 816×1104 (rasio aspek sekitar 0,739, dengan sekitar 900.000 piksel).

  • Rekomendasi:

    • Gambar Input: Untuk hasil terbaik, gunakan gambar frame pertama yang sesuai dengan rasio aspek target Anda.

    • Pasca-pemrosesan: Jika diperlukan rasio aspek ketat, gunakan tool pengeditan video untuk memotong video yang dihasilkan atau menambahkan bilah hitam.

T: Bagaimana cara mendapatkan daftar putih nama domain untuk penyimpanan video?

J: Video yang dihasilkan oleh model disimpan di OSS. API mengembalikan URL publik sementara. Untuk mengonfigurasi daftar putih firewall untuk URL unduhan ini, perhatikan hal berikut: Penyimpanan dasar dapat berubah secara dinamis. Topik ini tidak menyediakan daftar putih nama domain OSS tetap untuk mencegah masalah akses akibat informasi yang kedaluwarsa. Jika Anda memiliki persyaratan kontrol keamanan, hubungi manajer akun Anda untuk mendapatkan daftar nama domain OSS terbaru.