全部产品
Search
文档中心

Alibaba Cloud Model Studio:Wan - referensi API first-and-last-frame-to-video

更新时间:Nov 27, 2025

Model first-and-last-frame-to-video Wan menghasilkan video transisi yang mulus berdasarkan citra frame pertama, citra frame terakhir, dan prompt teks. Fitur yang didukung meliputi hal-hal berikut:

  • Spesifikasi video: Durasi video tetap 5 detik, dan resolusi video tetap 720P.

  • Pengoptimalan prompt cerdas: Fitur ini secara otomatis menulis ulang prompt input, yang secara signifikan meningkatkan hasil untuk prompt pendek.

  • Lainnya: Anda dapat memilih apakah akan menambahkan watermark "AI Generated".

Tautan cepat: Coba secara online di website resmi Wan

Catatan

Fitur di website resmi Wan mungkin berbeda dengan kemampuan yang didukung oleh API. Dokumen ini menjelaskan kemampuan aktual API dan akan diperbarui seiring dirilisnya fitur baru.

Ikhtisar model

Fitur

Contoh input

Video keluaran

Citra frame pertama

Citra frame terakhir

Prompt

Pembuatan video dari frame pertama dan terakhir

first_frame

last_frame

Gaya realistis, seekor anak kucing hitam menatap langit dengan rasa ingin tahu. Kamera mulai dari ketinggian mata, secara bertahap naik, dan berakhir dengan bidikan dari atas ke bawah pada matanya yang penuh rasa ingin tahu.

Nama model

Deskripsi model

Format video output

wan2.1-kf2v-plus

Wan 2.1 Edisi Profesional (video tanpa suara)

Gerakan kompleks, fisika realistis, dan citra detail.

Opsi resolusi: 720P

Durasi video: 5 detik

Spesifikasi tetap: 30 fps, MP4 (encoding H.264)

Catatan

Sebelum melakukan pemanggilan, periksa daftar model dan harga untuk setiap wilayah.

Prasyarat

Sebelum melakukan pemanggilan, dapatkan Kunci API dan atur Kunci API sebagai variabel lingkungan. Jika Anda menggunakan SDK untuk melakukan pemanggilan, instal SDK DashScope untuk Python atau Java.

Penting

Wilayah Beijing dan Singapura memiliki Kunci API dan titik akhir permintaan yang terpisah. Jangan menggunakannya secara bergantian. Pemanggilan lintas wilayah menyebabkan kegagalan autentikasi atau kesalahan layanan.

HTTP

Karena tugas image-to-video memerlukan waktu pemrosesan yang lama (biasanya 1 hingga 5 menit), API menggunakan pemanggilan asinkron. Seluruh proses melibatkan dua langkah inti: Buat tugas -> Polling hasil.

Waktu spesifik yang diperlukan bergantung pada jumlah tugas dalam antrian dan status eksekusi layanan. Harap bersabar saat menunggu hasilnya.

Langkah 1: Buat tugas untuk mendapatkan ID tugas

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

Wilayah 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. Gunakan polling untuk mengambil hasilnya.

Parameter permintaan

Pembuatan video dari 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.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 black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes."
    },
    "parameters": {
        "resolution": "480P",
        "prompt_extend": true
    }
}'

Gunakan prompt negatif

Anda dapat menggunakan parameter negative_prompt untuk mencegah elemen "person" muncul dalam video yang dihasilkan.

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 black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
        "negative_prompt": "person"
    },
    "parameters": {
        "resolution": "720P",
        "prompt_extend": true
    }
}'
Header permintaan

Content-Type string (Wajib)

Tipe konten permintaan. Atur parameter ini ke application/json.

Authorization string (Wajib)

Kredensial autentikasi identitas untuk permintaan. API ini menggunakan Kunci API Model Studio untuk autentikasi identitas. Contoh: Bearer sk-xxxx.

X-DashScope-Async string (Wajib)

Parameter konfigurasi pemrosesan asinkron. Permintaan HTTP hanya mendukung pemrosesan asinkron. Anda harus mengatur parameter ini ke enable.

Penting

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

Body permintaan

model string (Wajib)

Nama model. Contoh: wan2.1-kf2v-plus.

Untuk informasi selengkapnya, lihat Model dan harga.

input object (Wajib)

Informasi input dasar, seperti prompt.

Properti

prompt string (Opsional)

Prompt teks. Parameter ini mendukung bahasa Tiongkok dan Inggris. Panjangnya tidak boleh melebihi 800 karakter. Setiap karakter Tiongkok atau huruf dihitung sebagai satu karakter. Karakter berlebih akan dipotong secara otomatis.

Jika subjek dan adegan berubah secara signifikan antara frame pertama dan terakhir, Anda harus menggambarkan proses transisinya, seperti pergerakan kamera (kamera bergerak ke kiri) atau pergerakan subjek (seseorang berlari maju).

Contoh: Seekor anak kucing hitam menatap langit dengan rasa ingin tahu, kamera secara bertahap naik dari ketinggian mata, dan akhirnya menangkap bidikan dari atas ke bawah pada matanya yang penuh rasa ingin tahu.

Untuk informasi selengkapnya, lihat Panduan prompt Text-to-video/Image-to-video.

negative_prompt string (Opsional)

Prompt negatif. Anda dapat menggunakan parameter ini untuk menggambarkan konten yang tidak ingin muncul dalam video. Parameter ini dapat digunakan untuk membatasi konten video.

Parameter ini mendukung bahasa Tiongkok dan Inggris. Panjangnya tidak boleh melebihi 500 karakter. Karakter berlebih akan dipotong secara otomatis.

Contoh: resolusi rendah, error, kualitas terburuk, kualitas rendah, cacat, jari ekstra, atau proporsi buruk.

first_frame_url string (Wajib)

URL citra frame pertama. Rasio aspek video output akan sama dengan citra frame pertama.

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

Persyaratan citra:

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

  • Resolusi citra: Lebar dan tinggi citra harus antara 360 dan 2000 piksel.

  • Ukuran file: Tidak boleh melebihi 10 MB.

last_frame_url string (Wajib)

URL citra frame terakhir.

URL harus berupa titik akhir publik yang mendukung protokol HTTP atau HTTPS.

Persyaratan citra:

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

  • Resolusi citra: Lebar dan tinggi citra harus antara 360 dan 2000 piksel. Resolusi citra frame terakhir dapat berbeda dari citra frame pertama. Keduanya tidak perlu sejajar.

  • Ukuran file: Tidak boleh melebihi 10 MB.

parameters object (Opsional)

Parameter pemrosesan video.

Properti

resolution string (Opsional)

Penting

Resolusi secara langsung memengaruhi biaya. Untuk model yang sama, resolusi yang lebih tinggi lebih mahal (1080P > 720P > 480P), jadi Anda harus memastikan harga model sebelum melakukan pemanggilan.

Tingkat resolusi video yang dihasilkan. Parameter ini hanya menyesuaikan definisi video (total piksel) dan tidak mengubah rasio aspek. Rasio aspek video tetap konsisten dengan rasio aspek citra frame pertama (first_frame_url).

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

  • wan2.1-kf2v-plus: Nilai opsional adalah 720P. Nilai default adalah 720P.

Contoh: 720P.

duration integer (Opsional)

Penting

Durasi secara langsung memengaruhi biaya, dan Anda ditagih per detik. Sebelum memanggil model, Anda harus memastikan harga model.

Durasi video yang dihasilkan, dalam detik. Parameter ini saat ini tetap 5 dan tidak dapat dimodifikasi. Model selalu menghasilkan video berdurasi 5 detik.

prompt_extend bool (Opsional)

Menentukan apakah akan mengaktifkan penulisan ulang prompt. Saat fitur ini diaktifkan, model bahasa besar digunakan untuk menulis ulang prompt input. Ini secara signifikan meningkatkan hasil untuk prompt yang lebih pendek tetapi meningkatkan waktu pemrosesan.

  • true (default)

  • false

Contoh: true.

watermark bool (Opsional)

Menentukan apakah akan menambahkan watermark. Watermark terletak di pojok kanan bawah video, bertuliskan "AI Generated".

  • false (default)

  • true

Contoh: false.

seed integer (Opsional)

Bilangan acak seed. Nilainya harus berada dalam rentang [0, 2147483647].

Jika parameter ini tidak ditentukan, sistem secara otomatis menghasilkan seed acak. Untuk meningkatkan reproduktibilitas hasil generasi, Anda dapat memperbaiki nilai seed.

Perhatikan bahwa karena sifat probabilistik dari generasi model, menggunakan seed yang sama tidak menjamin hasilnya akan identik setiap kali.

Contoh: 12345.

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. Untuk informasi selengkapnya, lihat Pesan kesalahan untuk menyelesaikan masalah.

{
    "code":"InvalidApiKey",
    "message":"Invalid API-key provided.",
    "request_id":"fb53c4ec-1c12-4fc4-a580-xxxxxx"
}

output object

Informasi output tugas.

Properti

task_id string

ID tugas. Kueri berlaku selama 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak dapat ditentukan.

request_id string

ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah.

code string

Kode kesalahan untuk permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi selengkapnya, lihat Pesan kesalahan.

message string

Informasi detail tentang permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi selengkapnya, lihat Pesan kesalahan.

Langkah 2: Kueri hasil berdasarkan ID tugas

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

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

Catatan
  • Saran polling: Pembuatan video memerlukan waktu beberapa menit. Gunakan mekanisme polling dan atur interval kueri yang wajar, misalnya 15 detik, untuk mengambil hasilnya.

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

  • Tautan hasil: Setelah tugas berhasil, tautan video dikembalikan. Tautan tersebut berlaku selama 24 jam. Setelah Anda mengambil tautannya, segera unduh dan simpan video ke layanan penyimpanan permanen, seperti Object Storage Service.

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

Parameter permintaan

Kueri hasil tugas

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

Kunci API untuk wilayah Singapura dan Beijing berbeda. Buat Kunci API.
`base_url` berikut ini untuk wilayah Singapura. 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 autentikasi identitas untuk permintaan. API ini menggunakan Kunci API Model Studio untuk autentikasi identitas. Contoh: Bearer sk-xxxx.

Parameter jalur

task_id string (Wajib)

ID tugas.

Parameter respons

Tugas berhasil dieksekusi

URL video hanya disimpan selama 24 jam dan secara otomatis dihapus setelah periode ini. Anda harus segera menyimpan 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 black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
        "actual_prompt": "Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes. its 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 its black silhouette. Close-up shot, emphasizing the change in its expression and the details of its eyes."
    },
    "usage": {
        "video_duration": 5,
        "video_count": 1,
        "SR": 480
    }
}

Eksekusi tugas gagal

Jika tugas gagal, task_status diatur ke FAILED, dan kode kesalahan serta pesan disediakan. Untuk informasi selengkapnya, lihat Pesan 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 pesan kesalahan berikut dikembalikan.

{
    "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. Kueri berlaku selama 24 jam.

task_status string

Status tugas.

Enumerasi

  • PENDING

  • RUNNING

  • SUCCEEDED

  • FAILED

  • CANCELED

  • UNKNOWN: Tugas tidak ada atau statusnya tidak dapat ditentukan.

Transisi status selama polling:

  • PENDING → RUNNING → SUCCEEDED atau FAILED.

  • Status kueri pertama biasanya PENDING atau RUNNING.

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

  • Jika statusnya FAILED, periksa pesan kesalahan dan coba lagi.

submit_time string

Waktu saat tugas diajukan. Waktu dalam zona waktu UTC+8. Formatnya adalah YYYY-MM-DD HH:mm:ss.SSS.

scheduled_time string

Waktu saat tugas mulai berjalan. Waktu dalam zona waktu UTC+8. Formatnya adalah YYYY-MM-DD HH:mm:ss.SSS.

end_time string

Waktu saat tugas selesai. Waktu dalam zona waktu UTC+8. Formatnya adalah YYYY-MM-DD HH:mm:ss.SSS.

video_url string

URL video. Parameter ini hanya dikembalikan jika task_status adalah SUCCEEDED.

Tautan berlaku selama 24 jam. Anda dapat menggunakan URL ini untuk mengunduh video. Video dalam format MP4 dengan encoding H.264.

orig_prompt string

Prompt input asli. Ini sesuai dengan parameter permintaan prompt.

actual_prompt string

Jika penulisan ulang prompt diaktifkan, parameter ini mengembalikan prompt yang dioptimalkan sebenarnya yang digunakan. Jika fitur ini dinonaktifkan, parameter ini tidak dikembalikan.

code string

Kode kesalahan untuk permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi selengkapnya, lihat Pesan kesalahan.

message string

Informasi detail tentang permintaan yang gagal. Parameter ini tidak dikembalikan jika permintaan berhasil. Untuk informasi selengkapnya, lihat Pesan kesalahan.

usage object

Statistik informasi output. Hanya hasil yang berhasil yang dihitung.

Properti

video_duration integer

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

video_count integer

Jumlah video yang dihasilkan. Nilai ini tetap 1.

video_ratio string

Saat ini, hanya model 2.1 yang mengembalikan nilai ini. Rasio aspek video yang dihasilkan tetap standar.

SR integer

Saat ini, hanya model 2.2 yang mengembalikan nilai ini. Tingkat resolusi video yang dihasilkan. Nilai enumerasi adalah 480, 720, dan 1080.

request_id string

ID permintaan unik. Anda dapat menggunakan ID ini untuk melacak dan memecahkan masalah.

DashScope SDK

Nama parameter SDK sebagian besar konsisten dengan API HTTP, dan struktur parameter dienkapsulasi sesuai dengan fitur khas bahasa.

Karena tugas image-to-video memerlukan waktu pemrosesan yang lama (biasanya 1 hingga 5 menit), SDK mengenkapsulasi proses pemanggilan asinkron HTTP di lapisan dasar dan mendukung metode pemanggilan sinkron maupun asinkron.

Waktu spesifik yang diperlukan bergantung pada jumlah tugas dalam antrian dan status eksekusi layanan. Harap bersabar saat menunggu hasilnya.

Python SDK

Python SDK mendukung dua metode input citra: URL Internet atau jalur file lokal (absolut atau relatif). Untuk informasi selengkapnya, lihat Citra Input.

Catatan

Kami menyarankan Anda menginstal versi terbaru SDK Python DashScope. Jika tidak, Anda mungkin mengalami kesalahan waktu proses: Instal atau tingkatkan SDK.

Pemanggilan sinkron

Contoh ini menunjukkan metode pemanggilan sinkron, yang mencakup dua metode input citra: 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 dari variabel lingkungan (yaitu Kunci API Alibaba Cloud Model Studio)
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input citra (pilih salah satu) ==========
# [Metode 1] Gunakan URL citra 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"              # Berdasarkan jalur aktual
# last_frame_url = "file://" + "./last_frame.png"                # Berdasarkan jalur aktual

def sample_sync_call_kf2v():
    print('mohon tunggu...')
    rsp = VideoSynthesis.call(api_key=api_key,
                              model="wan2.1-kf2v-plus",
                              prompt="Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
                              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('Gagal, 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. Anda harus segera mengunduh video 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 black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
        "actual_prompt": "Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes. its yellow eyes are bright and expressive, its ears are pricked, and its whiskers are clearly visible. The background is a simple light-colored wall, highlighting its black fur and focused expression. Close-up shot, emphasizing the change in its gaze and posture."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Pemanggilan asinkron

Contoh ini menunjukkan metode pemanggilan asinkron. Metode ini segera mengembalikan ID tugas, dan Anda perlu melakukan polling atau menunggu tugas selesai sendiri.

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 dari variabel lingkungan (yaitu Kunci API Alibaba Cloud Model Studio)
api_key = os.getenv("DASHSCOPE_API_KEY")

# ========== Metode input citra (pilih salah satu) ==========
# [Metode 1] Gunakan URL citra 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"              # Berdasarkan jalur aktual
# last_frame_url = "file://" + "./last_frame.png"                # Berdasarkan jalur aktual

def sample_async_call_kf2v():
    print('mohon tunggu...')
    rsp = VideoSynthesis.async_call(api_key=api_key,
                                    model="wan2.1-kf2v-plus",
                                    prompt="Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
                                    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('Gagal, 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('Gagal, 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('Gagal, status_code: %s, code: %s, message: %s' %
              (rsp.status_code, rsp.code, rsp.message))


if __name__ == '__main__':
    sample_async_call_kf2v()
Contoh respons

1. Contoh 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. Contoh respons untuk mengkueri hasil tugas

video_url berlaku selama 24 jam. Anda harus segera mengunduh video 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 black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.",
        "actual_prompt": "Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes. its 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 kitten turns to look directly at the camera, its eyes full of curiosity and alertness. The background is simple, highlighting its detailed features. Close-up shot with soft, natural light."
    },
    "usage": {
        "video_count": 1,
        "video_duration": 5,
        "video_ratio": "standard"
    }
}

Java SDK

Java SDK mendukung dua metode input citra: URL Internet atau jalur file lokal (jalur absolut). Untuk informasi selengkapnya, lihat Citra input.

Catatan

Kami menyarankan Anda menginstal versi terbaru SDK Java DashScope. Jika tidak, kesalahan waktu proses mungkin terjadi: Instal atau tingkatkan SDK.

Pemanggilan sinkron

Contoh ini menunjukkan metode pemanggilan sinkron, yang mencakup dua metode input citra: URL publik dan jalur file lokal.

Contoh permintaan
// Copyright (c) Alibaba, Inc. dan afiliasinya.

// 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 dari variabel lingkungan (yaitu Kunci API Alibaba Cloud Model Studio)
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input citra (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.1-kf2v-plus")
                        .prompt("Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            System.out.println("---pemanggilan sinkron, mohon tunggu sebentar----");
            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. Anda harus segera mengunduh video 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"
    }
}

Pemanggilan asinkron

Contoh ini menunjukkan metode pemanggilan asinkron. Metode ini segera mengembalikan ID tugas, dan Anda perlu melakukan polling atau menunggu tugas selesai sendiri.

Contoh permintaan
// Copyright (c) Alibaba, Inc. dan afiliasinya.

// 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 dari variabel lingkungan (yaitu Kunci API Alibaba Cloud Model Studio)
    static String apiKey = System.getenv("DASHSCOPE_API_KEY");

    /**
     * Metode input citra (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.1-kf2v-plus")
                        .prompt("Realistic style, a black kitten looks up at the sky curiously. The camera starts at eye level, gradually rises, and ends with a top-down shot of its curious eyes.")
                        .firstFrameUrl(firstFrameUrl)
                        .lastFrameUrl(lastFrameUrl)
                        .parameters(parameters)
                        .build();
        VideoSynthesisResult result = null;
        try {
            System.out.println("---pemanggilan asinkron, mohon tunggu sebentar----");
            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. Contoh respons untuk membuat tugas

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

2. Contoh respons untuk mengkueri hasil tugas

video_url berlaku selama 24 jam. Anda harus segera mengunduh video 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

  • Masa berlaku data: task_id dan URL video hanya disimpan selama 24 jam. Setelah periode ini, data tersebut tidak dapat dikueri atau diunduh.

  • Dukungan audio: Fitur ini hanya mendukung pembuatan video tanpa suara. Output audio tidak didukung. Untuk menambahkan audio, Anda dapat menghasilkannya menggunakan sintesis suara.

  • Moderasi konten: Prompt input, citra input, dan video output dikenai moderasi konten. Jika kontennya tidak sesuai, kesalahan "IPInfringementSuspect" atau "DataInspectionFailed" dikembalikan. Untuk informasi selengkapnya, lihat Pesan kesalahan.

Deskripsi parameter utama

Citra input

Parameter citra input first_frame_url dan last_frame_url keduanya mendukung metode input berikut:

Metode 1: URL Publik

  • URL yang dapat diakses publik yang mendukung protokol HTTP atau HTTPS.

  • Contoh: https://example.com/images/cat.png.

Metode 2: Jalur file lokal (hanya SDK)

  • Python SDK: Mendukung pengiriman jalur absolut dan relatif file. Aturan jalur file adalah sebagai berikut:

    Sistem

    Path file yang diteruskan

    Contoh (jalur absolut)

    Contoh (jalur relatif)

    Linux atau macOS

    file://{jalur absolut atau relatif file}

    file:///home/images/test.png

    file://./images/test.png

    Windows

    file://D:/images/test.png

    file://./images/test.png

  • Java SDK: Hanya mendukung pengiriman jalur absolut file. Aturan jalur file adalah sebagai berikut:

    Sistem

    Jalur file yang dikirim

    Contoh (jalur absolut)

    Linux atau macOS

    file://{jalur absolut file}

    file:///home/images/test.png

    Windows

    file:///{jalur absolut file}

    file:///D:/images/test.png

Penagihan dan pembatasan laju

  • Untuk kuota gratis dan harga, lihat Model.

  • Untuk batas laju, lihat Seri Wan.

  • Deskripsi penagihan:

    • Penagihan didasarkan pada jumlah detik video yang berhasil dihasilkan. Anda hanya dikenai biaya ketika API hasil kueri mengembalikan task_status SUCCEEDED dan video berhasil dihasilkan.

    • Pemanggilan model yang gagal atau kesalahan pemrosesan tidak dikenai biaya atau mengonsumsi kuota gratis.

Kode kesalahan

Jika pemanggilan model gagal dan mengembalikan pesan kesalahan, lihat Pesan kesalahan untuk menyelesaikan masalah.

FAQ

Tautan cepat FAQ Video: FAQ.

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

J: Rasio aspek video output ditentukan oleh citra frame pertama input (img_url), tetapi rasio eksak, seperti 3:4 yang ketat, tidak dapat dijamin.

Cara kerjanya: Model menggunakan rasio aspek citra input sebagai garis dasar, lalu menyesuaikannya ke resolusi yang didukung berdasarkan parameter resolusi, seperti 480p, 720p, atau 1080p. Karena resolusi output harus memenuhi persyaratan teknis di mana lebar dan tinggi harus habis dibagi 16, rasio aspek akhir mungkin memiliki sedikit penyimpangan, misalnya penyesuaian dari 0,75 menjadi 0,739. Ini adalah perilaku normal.

  • Contoh: Citra input berukuran 750 × 1000 (rasio aspek 3:4 = 0,75), dan `resolution` diatur ke "720p" (total piksel target sekitar 920.000). Output aktual adalah 816 × 1104 (rasio aspek ≈ 0,739, total piksel sekitar 900.000).

  • Perhatikan bahwa parameter resolusi terutama mengontrol definisi video (jumlah total piksel). Rasio aspek video akhir tetap berdasarkan citra input, dengan hanya penyesuaian minor yang diperlukan.

Praktik terbaik: Untuk mencocokkan rasio target secara ketat, gunakan citra input dengan rasio tersebut, lalu lakukan pasca-pemrosesan pada video output dengan memotong atau menambahkan padding. Misalnya, Anda dapat menggunakan tool pengeditan video untuk memotong video output ke rasio target, atau menambahkan bilah hitam atau latar belakang buram untuk padding.