# 1. on a dubbed project: confirm the video has a face (runs once, usually automatically)
curl https://api.rask.ai/v2/projects/$ID/lipsync \
-H "Authorization: Bearer $TOKEN"
# "check_face_task_status": "done", "video_has_face": true
# 2. preview one free minute of lip-sync
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"is_multiple_speakers": true, "is_free_lipsync": true}'
# 3. lip-sync the full video - billed separately from dubbing
curl -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"is_multiple_speakers": true, "is_free_lipsync": false}'# Poll until lipsync_task_status is done, then download lipsync_result_path
while :; do
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
| jq '{lipsync_task_status, lipsync_task_progress, tasks_in_lipsync_queue}'
sleep 15
done



Giriş videosunu yükleyin veya genel bir URL gönderin, hedef dille bir proje oluşturun ve merging_done aşamasını bekleyin. Dudak senkronizasyonu bu projenin translated_video öğesine ihtiyaç duyar.
Yüz kontrolü görevi, videoda en az bir yüz olduğunu doğrular. Genellikle otomatik olarak başlar. Başlamadıysa proje için bir kez kendiniz çalıştırın.
Dudak senkronizasyonu görevini çalıştırın, lipsync_task_progress değerinin 0'dan 100'e ilerleyişini takip edin ve ardından videoyu lipsync_result_path konumundan indirin.
# pip install git+ssh://[email protected]/braskai/rask-sdk.git@main
import asyncio
from rask_sdk import clients, enums, schemas
PROJECT_ID = "..." # a project with status merging_done
async def main():
client = clients.RaskSDKClient(client_id=CLIENT_ID, client_secret=CLIENT_SECRET)
info = await client.get_lipsync_info(project_id=PROJECT_ID)
if info.check_face_task_status is not enums.LipsyncStatus.DONE:
await client.run_check_face_task(project_id=PROJECT_ID)
while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).check_face_task_status is not enums.LipsyncStatus.DONE:
await asyncio.sleep(10)
if not info.video_has_face:
raise SystemExit("No face found - lip-sync is not available for this video")
await client.run_lipsync_task(project_id=PROJECT_ID,
data=schemas.LipsyncTaskData(is_multiple_speakers=True, is_free_lipsync=False))
while (info := await client.get_lipsync_info(project_id=PROJECT_ID)).lipsync_task_status is not enums.LipsyncStatus.DONE:
print(info.lipsync_task_progress, info.tasks_in_lipsync_queue)
await asyncio.sleep(15)
print(info.lipsync_result_path)
asyncio.run(main())import time, requests
AUTH = "https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token"
URL = f"https://api.rask.ai/v2/projects/{PROJECT_ID}" # a dubbed project
token = requests.post(AUTH, auth=(CLIENT_ID, CLIENT_SECRET),
data={"grant_type": "client_credentials"}).json()["access_token"]
h = {"Authorization": f"Bearer {token}"}
info = requests.get(f"{URL}/lipsync", headers=h).json()
if info["check_face_task_status"] != "done":
requests.put(f"{URL}/check_face", headers=h)
while (info := requests.get(f"{URL}/lipsync", headers=h).json())["check_face_task_status"] != "done":
time.sleep(10)
assert info["video_has_face"], "No face found"
requests.put(f"{URL}/lipsync", headers=h,
json={"is_multiple_speakers": True, "is_free_lipsync": False})
while (info := requests.get(f"{URL}/lipsync", headers=h).json())["lipsync_task_status"] not in ("done", "failed"):
time.sleep(15)
print(info["lipsync_task_status"], info["lipsync_result_path"])// no dependencies, Node 18+ global fetch - PROJECT_ID is a dubbed project
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
const auth = await fetch('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token', {
method: 'POST',
headers: { Authorization: 'Basic ' + btoa(`${CLIENT_ID}:${CLIENT_SECRET}`) },
body: new URLSearchParams({ grant_type: 'client_credentials' }),
}).then((r) => r.json());
const h = { Authorization: `Bearer ${auth.access_token}`, 'Content-Type': 'application/json' };
const url = `https://api.rask.ai/v2/projects/${PROJECT_ID}`;
const info = () => fetch(`${url}/lipsync`, { headers: h }).then((r) => r.json());
let i = await info();
if (i.check_face_task_status !== 'done') {
await fetch(`${url}/check_face`, { method: 'PUT', headers: h });
while ((i = await info()).check_face_task_status !== 'done') await sleep(10000);
}
if (!i.video_has_face) throw new Error('No face found');
await fetch(`${url}/lipsync`, {
method: 'PUT', headers: h,
body: JSON.stringify({ is_multiple_speakers: true, is_free_lipsync: false }),
});
while (!['done', 'failed'].includes((i = await info()).lipsync_task_status)) {
console.log(i.lipsync_task_progress, i.tasks_in_lipsync_queue);
await sleep(15000);
}
console.log(i.lipsync_result_path);# 1. token (valid 1 hour - cache and reuse it)
TOKEN=$(curl -s -X POST https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token \
-u "$CLIENT_ID:$CLIENT_SECRET" -d "grant_type=client_credentials" | jq -r .access_token)
# 2. face check on the dubbed project - start it only if it has not run yet
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
| jq '{check_face_task_status, video_has_face}'
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/check_face -H "Authorization: Bearer $TOKEN"
# 3. run lip-sync (set is_free_lipsync to true for the free preview minute)
curl -s -X PUT https://api.rask.ai/v2/projects/$ID/lipsync \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"is_multiple_speakers": true, "is_free_lipsync": false}'
# 4. follow progress, then download the result
curl -s https://api.rask.ai/v2/projects/$ID/lipsync -H "Authorization: Bearer $TOKEN" \
| jq '{lipsync_task_status, lipsync_task_progress, lipsync_result_path}'<?php
use GuzzleHttp\Client;
$http = new Client(['base_uri' => 'https://api.rask.ai']);
$json = fn($r) => json_decode($r->getBody(), true);
$auth = $json((new Client)->post('https://rask-prod.auth.us-east-2.amazoncognito.com/oauth2/token',
['auth' => [$clientId, $clientSecret], 'form_params' => ['grant_type' => 'client_credentials']]));
$h = ['Authorization' => 'Bearer ' . $auth['access_token']];
$info = fn() => $json($http->get("/v2/projects/$projectId/lipsync", ['headers' => $h]));
$i = $info();
if ($i['check_face_task_status'] !== 'done') {
$http->put("/v2/projects/$projectId/check_face", ['headers' => $h]);
while (($i = $info())['check_face_task_status'] !== 'done') sleep(10);
}
if (!$i['video_has_face']) exit('No face found');
$http->put("/v2/projects/$projectId/lipsync", ['headers' => $h,
'json' => ['is_multiple_speakers' => true, 'is_free_lipsync' => false]]);
while (!in_array(($i = $info())['lipsync_task_status'], ['done', 'failed'])) sleep(15);
echo $i['lipsync_result_path'];check face check_face_task_status done video_has_face true
queued lipsync_task_status started tasks_in_lipsync_queue 2
processing lipsync_task_progress 0 → 50 → 100
complete lipsync_task_status done
lipsync_result_path https://...

es-mx ve es-es benzer şekilde hizmet eder. Proje kayıtları sözlük_sürümü, böylece daha sonra yapılan düzenlemeler tamamlanan çalışmayı habersiz değiştirmez.Evet. Rask dudak senkronizasyonu API'si, projenizin seslendirdiği herhangi bir videoda çalışır. Videoda bir yüz olduğundan emin olun, dudak senkronizasyonu görevini başlatın ve görev tamamlandığında dudak senkronizasyonu yapılmış videoyu indirin. Kimlik doğrulama için OAuth 2.0 istemci kimlik bilgileri kullanılır; böylece API entegrasyonu, Rask API'sinin geri kalanıyla aynı deseni izler.
Dudak senkronizasyonu, çevrilmiş bir video üzerinde çalışır. Önce projenizi oluşturun ve seslendirin, ardından proje bir çevrilmiş video bağlantısına ve merging_done durumuna sahip olduğunda dudak senkronizasyonunu başlatın.
Dudak senkronizasyonu, projenin seslendirilmiş sesini kullanır. Kendi ifadelerinizi kullanmak için çevrilmiş metni düzenleyin veya transkripti kendi .srt dosyanızdan oluşturun, projeyi yeniden seslendirin ve ardından yeni sürümde dudak senkronizasyonunu çalıştırın.
Rask, giriş videonuzdaki gerçek konuşmacıların gerçek görüntülerini dudak senkronizasyonuna tabi tutar. Konuşan avatar oluşturma, dijital insanlar ve bir görselden veya metin komutundan yapay zeka video üretimi farklı bir ürün kategorisidir ve bunun için bir yapay zeka video üretim aracı daha uygundur.
Konuşan yüzün net bir şekilde göründüğü, iyi aydınlatılmış ve ağzın kapanmadığı görüntüler kullanın. Güçlü profillerden ve dudakları kapatan mikrofon, el veya altyazı gibi unsurlardan kaçının. Yüz kontrolü, bir yüzün mevcut olduğunu doğrular; sonuçları videonuzda değerlendirmek için önizlemeyi kullanın.
Dudak senkronizasyonu, her tam video oluşturma işlemi için dublajdan ayrı olarak ücretlendirilir. Düzenlemelerden sonra dudak senkronize edilmiş yeni bir sürüm oluşturmak, ek bir dudak senkronizasyonu ücretine tabi olur.
Evet. Her hesabın ücretsiz kredileri arasında bir dakikalık ücretsiz dudak senkronizasyonu hakkı bulunur. Videonuzun bir dakikasını senkronize etmek ve incelemek için görevi is_free_lipsync parametresi true olarak ayarlanmış şekilde çalıştırın. Kredi uç noktası bunu lipsync_free_minutes olarak gösterir.
Evet. Örneğin röportajlarda veya panellerde ekranda aynı anda birden fazla yüz olabildiği durumlarda is_multiple_speakers parametresini true olarak ayarlayın. Videoda her seferinde yalnızca tek bir yüz görünüyorsa, işlemi hızlandırmak için bunu false olarak ayarlayın.
GET /v2/projects/{id}/lipsync adresine çağrı yapın. Yanıtta lipsync_task_status started durumundan done veya failed durumuna geçer, lipsync_task_progress 0'dan 100'e yükselir ve tasks_in_lipsync_queue sıranızda kaç görev olduğunu gösterir.
İşlem süresi videonun uzunluğuna ve dudak senkronizasyonu sırasına göre değişir. Sıra konumu ve ilerleme değeri, kullanıcılarınıza görevin tam olarak hangi aşamada olduğunu gösterMENİZE olanak tanır.
Dudak senkronizasyonu, dublajlı sürüm başına bir kez oluşturulur. Metni, zaman damgalarını, konuşmacıları veya sesleri değiştirdikten sonra projeyi yeniden seslendirin, merging_done durumunu bekleyin ve dudak senkronizasyonunu tekrar çalıştırın. Yeni dudak senkronizasyonu ayrı olarak ücretlendirilir. Tamamlanan yüz kontrolünün yeniden çalıştırılması gerekmez.
check_face_task_status veya lipsync_task_status başarısız (failed) olduğunda, project_id değerinizle birlikte [email zahmetli] adresine e-posta gönderin; ekibimiz durumu inceleyecektir.
API erişimi ücretli planlara dahildir. Uygulama üzerinden istemci kimliğinizi ve gizli anahtarınızı oluşturarak hemen çağrı yapmaya başlayabilirsiniz. Kurumsal koşullar, hacim bazlı fiyatlandırma ve özel dil kapsamı için ekibimizle iletişime geçebilirsiniz.