Kling
إنشاء مهمة مزامنة شفاه متقدمة في Kling
أنشئ مهام فيديو لمزامنة الشفاه المتقدمة عبر CometAPI Kling POST /kling/v1/videos/advanced-lip-sync، وقدّم إعدادات الصوت والنظير لإنشاء نتائج متزامنة.
POST
/
kling
/
v1
/
videos
/
advanced-lip-sync
cURL
curl https://api.cometapi.com/kling/v1/videos/advanced-lip-sync \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
}'
import os
import requests
response = requests.post(
"https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
},
)
result = response.json()
print(result.get("code"), result.get("data", {}).get("task_id"))
const response = await fetch("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
}),
});
const result = await response.json();
console.log(result.code, result.data?.task_id);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'session_id' => '<session_id>',
'face_choose' => [
[
'face_id' => '<face_id>',
'sound_file' => 'https://your-audio-host/speech.wav',
'sound_start_time' => '0',
'sound_end_time' => '2000',
'sound_insert_time' => '0',
'sound_volume' => 1,
'original_sound_volume' => 0
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/kling/v1/videos/advanced-lip-sync"
payload := strings.NewReader("{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"message": "<string>",
"data": {
"task_id": "<string>",
"task_status": "<string>",
"created_at": 123,
"updated_at": 123
}
}استخدم نقطة النهاية هذه لإنشاء مهمة مزامنة شفاه متقدمة بعد أن تكون قد حدّدت الوجوه بالفعل في فيديو المصدر.
قبل استدعائها
- ابدأ بـ Lip-Sync للحصول على
session_idوقيمface_idالمتاحة - أنشئ إدخالًا واحدًا أو أكثر من
face_chooseلربط كل وجه بمقطع صوتي - استخدم
audio_idللصوت الناتج من مهمة سابقة، أوsound_fileلملف صوتي مستضاف - أرسل حقول التوقيت بالمللي ثانية. على سبيل المثال،
sound_start_time: "0"وsound_end_time: "2000"يحددان أول ثانيتين. - تأكد من أن طول المقطع الصوتي المقصوص لا يقل عن 2000 ms ولا يتجاوز مدة الصوت المصدر
- اضبط
callback_urlأوexternal_task_idفقط عندما تحتاج إلى تسليم عبر webhook أو إلى معرّف تتبع خاص بك
تدفق المهمة
1
حدّد الوجوه أولًا
شغّل Lip-Sync على فيديو المصدر واحتفظ بقيمة
session_id المُعادة بالإضافة إلى قيم face_id المستهدفة.2
أنشئ مهمة مزامنة الشفاه المتقدمة
أرسل
session_id ومصفوفة face_choose عبر نقطة النهاية هذه.3
تتبّع المهمة المُنشأة
احفظ معرّف المهمة المُعاد للتحقق من الحالة واسترجاع النتيجة النهائية.
للاطلاع على المرجع الكامل للمعلمات، راجع وثائق Kling الرسمية.
التفويضات
Bearer token authentication. Use your CometAPI key.
الجسم
application/json
Session id returned by identify-face.
One or more face/audio mappings to synthesize.
Minimum array length:
1Show child attributes
Show child attributes
Webhook URL to receive task status updates.
Custom task id for your own tracking. Must be unique per account.
⌘I
cURL
curl https://api.cometapi.com/kling/v1/videos/advanced-lip-sync \
-H "Authorization: Bearer $COMETAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
}'
import os
import requests
response = requests.post(
"https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
headers={"Authorization": "Bearer " + os.environ["COMETAPI_KEY"]},
json={
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
},
)
result = response.json()
print(result.get("code"), result.get("data", {}).get("task_id"))
const response = await fetch("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.COMETAPI_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"session_id": "<session_id>",
"face_choose": [
{
"face_id": "<face_id>",
"sound_file": "https://your-audio-host/speech.wav",
"sound_start_time": "0",
"sound_end_time": "2000",
"sound_insert_time": "0",
"sound_volume": 1,
"original_sound_volume": 0
}
]
}),
});
const result = await response.json();
console.log(result.code, result.data?.task_id);
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cometapi.com/kling/v1/videos/advanced-lip-sync",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'session_id' => '<session_id>',
'face_choose' => [
[
'face_id' => '<face_id>',
'sound_file' => 'https://your-audio-host/speech.wav',
'sound_start_time' => '0',
'sound_end_time' => '2000',
'sound_insert_time' => '0',
'sound_volume' => 1,
'original_sound_volume' => 0
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cometapi.com/kling/v1/videos/advanced-lip-sync"
payload := strings.NewReader("{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cometapi.com/kling/v1/videos/advanced-lip-sync")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"session_id\": \"<session_id>\",\n \"face_choose\": [\n {\n \"face_id\": \"<face_id>\",\n \"sound_file\": \"https://your-audio-host/speech.wav\",\n \"sound_start_time\": \"0\",\n \"sound_end_time\": \"2000\",\n \"sound_insert_time\": \"0\",\n \"sound_volume\": 1,\n \"original_sound_volume\": 0\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"code": 123,
"message": "<string>",
"data": {
"task_id": "<string>",
"task_status": "<string>",
"created_at": 123,
"updated_at": 123
}
}