All Products
Search
Document Center

Alibaba Cloud Model Studio:Wan - referensi API pembuatan video dari frame pertama dan terakhir

Last Updated:Mar 13, 2026

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

Referensi: Panduan pengguna

Cakupan

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

Catatan

Kode contoh dalam topik ini berlaku untuk wilayah Singapura.

Panggilan HTTP

Karena tugas image-to-video biasanya memakan waktu 1 hingga 5 menit, API menggunakan panggilan asinkron. Proses lengkap terdiri dari dua langkah inti: Buat tugas → Polling hasil.

Langkah 1: Buat tugas dan dapatkan ID tugas

Singapura

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

Beijing

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

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

  • Untuk tutorial pemula, lihat Gunakan Postman atau cURL.

Parameter permintaan

Pembuatan video berbasis frame pertama dan terakhir

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

curl --location 'https://dashscope-intl.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
    }
}'

Gunakan prompt negatif

Gunakan parameter negative_prompt untuk mencegah video yang dihasilkan mengandung "people".

curl --location 'https://dashscope-intl.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 berupa application/json.

Authorization string (Wajib)

Kredensial otentikasi menggunakan Kunci API Model Studio.

Contoh: Bearer sk-xxxx

X-DashScope-Async string (Wajib)

Mengaktifkan pemrosesan asinkron. Harus diatur ke enable karena permintaan HTTP hanya mendukung pemrosesan asinkron.

Penting

Mengembalikan kesalahan "current user api does not support synchronous calls" jika tidak disertakan.

Body permintaan

model string (Wajib)

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

Untuk informasi lebih lanjut, lihat Daftar model dan harga.

input object (Wajib)

Informasi input dasar, seperti prompt.

Properti

prompt string (Opsional)

Prompt teks. Mendukung bahasa Tionghoa dan Inggris. Panjang maksimum: 800 karakter. Setiap karakter Tionghoa atau huruf dihitung sebagai satu karakter. Teks yang melebihi batas akan dipotong secara otomatis.

Jika subjek atau adegan berubah secara signifikan antara frame pertama dan terakhir, jelaskan transisinya—misalnya, pergerakan kamera (kamera bergerak ke kiri) atau pergerakan subjek (orang berlari maju).

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

Untuk praktik terbaik prompt, lihat Panduan prompt untuk text-to-video dan image-to-video.

negative_prompt string (Opsional)

Prompt negatif yang menggambarkan konten yang tidak Anda inginkan dalam video. Ini membantu membatasi output.

Mendukung bahasa Tionghoa dan Inggris. Panjang maksimum: 500 karakter. Teks yang melebihi batas akan dipotong secara otomatis.

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 mengikuti gambar ini.

URL harus dapat diakses publik dan mendukung HTTP atau HTTPS.

Persyaratan gambar:

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

  • Resolusi: Lebar dan tinggi harus antara 240 hingga 8.000 piksel.

  • Ukuran file: Maksimal 10 MB.

last_frame_url string (Wajib)

URL gambar frame terakhir.

URL harus dapat diakses publik dan mendukung HTTP atau HTTPS.

Persyaratan gambar:

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

  • Resolusi gambar: Lebar dan tinggi gambar harus antara 240 hingga 8.000 piksel. Resolusi frame terakhir tidak perlu sama dengan resolusi frame pertama.

  • Ukuran file: Maksimal 10 MB.

parameters object (Opsional)

Parameter pemrosesan video.

Properti

resolution string (Opsional)

Penting

resolution berdampak langsung pada biaya. Untuk model yang sama: 1080P > 720P > 480P. Konfirmasi harga model sebelum memanggil.

Tingkat resolusi untuk video yang dihasilkan. Ini hanya menyesuaikan definisi (total piksel) dan tidak mengubah rasio aspek. Rasio aspek video mengikuti gambar frame pertama yang ditentukan oleh first_frame_url.

Nilai default dan nilai yang tersedia bergantung pada parameter model:

  • wan2.2-kf2v-flash: Opsi adalah 480P, 720P, dan 1080P. Default adalah 720P.

  • wan2.1-kf2v-plus: Opsi adalah 720P. Default adalah 720P.

Contoh: 720P.

duration integer (Opsional)

Penting

Durasi berdampak langsung pada biaya. Penagihan per detik. Konfirmasi harga model sebelum memanggil.

Durasi video yang dihasilkan dalam detik. Nilai ini tetap 5 dan tidak dapat diubah. Model selalu menghasilkan video berdurasi 5 detik.

prompt_extend bool (Opsional)

Aktifkan penulisan ulang prompt. Jika diaktifkan, model bahasa besar akan menulis ulang prompt input. Ini meningkatkan hasil untuk prompt pendek tetapi menambah waktu pemrosesan.

  • true (default): Aktifkan penulisan ulang prompt.

  • false: Nonaktifkan penulisan ulang prompt.

Contoh: true.

watermark bool (Opsional)

Menambahkan Watermark di pojok kanan bawah gambar yang menampilkan "AI-generated".

  • false (default): Jangan tambahkan Watermark.

  • true: Tambahkan Watermark.

Contoh: false.

seed integer (Opsional)

Bilangan acak seed. Harus berupa bilangan bulat antara 0 dan 2147483647.

Jika tidak diberikan, seed acak akan dihasilkan. Menggunakan seed tetap meningkatkan kemampuan reproduksi, meskipun hasilnya masih dapat bervariasi karena keacakan model.

Contoh: 12345

Parameter respons

Respons sukses

Simpan task_id untuk menanyakan status dan hasil tugas.

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

Respons kesalahan

Pembuatan tugas gagal. Lihat kode kesalahan untuk menyelesaikan masalah.

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

output object

Informasi output tugas.

Properti

task_id string

ID tugas. Dapat digunakan untuk menanyakan status tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau status tidak diketahui

request_id string

Pengidentifikasi unik untuk permintaan. Gunakan untuk pelacakan dan pemecahan masalah.

code string

Kode kesalahan. Hanya dikembalikan saat permintaan gagal. Lihat kode kesalahan untuk detailnya.

message string

Pesan kesalahan detail. Hanya dikembalikan saat permintaan gagal. Lihat kode kesalahan untuk detailnya.

Langkah 2: Tanyakan hasil berdasarkan ID tugas

Singapura

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

Beijing

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

Catatan
  • Saran polling: Pembuatan video dapat memakan waktu beberapa menit. Gunakan mekanisme polling dengan interval permintaan yang wajar, misalnya 15 detik, untuk mengambil hasilnya.

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

  • URL hasil: Setelah tugas berhasil, URL video dikembalikan. URL tersebut berlaku selama 24 jam. Setelah Anda mendapatkan URL, segera unduh dan simpan video ke layanan penyimpanan permanen, seperti Object Storage Service (OSS).

  • Masa berlaku task_id: 24 jam. Setelah periode ini, Anda tidak dapat menanyakan hasilnya, dan API mengembalikan status tugas UNKNOWN.

Parameter permintaan

Hasil Tugas Kueri

Ganti 86ecf553-d340-4e21-xxxxxxxxx dengan ID tugas aktual.

Kunci API bersifat spesifik wilayah. Lihat dokumentasi Kunci API untuk detailnya.
Untuk model di wilayah Beijing, ganti base_url dengan https://dashscope.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx
curl -X GET https://dashscope-intl.aliyuncs.com/api/v1/tasks/86ecf553-d340-4e21-xxxxxxxxx \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"
Header permintaan

Authorization string (Wajib)

Kredensial otentikasi menggunakan Kunci API Model Studio.

Contoh: Bearer sk-xxxx

Parameter path

task_id string (Wajib)

ID tugas yang akan ditanyakan.

Parameter respons

Tugas berhasil

URL video hanya disimpan 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 diatur ke FAILED dengan kode kesalahan dan pesan. Lihat kode kesalahan untuk menyelesaikan masalah.

{
    "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 gagal dan mengembalikan pesan kesalahan berikut.

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

output object

Informasi output tugas.

Properti

task_id string

ID tugas. Dapat digunakan untuk menanyakan status tugas hingga 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau status tidak diketahui

Transisi status selama polling:

  • PENDING → RUNNING → SUCCEEDED atau FAILED

  • Kueri pertama biasanya mengembalikan PENDING atau RUNNING

  • Status SUCCEEDED mencakup URL video yang dihasilkan dalam respons

  • Status FAILED memerlukan pemeriksaan pesan kesalahan dan percobaan ulang

submit_time string

Waktu pengajuan tugas. Waktu dalam UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu mulai eksekusi tugas. Waktu dalam UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

end_time string

Waktu penyelesaian tugas. Waktu dalam UTC+8. Format: YYYY-MM-DD HH:mm:ss.SSS.

video_url string

URL video yang dihasilkan. Hanya dikembalikan saat task_status bernilai SUCCEEDED.

URL berlaku selama 24 jam. Gunakan untuk mengunduh video dalam format MP4 dengan encoding H.264.

orig_prompt string

Prompt input asli. Merupakan nilai dari parameter permintaan prompt.

actual_prompt string

Mengembalikan prompt yang dioptimalkan jika fitur penulisan ulang prompt diaktifkan. Tidak dikembalikan jika fitur ini dinonaktifkan.

code string

Kode kesalahan. Hanya dikembalikan saat permintaan gagal. Lihat kode kesalahan untuk detailnya.

message string

Pesan kesalahan detail. Hanya dikembalikan saat permintaan gagal. Lihat kode kesalahan untuk detailnya.

usage object

Statistik Penggunaan. Hanya mencakup hasil yang berhasil.

Properti

video_duration integer

Durasi video dalam detik. Nilai: 5. Rumus penagihan: Biaya = Durasi video (detik) × Harga satuan.

video_count integer

Jumlah video yang dihasilkan. Nilainya selalu 1.

video_ratio string

Hanya dikembalikan oleh model 2.1. Rasio aspek video. Nilainya tetap standar.

SR integer

Hanya dikembalikan oleh model 2.2. Tingkat resolusi video. Nilai: 480, 720, atau 1080.

request_id string

Pengidentifikasi unik untuk permintaan. Gunakan untuk pelacakan dan pemecahan masalah.

Pemanggilan SDK DashScope

Nama parameter SDK sesuai dengan yang ada di API HTTP. Struktur parameter dienkapsulasi sesuai konvensi bahasa pemrograman tertentu.

Karena tugas image-to-video biasanya memakan waktu 1 hingga 5 menit, SDK membungkus logika panggilan asinkron HTTP dan mendukung panggilan sinkron maupun asinkron.

Waktu pemrosesan aktual bergantung pada panjang antrian dan kinerja layanan. Harap tunggu hasilnya.

Panggilan SDK Python

Penting

Pastikan versi SDK Python DashScope Anda minimal 1.23.8 sebelum menjalankan kode di bawah.

Versi lama dapat memicu kesalahan, seperti "url error, please check url!". Untuk memperbarui SDK Anda, lihat panduan instalasi SDK.

Atur base_http_api_url berdasarkan wilayah model Anda:

Singapura

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

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
# dashscope sdk >= 1.23.4
from dashscope import VideoSynthesis
import dashscope

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

# Dapatkan Kunci API DashScope (Kunci API Model Studio) 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. Pastikan mengunduh video dalam waktu tersebut.
{
    "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 up, and its whiskers are clearly visible. The background is a simple, light-colored wall, which 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 untuk memperoleh hasil atau menunggu hingga proses selesai.

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

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

# Dapatkan Kunci API DashScope (Kunci API Model Studio) 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, akan memanggil fetch secara berkala, dan memeriksa apakah statusnya 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 untuk membuat 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. Respons untuk menanyakan hasil tugas

video_url berlaku selama 24 jam. Pastikan mengunduh video dalam waktu tersebut.
{
    "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 shiny, 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 look directly at the camera, its eyes full of 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

Pastikan versi SDK Java DashScope Anda minimal 2.20.9 sebelum menjalankan kode di bawah ini.

Versi lama dapat menyebabkan kesalahan, seperti "url error, please check url!". Untuk memperbarui SDK, lihat panduan instalasi SDK.

Kode contoh

Panggilan sinkron

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

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

// dashscope sdk >= 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://dashscope-intl.aliyuncs.com/api/v1";
    }

    // Dapatkan Kunci API DashScope (Kunci API Model Studio) 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 {
            System.out.println("---sync call, please wait a moment----");
            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. Pastikan mengunduh video dalam waktu tersebut.
{
    "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 berikut menunjukkan panggilan asinkron yang langsung mengembalikan ID tugas. Anda perlu melakukan polling untuk memperoleh hasil atau menunggu hingga proses selesai.

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

// dashscope sdk >= 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://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    // Dapatkan Kunci API DashScope (Kunci API Model Studio) 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(){

        // Atur 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 {
            System.out.println("---async call, please wait a moment----");
            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 untuk membuat tugas

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

2. Respons untuk menanyakan hasil tugas

video_url berlaku selama 24 jam. Pastikan mengunduh video dalam waktu tersebut.
{
    "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 kedaluwarsa, tidak dapat ditanyakan atau diunduh.

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

  • Moderasi konten: Moderasi Konten meninjau semua prompt input, gambar, dan video output. Jika konten melanggar kebijakan kami, sistem mengembalikan kesalahan "IPInfringementSuspect" atau "DataInspectionFailed". Untuk detailnya, lihat Pesan kesalahan.

Kode kesalahan

Jika panggilan model gagal dan mengembalikan pesan kesalahan, lihat Pesan kesalahan untuk troubleshooting.

FAQ

T: Bagaimana cara menghasilkan video dengan rasio aspek tertentu, seperti 3:4?

J: Rasio aspek video output ditentukan oleh gambar frame pertama (first_frame_url). Namun, rasio eksak—seperti 3:4 yang ketat—tidak dijamin dan mungkin sedikit berbeda.

  • Mengapa terjadi deviasi?

    Model menggunakan rasio aspek gambar input Anda sebagai garis dasar dan secara otomatis menghitung resolusi valid terdekat berdasarkan jumlah total piksel yang ditentukan dalam pengaturan resolusi. Karena dimensi video harus kelipatan 16, model menyempurnakan resolusi akhir. Akibatnya, rasio aspek output mungkin tidak tepat 3:4, tetapi akan sangat mendekati.

    • Contoh: gambar input 750 × 1000 (rasio aspek 3:4 = 0,75), dan resolusi diatur ke “720P” (total piksel target ≈ 920.000); output aktual adalah 816 × 1104 (rasio aspek ≈ 0,739, total piksel ≈ 900.000).

  • Praktik terbaik:

    • Kontrol input: Gunakan gambar frame pertama dengan rasio aspek sedekat mungkin dengan target Anda.

    • Pasca-pemrosesan: Jika Anda memerlukan rasio eksak, potong video yang dihasilkan atau tambahkan bilah hitam menggunakan alat pengeditan.

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

J: Video yang dihasilkan 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.