# 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 dilde bir proje oluşturun ve merging_done aşamasını bekleyin. Dudak senkronizasyonu bu projenin translated_video dosyasına 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 kendiniz bir kez çalıştırın.
Dudak senkronizasyonu görevini çalıştırın, lipsync_task_progress değerini 0'dan 100'e kadar takip edin, ardından videoyu lipsync_result_path üzerinden 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ı glossary_version, böylece sonraki düzenlemeler tamamlanan çalışmaları asla habersiz değiştirmez.Evet. Rask dudak senkronizasyonu API'si, projenizin dublajı yapılmış herhangi bir videoda çalışır. Videoda bir yüz olduğundan emin olun, dudak senkronizasyonu görevini başlatın ve görev bittiğinde dudak senkronizasyonu yapılmış videoyu indirin. Kimlik doğrulama, OAuth 2.0 istemci kimlik bilgilerini kullanır, bu nedenle API entegrasyonu Rask API'sinin geri kalanıyla aynı deseni izler.
Dudak senkronizasyonu, çevrilmiş bir video üzerinde çalışır. Önce projenizi oluşturun ve dublajını yapın, ardından proje bir translated_video bağlantısına ve merging_done durumuna sahip olduğunda dudak senkronizasyonunu başlatın.
Dudak senkronizasyonu, projenin dublajlı sesini kullanır. Kendi ifadelerinizi kullanmak için çevrilmiş metni düzenleyin veya kendi .srt dosyanızdan transkript oluşturun, projenin dublajını yenileyin ve ardından yeni sürümde dudak senkronizasyonunu çalıştırın.
Rask, girdi videosundaki gerçek konuşmacıların gerçek görüntülerine dudak senkronizasyonu yapar. Konuşan avatar oluşturma, dijital insanlar ve bir görselden veya metin komutundan yapay zeka video oluşturma farklı bir ürün kategorisidir ve bir yapay zeka video oluşturma aracı bunun için daha uygundur.
Konuşan yüzün net bir şekilde görülebildiği, iyi aydınlatılmış ve ağzın kapanmadığı görüntüler kullanın. Güçlü profil açılarını ve mikrofon, el veya altyazı gibi dudakları kapatan her şeyi önleyin. Yüz kontrolü bir yüzün mevcut olduğunu doğrular; görüntünüzdeki sonucu değerlendirmek için önizlemeyi kullanın.
Dudak senkronizasyonu, her tam video oluşturma için dublajdan ayrı olarak faturalandırılır. Düzenlemelerden sonra yeni bir dudak senkronizasyonlu sürüm oluşturmak başka bir dudak senkronizasyonu ücretine tabidir.
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 ayarı true olacak şekilde çalıştırın. Krediler uç noktası bunu lipsync_free_minutes olarak gösterir.
Evet. Röportajlar veya paneller gibi ekranda aynı anda birden fazla yüz olabildiği durumlarda is_multiple_speakers ayarını true yapın. Videoda her seferinde yalnızca tek bir yüz görünüyorsa, işlemi hızlandırmak için bu ayarı false yapı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 ilerler 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östermenizi sağlar.
Dudak senkronizasyonu, dublajı yapılmış her sürüm için bir kez oluşturulur. Metni, zaman damgalarını, konuşmacıları veya sesleri değiştirdikten sonra projeyi yeniden dublajlayın, merging_done aşamasını bekleyin ve dudak senkronizasyonunu tekrar çalıştırın. Yeni dudak senkronizasyonu oluşturma işlemi ayrıca ü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 olduğunu gösterirse, project_id numaranızla birlikte [email protected] adresine e-posta gönderin, ekibimiz konuyu inceleyecektir.
API erişimi ücretli planlara dahildir. Uygulama içinde istemci kimliğinizi (client id) ve gizli anahtarınızı (secret) oluşturup hemen kullanmaya başlayabilirsiniz. Kurumsal koşullar, hacim bazlı fiyatlandırma ve özel dil kapsamı için ekibimizle iletişime geçebilirsiniz.