VideoRetalk adalah model yang menghasilkan video baru dari seseorang yang berbicara dengan menyinkronkan gerakan bibirnya sesuai trek audio yang diberikan. Dokumen ini menjelaskan cara menggunakan API untuk menghasilkan video.
Dokumen ini hanya berlaku untuk wilayah China (Beijing). Untuk menggunakan model ini, gunakan API key dari wilayah China (Beijing).
HTTP
API VideoRetalk hanya mendukung panggilan HTTP dan menggunakan proses asinkron untuk mengurangi waktu tunggu serta mencegah timeout permintaan. Oleh karena itu, Anda perlu membuat dua permintaan terpisah untuk menghasilkan video:
Kirim task: Kirim permintaan untuk membuat task pembuatan video. API akan mengembalikan ID task.
Kueri status task dan ambil hasil: Gunakan ID task yang dikembalikan untuk mengecek status task dan mengambil video yang dihasilkan.
Prasyarat
Anda telah membuat API key dan menyetel API key sebagai environment variable.
Batasan input
Persyaratan video:
File: Format MP4, AVI, dan MOV didukung. Ukuran file maksimal 300 MB dengan durasi antara 2 hingga 120 detik.
Properti: Laju frame video harus antara 15 fps hingga 60 fps. Video harus dikodekan dalam H.264 atau H.265. Panjang setiap sisi harus antara 640 hingga 2.048 piksel.
Konten: Video harus berupa bidikan close-up wajah seseorang yang menghadap ke depan. Hindari sudut samping ekstrem atau wajah yang sangat kecil.
Persyaratan audio:
File: Format WAV, MP3, dan AAC didukung. Ukuran file maksimal 30 MB dengan durasi antara 2 hingga 120 detik.
Konten: Audio harus berisi suara manusia yang jelas dan keras. Hilangkan gangguan seperti kebisingan latar atau musik latar.
Persyaratan gambar referensi karakter:
File: Format JPEG, JPG, PNG, BMP, dan WebP didukung. Ukuran file maksimal 10 MB.
Konten: Gambar harus berisi tampilan frontal wajah seseorang yang jelas, dan orang tersebut harus muncul dalam video. Anda juga dapat menggunakan tangkapan layar dari video tersebut.
Persyaratan URL file:
File video, audio, dan gambar yang diunggah harus dapat diakses melalui tautan HTTP. Jalur lokal tidak didukung. Anda juga dapat menggunakan temporary storage space yang disediakan oleh platform untuk mengunggah file lokal dan membuat tautan.
Kirim task
POST https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/Parameter permintaan
Field | Type | Location | Required | Description | Example |
Content-Type | String | Header | Yes | Jenis permintaan: application/json | application/json |
Authorization | String | Header | Yes | API key. Contoh: Bearer d1**2a | Bearer d1**2a |
X-DashScope-Async | String | Header | Yes | Atur ke | enable |
model | String | Body | Yes | Menentukan model yang akan dipanggil. | videoretalk |
input.video_url | String | Body | Yes | URL file video yang Anda unggah. URL harus dapat diakses publik dan menggunakan protokol HTTP atau HTTPS. Persyaratan file video:
| http://aaa/bbb.mp4 |
input.audio_url | String | Body | Yes | URL file audio yang Anda unggah. URL harus dapat diakses publik dan menggunakan protokol HTTP atau HTTPS. Persyaratan file audio:
| http://aaa/bbb.wav |
input.ref_image_url | String | Body | No | URL gambar wajah referensi. URL harus dapat diakses publik dan menggunakan protokol HTTP atau HTTPS. Gunakan parameter ini untuk menentukan wajah mana yang akan digunakan untuk lip-syncing ketika terdapat beberapa wajah dalam video input. Jika video hanya berisi satu wajah, parameter ini tidak diperlukan. Jika Anda mengabaikan parameter ini, sistem akan menggunakan wajah terbesar yang terdeteksi pada frame pertama yang berisi wajah. Persyaratan file gambar:
| http://aaa/bbb.jpg |
parameters.video_extension | Boolean | Body | No | Menentukan apakah durasi video diperpanjang ketika audio input lebih panjang daripada video. Default:
| false |
parameters.query_face_threshold | Integer | Body | No | Menyesuaikan tingkat kepercayaan pencocokan wajah saat gambar wajah referensi diberikan. Nilainya berkisar antara 120 hingga 200. Nilai yang lebih kecil menghasilkan pencocokan yang lebih longgar, sedangkan nilai yang lebih besar menghasilkan pencocokan yang lebih ketat. Nilai default adalah 170. Catatan: Parameter ini diabaikan jika input.ref_image_url kosong. | 170 |
Parameter respons
Field | Type | Description | Example |
output.task_id | String | ID task asinkron yang dikirimkan. Gunakan ID ini untuk mengambil hasil sebenarnya melalui API kueri status task. | a8532587-fa8c-4ef8-82be-0c46b17950d1 |
output.task_status | String | Status task setelah dikirimkan. | "PENDING" |
request_id | String | ID permintaan. | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Contoh permintaan
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/image2video/video-synthesis/' \
--header 'X-DashScope-Async: enable' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "videoretalk",
"input": {
"video_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250717/pvegot/input_video_01.mp4",
"audio_url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250717/aumwir/stella2-%E6%9C%89%E5%A3%B0%E4%B9%A67.wav",
"ref_image_url": ""
},
"parameters": {
"video_extension": false
}
}'Contoh respons
{
"output": {
"task_id": "a8532587-fa8c-4ef8-82be-0c46b17950d1",
"task_status": "PENDING"
},
"request_id": "7574ee8f-38a3-4b1e-9280-11c33ab46e51"
}Kueri status task dan ambil hasil
GET https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}Parameter permintaan
Field | Type | Location | Required | Description | Example |
Authorization | String | Header | Yes | API key. Contoh: Bearer d1**2a. | Bearer d1**2a |
task_id | String | Url Path | Yes | ID task yang akan dikueri. Ini adalah nilai yang dikembalikan oleh API pengiriman task. | a8532587-fa8c-4ef8-82be-0c46b17950d1 |
Parameter respons
Field | Type | Description | Example |
output.task_id | String | ID task yang dikueri. | a8532587-fa8c-4ef8-82be-0c46b17950d1 |
output.task_status | String | Status task yang dikueri. | Status task:
|
output.video_url | String | Video yang dihasilkan. video_url berlaku selama 24 jam setelah task selesai. | https://xxx/1.mp4" |
usage.video_duration | Float | Durasi video yang dihasilkan, dalam detik. | "video_duration": 10.23 |
usage.video_ratio | String | Jenis rasio aspek video yang dihasilkan. Nilainya adalah standard, artinya video output memiliki rasio aspek yang sama dengan video asli secara default. | "video_ratio": "standard" |
usage.size | String | Resolusi video yang dihasilkan, resolusi yang sama dengan video input. | "size": "1080*1920" |
usage.fps | Integer | Laju frame video yang dihasilkan, resolusi yang sama dengan video input. | "fps": 25 |
request_id | String | ID permintaan. | 7574ee8f-38a3-4b1e-9280-11c33ab46e51 |
Contoh permintaan
curl -X GET 'https://dashscope.aliyuncs.com/api/v1/tasks/<YOUR_TASK_ID>' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY"Contoh respons
{
"request_id": "87b9dce5-7f36-4305-a347-xxxxxx",
"output": {
"task_id": "3afd65eb-9604-48ea-8a91-xxxxxx",
"task_status": "SUCCEEDED",
"submit_time": "2025-09-11 20:15:29.887",
"scheduled_time": "2025-09-11 20:15:36.741",
"end_time": "2025-09-11 20:16:40.577",
"video_url": "http://dashscope-result-sh.oss-cn-shanghai.aliyuncs.com/xxx.mp4?Expires=xxx"
},
"usage": {
"video_duration": 7.2,
"size": "1080*1920",
"video_ratio": "standard",
"fps": 25
}
}Contoh respons error
{
"request_id": "7574ee8f-38a3-4b1e-9280-11c33ab46e51",
"output": {
"task_id": "a8532587-fa8c-4ef8-82be-0c46b17950d1",
"task_status": "FAILED",
"code": "xxx",
"message": "xxxxxx"
}
}Kode kesalahan
Untuk kode status umum, lihat Pesan kesalahan.
Model ini juga memiliki kode kesalahan spesifik berikut:
Kode Status HTTP | Kode kesalahan | Pesan kesalahan | Deskripsi |
400 | InvalidParameter | Field required: xxx | Parameter permintaan hilang atau formatnya salah. |
400 | InvalidURL.ConnectionRefused | Connection to ${url} refused, please provide avaiable URL | Unduhan ditolak. Berikan URL yang tersedia. |
400 | InvalidURL.Timeout | Download ${url} timeout, please check network connection. | Waktu unduhan habis. Periode timeout adalah 60 detik. |
400 | InvalidFile.Size | Invalid file size. The video/audio/image file size must be less than **MB. | File video, audio, atau gambar harus lebih kecil dari ** MB. |
400 | InvalidFile.Format | Invalid file format,the request file format is one of the following types: MP4, AVI, MOV, MP3, WAV, AAC, JPEG, JPG, PNG, BMP, and WEBP. | Format file tidak valid. Video dalam format MP4, AVI, atau MOV didukung. Audio dalam format MP3, WAV, atau AAC didukung. Gambar dalam format JPG, JPEG, PNG, BMP, atau WebP didukung. |
400 | InvalidFile.Resolution | Invalid video resolution. The height or width of video must be 640 ~ 2048. | Panjang sisi video harus antara 640 hingga 2048 piksel. |
400 | InvalidFile.FPS | Invalid video FPS. The video FPS must be 15 ~ 60. | Laju frame video harus antara 15 hingga 60 fps. |
400 | InvalidFile.Duration | Invalid file duration. The video/audio file duration must be 2s ~ 120s. | Durasi file video atau audio harus antara 2 hingga 120 detik. |
400 | InvalidFile.ImageSize | The size of image is beyond limit. | Ukuran gambar melebihi batas. Rasio aspek gambar harus 2 atau kurang, dan sisi terpanjang harus 4.096 piksel atau kurang. |
400 | InvalidFile.Openerror | Invalid file, cannot open file as video/audio/image. | File video, audio, atau gambar tidak dapat dibuka. |
400 | InvalidFile.Content | The input image has no human body or multi human bodies. Please upload other image with single person. | Gambar input tidak berisi orang atau berisi beberapa orang. |
400 | InvalidFile.FaceNotMatch | There are no matched face in the video with the provided reference image. | Wajah dalam gambar referensi tidak cocok dengan wajah apa pun dalam video. |
FAQ
Bagaimana cara menangani video dan audio input dengan durasi berbeda?
Secara default, file yang lebih panjang akan dipotong agar sesuai dengan durasi file yang lebih pendek.
Jika audio input lebih panjang daripada video dan Anda ingin menghasilkan video berdasarkan durasi audio, atur parameter video_extension ke true. Ini akan memperpanjang video dengan mengulangnya dalam pola "putar mundur, putar maju" hingga durasinya sesuai dengan panjang audio.
Bagaimana API menangani segmen diam dalam audio input?
Model menghasilkan frame di mana mulut orang tersebut tertutup untuk menyesuaikan dengan segmen diam dalam audio input.
Apa yang terjadi ketika frame video tidak berisi wajah, tetapi audio yang sesuai berisi ucapan?
Frame video asli dipertahankan, dan audio tetap diputar di atasnya. Lip-syncing hanya diterapkan pada frame yang berisi wajah yang dapat dideteksi.
Bagaimana cara memilih orang tertentu untuk lip-syncing dalam video yang berisi beberapa orang?
API hanya dapat menyinkronkan bibir satu orang dalam video. Algoritma mendeteksi wajah yang ditentukan menggunakan gambar referensi input (input.ref_image_url). Jika tidak diberikan, algoritma secara default menggunakan wajah terbesar dalam frame pertama yang berisi wajah.