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.
-
Pilih model: Konfirmasi wilayah model Anda.
-
Pilih URL: Pilih URL titik akhir untuk wilayah Anda. Baik URL HTTP maupun URL SDK DashScope didukung.
-
Konfigurasikan Kunci API Anda: Pilih wilayah Anda dan dapatkan Kunci API Anda, lalu konfigurasikan Kunci API Anda sebagai Variabel lingkungan.
-
Instal SDK: Jika Anda berencana memanggil API menggunakan SDK, instal SDK DashScope.
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
Setelah tugas dibuat, gunakan
task_idyang dikembalikan untuk menanyakan hasilnya.task_idberlaku 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 terakhirHasilkan video berdasarkan frame pertama, frame terakhir, dan prompt.
Gunakan prompt negatifGunakan parameter negative_prompt untuk mencegah video yang dihasilkan mengandung "people".
|
Header permintaan |
|
|
Content-Type Tipe konten permintaan. Harus berupa |
|
|
Authorization Kredensial otentikasi menggunakan Kunci API Model Studio. Contoh: |
|
|
X-DashScope-Async Mengaktifkan pemrosesan asinkron. Harus diatur ke Penting Mengembalikan kesalahan "current user api does not support synchronous calls" jika tidak disertakan. |
|
Body permintaan |
|
|
model Nama model. Contoh: wan2.2-kf2v-flash. Untuk informasi lebih lanjut, lihat Daftar model dan harga. |
|
|
input Informasi input dasar, seperti prompt. |
|
|
parameters Parameter pemrosesan video. |
Parameter respons |
Respons suksesSimpan Respons kesalahanPembuatan tugas gagal. Lihat kode kesalahan untuk menyelesaikan masalah. |
|
output Informasi output tugas. |
|
|
request_id Pengidentifikasi unik untuk permintaan. Gunakan untuk pelacakan dan pemecahan masalah. |
|
|
code Kode kesalahan. Hanya dikembalikan saat permintaan gagal. Lihat kode kesalahan untuk detailnya. |
|
|
message 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}
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 KueriGanti Kunci API bersifat spesifik wilayah. Lihat dokumentasi Kunci API untuk detailnya. Untuk model di wilayah Beijing, ganti base_url dengan |
Header permintaan |
|
|
Authorization Kredensial otentikasi menggunakan Kunci API Model Studio. Contoh: |
|
Parameter path |
|
|
task_id ID tugas yang akan ditanyakan. |
Parameter respons |
Tugas berhasilURL video hanya disimpan selama 24 jam, lalu secara otomatis dihapus. Segera simpan video yang dihasilkan.
Tugas gagalSaat tugas gagal,
Kueri tugas kedaluwarsa
|
|
output Informasi output tugas. |
|
|
usage Statistik Penggunaan. Hanya mencakup hasil yang berhasil. |
|
|
request_id 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
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
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_iddanvideo_urldisimpan 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.