Seedance 2.0 lip sync: diyalog prompt'ları ve 4 gerçek klip
Ağız prompt'u izliyor, kendi kaydımız da çıkış ses kanalına döndü.

Bu sayfada
- Kısa cevap
- Seedance 2.0 lip sync yapıyor mu?
- Cümle prompt'a nasıl yazılır
- Kendi sesimi gönderebilir miyim?
- Görselden video kendi kendine plan değiştiriyor
- Python ile istek
- Ne kadar tutuyor
- Nerede ters gidiyor
- Sık sorulan sorular
- WAV yüklersem ağız kaydımı izler mi?
- Yalnızca ses içeren isteğim neden reddedildi?
- Cümle için ses açık mı kapalı mı olmalı?
- Referans ses ne kadar uzun olabilir?
- Kaynaklar
- Değişiklik geçmişi
Seedance 2.0 ağzı prompt'a göre hareket ettiriyor. Ses açık ve kapalı olmak dışında aynı olan iki 5 saniyelik 720P klip, ağzı açıp kapattı. Kendi 1,8 saniyelik kaydımız reference_to_video üzerinden geçti ve cümle çıkış ses kanalında geri döndü. Yalnızca ses reddediliyor. BytePlus 720P'de saniye başına $0.15 alıyor, yani 5 saniye $0.75.
Kısa cevap
- Ağız prompt'tan geliyor. Aynı prompt'la 5 saniyelik iki 720P klip, biri sesli biri sessiz, kapalı → aralık → iyice açık sırasıyla hareket etti.
- Yalnızca ses geçmiyor. 2.0 serisi en az bir referans görsel ya da video istiyor (BytePlus görev oluşturma API'si, 3 Kasım 2026'da kontrol edildi).
- Referans ses en fazla 3 klip, her biri 2–15 saniye, toplam 15 saniye, wav veya mp3, her biri 15 MB.
- Ses gerçekten kullanılıyor. 1,8 saniyelik mp3 çıkış kanalına döndü, cümle eksiksizdi.
- BytePlus'ın saniye fiyatıyla 720P saniye başına $0.15, 5 saniye $0.75.
- Aynı gün çekilen dört klip: 720P sesli, 720P sessiz, kare 720P görselden video, 480P referans sesli.
Seedance 2.0 lip sync yapıyor mu?
Resmî belgelerde "lip sync" ifadesi geçmiyor. Anlatılan şey görüntü ile sesin birlikte üretilmesi ve bir öneri: diyaloğu çift tırnak içine almak.
ByteDance'ın Seed sayfası Seedance 2.0'ı "a unified multimodal audio-video joint generation architecture that supports text, image, audio, and video inputs" diye tanımlıyor (3 Kasım 2026'da kontrol edildi). BytePlus ModelArk rehberi de aynısını söylüyor ve yetenek listesinde "Generate videos with audio" yazıyor (sayfa 29 Eylül 2026'da güncellendi).
Bu sayfalarda sözcük ararsanız "lip sync" ve "talking" hiç geçmiyor. "mouth" bir kez örnek bir prompt içinde, "dialogue" iki kez geçiyor ve ikisi de ses üretiminden bahsediyor. Talimata en yakın cümle şu: "It is recommended to put dialogue content in double quotes to optimize the audio generation effect" (görev oluşturma API'si, 28 Ekim 2026'da güncellendi).
Yani özellik ikisinin arasındaki boşlukta duruyor: model görüntüyü de ses kanalını da veriyor, ama hiçbir resmî sayfa dudakların her heceye uyacağını söylemiyor. Bizim dört klipte ağız ses açıkken de kapalıyken de hareket etti; prompt'ta biri konuşuyor yazdığında bir video modelinden beklenen de bu.
Deneyenler var. 18 Şubat 2026 tarihli bir Hacker News yorumu şarkıyı videoyla birlikte göndermiş ve sonucu "the model did reference the singing music I provided, but it reinterpreted it on its own" diye özetlemiş (yorum). 3 Haziran 2026 tarihli bir GitHub issue'su "Mouth movements match phoneme timing" ifadesini başarı koşulu yapıyor, ama bu ölçüm belgelerde yok (issue).
Cümle prompt'a nasıl yazılır
Önce karakter, sonra cümle çift tırnak içinde, en son ağız ve yüz hareketi. Bizim prompt'ta karakter ve ağız vardı, çift tırnak yoktu; cümleyi model seçti.
Kullandığımız yöntem beş adım.
- Karakter tek cümleyle: kil stop-motion, büyük yuvarlak gözlük, örgü atkı, mutfak masasında oturuyor.
- Ne yaptığı: kameraya bakıp kısa bir cümle söylüyor.
- Cümle olduğu gibi çift tırnak içinde. BytePlus'ın önerisi bu.
- Ağız ve yüz: dudaklar sözcüklerle açılıp kapanıyor, kaşlar cümleyi izliyor, vurgulu hecede baş hafifçe yatıyor.
- Kamera ve ışık sabit, böylece yalnızca oyunculuk hareket ediyor.
Dört klipte de aynı prompt kullanıldı. Aynen aktarıyoruz:
A stop-motion clay character with big round glasses and a knitted scarf sits at a kitchen table, looks straight into the camera, and speaks one short line to the viewer. The mouth opens and closes in time with the words, the eyebrows move with the sentence, and the head tilts slightly on the stressed word. Fixed camera, warm lamp light, a mug of tea in front of them, gentle 24 fps stop-motion feel.
Eksik olan cümlenin kendisi. Prompt'ta yalnızca "kısa bir cümle" yazdığı için sözcükleri model seçti. Ses açıkken "You look like you could use a warm hug." diyor ve bu satır isteğin hiçbir yerinde yoktu. Cümleyi kontrol etmek istiyorsanız 3. adımı göndermeden önce eklemelisiniz.
Ağza 0,5 saniyede bir kareyle baktık. Sesli klipte ağız kapalı başlıyor, 2–7. kareler aralık, 8. karede iyice açık, sonra yeniden aralanıp kapanıyor. Sessiz klipte kapalı, aralık, iyice açık, aralık, iyice açık ve son iki kare aralık.


Aynı metin başka bir karakter de seçiyor: sessiz klip turuncu gövde, gri-kahve ayrım ve koyu yeşil atkıyla döndü. Karakteri anlatan cümleyi öneri olarak yazmak daha doğru. İki klipte de kamera kımıldamadı, bunu "Fixed camera" sağlıyor.
Kendi sesimi gönderebilir miyim?
Gönderebilirsiniz, aynı istekte bir referans görsel ya da video olması şartıyla. 1,8 saniyelik mp3 referans ses olarak gitti ve sözcükleri çıkış kanalına döndü.
reference_to_video kullandık ve istekte üç şey vardı: kil karakterin hareketsiz karesi referans görsel, kaydımız referans ses ve yukarıdaki prompt. Parametreler 480P, 5 saniye ve ses üretimi açık. OmniaKey 202 döndü, task_3Ay0Ktf2mbYXh9GNZpZ5j9kGyOIzz8Pv görevi başarıyla bitti ve 120,2 saniye sonra 864×496 boyutunda, 5.06 saniyelik aac kanalı olan bir MP4 geldi.
O kanalın deşifresi tek cümle: "Why tow it? I told you the keys were in the drawer." İkinci yarısı bizim kaydımızla kelimesi kelimesine aynı. İlk üç sözcük bizim dosyamızda yoktu; deşifre bunun bizim nefesimiz mi modelin eklediği bir şey mi olduğunu ayırt etmiyor, bu yüzden duyulanı yazıyoruz.

On kare, 0,5 saniye aralıkla yalnızca ağzın hareket ettiğini gösteriyor. Fonem düzeyinde eşleşme için daha sık kareler ve ayrı bir ölçüm gerekir, bunu yapmadık; dudakların her sese uyduğunu söyleyemeyiz.
Sınırlar BytePlus görev oluşturma API'sinden (3 Kasım 2026'da kontrol edildi). Ses en fazla 3 klip, her biri 2–15 saniye, toplam 15 saniye, wav veya mp3, her biri 15 MB. Klip herkese açık URL, Base64 dizesi ya da varlık kimliği olarak gelebilir. Yalnızca ses olmuyor: "Audio-only input is not supported; include at least one reference image or video."
Görselden video kendi kendine plan değiştiriyor
Görselden video klibimiz ayakta duran geniş plandan 4. karede mutfakta oturan yakın plana geçti, oysa prompt'ta ne kesme ne kamera hareketi vardı.
İlk kare bu deneme için üretilmiş hareketsiz bir görsel: karakter sıcak beyaz duvarın önünde ayakta, kollar aşağıda, tam boy, 1254×1254 piksel. Prompt yukarıdaki ve içinde mutfak masasına oturması yazıyor. 1–3. kareler ayakta kalıyor, 4. karede oturan yakın plana atlıyor ve öyle sürüyor. Ağız 7. kareye kadar kapalı, 8. karede aralık, 9. ve 10. karelerde iyice açık. Seste "Well, what do you think?" ve kumaş hışırtısı var.

Burada önemli olan kadraj, ağız değil. Bu modelde karakterin nerede olduğunu ve kameranın nasıl hareket ettiğini prompt belirliyor, ilk kare ise görünümü belirliyor. Önemli planı prompt'a yazın.
Dosya 1280×720 değil 960×960 geldi. Nedeni, kare bir görseli ilk kare yapmamız ve oran göndermememiz; API varsayılan olarak görseli izliyor. Hangi oranı istiyorsanız ratio yazın, çözünürlük adından tahmin etmeyin.
Python ile istek
Görevi oluştur, kimliği sor, MP4'ü indir: üç istek ve yalnızca standart kütüphane. Aynı yardımcı üç adımı da karşılıyor.
import base64
import json
import os
import time
import urllib.error
import urllib.request
import uuid
API = "https://api.omniakey.com/v1/media/tasks"
KEY = os.environ["OMNIAKEY_API_KEY"]
MODEL = "dreamina-seedance-2-0-260128"
PROMPT = (
"A stop-motion clay character with big round glasses and a knitted scarf sits at a kitchen table, "
"looks straight into the camera, and speaks one short line to the viewer. The mouth opens and closes "
"in time with the words, the eyebrows move with the sentence, and the head tilts slightly on the "
"stressed word. Fixed camera, warm lamp light, a mug of tea in front of them, gentle 24 fps "
"stop-motion feel."
)
MIME = {".png": "image/png", ".jpg": "image/jpeg", ".jpeg": "image/jpeg",
".webp": "image/webp", ".mp3": "audio/mpeg", ".wav": "audio/wav"}
def call(method, url, body=None, idempotency_key=None):
headers = {"Authorization": f"Bearer {KEY}", "User-Agent": "omniakey-example/1"}
data = None
if body is not None:
headers["Content-Type"] = "application/json"
data = json.dumps(body).encode()
if idempotency_key:
headers["Idempotency-Key"] = idempotency_key
req = urllib.request.Request(url, data=data, headers=headers, method=method)
with urllib.request.urlopen(req, timeout=120) as resp:
return json.load(resp)
def data_url(path, limit_mb):
raw = open(path, "rb").read()
if len(raw) > limit_mb * 1024 * 1024: # görsel için 30 MB, ses için 15 MB
raise ValueError(f"{path} is over {limit_mb} MB, the limit for this input type")
mime = MIME[os.path.splitext(path)[1].lower()]
return f"data:{mime};base64," + base64.b64encode(raw).decode()
def wait(task_id, timeout=900, step=5):
deadline = time.time() + timeout
while time.time() < deadline:
state = call("GET", f"{API}/{task_id}")
if state["status"] not in ("queued", "processing"):
return state
time.sleep(step)
raise TimeoutError(f"{task_id} is still running: poll it again, do not resubmit")
def run(body, out_path):
task_id = call("POST", API, body, str(uuid.uuid4()))["id"]
print("task", task_id, flush=True)
state = wait(task_id)
if state["status"] != "succeeded":
raise RuntimeError(state.get("error") or state["status"])
signed = state["assets"][0]["url"] # süreli bağlantı, hemen indirin
req = urllib.request.Request(signed, headers={"User-Agent": "omniakey-example/1"})
with urllib.request.urlopen(req, timeout=300) as resp, open(out_path, "wb") as f:
f.write(resp.read())
return task_id
def reference_to_video(prompt, image_path, audio_path, out_path):
body = {
"model": MODEL,
"type": "video",
"operation": "reference_to_video",
"input": {
"prompt": prompt,
"media": [
{"type": "reference_image", "url": data_url(image_path, 30)},
{"type": "reference_audio", "url": data_url(audio_path, 15)},
],
},
"parameters": {"duration": 5, "resolution": "480P", "ratio": "16:9",
"generate_audio": True, "watermark": False},
}
return run(body, out_path)
if __name__ == "__main__":
print("done", reference_to_video(PROMPT, "character.png", "line.mp3", "line-clip.mp4"))
Üç ayrıntı kalsın. Idempotency-Key her istek için yeni bir UUID, böylece tekrar gönderim özgün görevi döndürür ve iki kez ödeme yapılmaz. Bekleme döngüsü 15 dakikada istisna ile durur, çünkü zaman aşımı klipin hâlâ render edildiği anlamına gelir ve yeniden göndermek bir tane daha satın alır. İndirme ilk succeeded anında yapılır, çünkü assets[0].url süresi dolan imzalı bir bağlantıdır.
Diğer iki işlem yalnızca gövdeyi değiştirir, yardımcılar aynı kalır:
def text_to_video(prompt, out_path):
body = {
"model": MODEL,
"type": "video",
"operation": "text_to_video",
"input": {"prompt": prompt},
"parameters": {"duration": 5, "resolution": "720P", "ratio": "16:9",
"generate_audio": True, "watermark": False},
}
return run(body, out_path)
def image_to_video(prompt, image_path, out_path):
body = {
"model": MODEL,
"type": "video",
"operation": "image_to_video",
"input": {"prompt": prompt,
"media": [{"type": "first_frame", "url": data_url(image_path, 30)}]},
"parameters": {"duration": 5, "resolution": "720P", "ratio": "adaptive",
"generate_audio": True, "watermark": False},
}
return run(body, out_path)
Alan listesi kısa: model, type, operation, input.prompt, input.media[] içinde type olarak first_frame, reference_image, reference_video veya reference_audio, ve parameters.duration, resolution, ratio, generate_audio, watermark. Aynı biçim OmniaKey'in video API belgelerinde var; oluşturma, sorgulama ve indirme döngüsü medya API özetinde anlatılıyor. Modeli Seedance 2.0 model sayfasında deneyebilirsiniz.
Ne kadar tutuyor
BytePlus saniye üzerinden faturalıyor. 5 saniye, 16:9 ve video girişi olmayan çıktı için liste fiyatı şöyle (ModelArk fiyat sayfası, 3 Kasım 2026'da kontrol edildi):
| Çıktı | Saniye başına | 5 saniyelik klip |
|---|---|---|
| 480p | $0.07 | $0.35 |
| 720p | $0.15 | $0.76 |
| 1080p | $0.37 | $1.87 |
| 4K | $0.78 | $3.89 |
Saniye sütunuyla hesaplayınca aynı sonuç çıkıyor, sayfada bir sentlik yuvarlama farkıyla: 5 saniye × $0.15 = $0.75, 720p satırında ise $0.76. Bizim iki metinden video klibi 720P ve 5 saniyeydi, yani her biri o $0.75 seviyesinde.
Video girişi olan istek başka bir biçimde ve daha yüksek fiyatla faturalanıyor, bu yüzden referans videolu bir görev bu tabloya girmiyor (ModelArk fiyat sayfası, 3 Kasım 2026'da kontrol edildi). OmniaKey üretilen saniye üzerinden ücret alıyor ve görev failed ya da canceled ile biterse ücreti geri veriyor (medya API özeti, 3 Kasım 2026'da kontrol edildi); güncel fiyat model sayfasında.
Nerede ters gidiyor
- Yalnızca ses reddediliyor. Ses kanalının yanına en az bir referans görsel ya da video ekleyin.
- Gerçek yüzler geçmiyor. Referans görselde ya da videoda gerçek bir insan varsa engelleniyor, bu yüzden kil, çizim veya CG karakter kullanın.
generate_audiovarsayılan olarak açık. Sessiz dosya için kapatmak gerekir; cümle için varsayılan kalır ve prompt'ta birinin konuştuğu yazar.- Teslim edilen boyut
ratiodeğerini izliyor. 720P metinden 1280×720, oransız kare hareketsiz görselden 960×960, 480P 16:9'dan 864×496 geldi. - Hız değişken. Aynı 5 saniyelik dört görev 259,0, 202,0, 155,3 ve 120,2 saniye sürdü; iki ile beş dakika arası bekleyin ve durumu sorgulayın.
- Süre çıktıda 4–15 saniye, referans kliplerde her biri 2–15 saniye ve toplam 15 saniye. Dört dosya da 24 fps ile geldi.
Sık sorulan sorular
WAV yüklersem ağız kaydımı izler mi?
Evet, bir referans görselle birlikte gönderirseniz model onu kullanır: kaydımız çıkış ses kanalına döndü. Dudakların dosyadaki her sese oturup oturmadığını karelerimiz gösteremez; yarım saniyede bir kare ağzın hareket ettiğini gösterir, ölçülmüş bir eşleşmeyi değil.
Yalnızca ses içeren isteğim neden reddedildi?
2.0 serisi sesi tek giriş olarak kabul etmiyor. Aynı isteğe bir referans görsel ya da video ekleyin, ses de onlarla birlikte geçer.
Cümle için ses açık mı kapalı mı olmalı?
Açık bırakın, varsayılan bu. false ile dosyada hiç ses kanalı olmaz ve prompt'ta konuştuğu yazıyorsa karakter yine de ağzını açar, sessiz klibimizde olduğu gibi.
Referans ses ne kadar uzun olabilir?
Her klip 2–15 saniye, en fazla 3 klip, toplam 15 saniye, wav veya mp3 ve her biri 15 MB (BytePlus görev oluşturma API'si, 3 Kasım 2026'da kontrol edildi). Bizimki 1,8 saniyeydi, yani bu alt sınırın altındaydı; yine de Base64 veri URL'si olarak kabul edildi.
Kaynaklar
- ByteDance Seed: Seedance 2.0, 3 Kasım 2026'da kontrol edildi
- BytePlus ModelArk: Seedance 2.0 rehberi, 3 Kasım 2026'da kontrol edildi
- BytePlus ModelArk: video görevi oluşturma API'si, 3 Kasım 2026'da kontrol edildi
- BytePlus ModelArk: model fiyatları, 3 Kasım 2026'da kontrol edildi
Değişiklik geçmişi
- 3 Kasım 2026: ilk sürüm, dört klip de aynı gün üretildi.
Bu makaledeki modeller
İlgili makaleler
Seedance 2.0 API: Python ile metinden videoya ve görselden videoya
Tek bir betik görevi oluşturur, sorgular ve MP4'ü kaydeder. Alanlar, sınırlar ve 30 Ekim 2026'da ürettiğimiz iki 5 saniyelik klip aşağıda.
Seedance 2.5 prompt rehberi: yapı, örnekler ve gerçek klipler
Altı prompt, altı gerçek klip: Seedance 2.5 neyi izledi, neyi değiştirdi ve nasıl düzeltilir.
Seedance 2.5 incelemesi
Asıl yükseltme, henüz doğrulanmamış 4K başlıkları değil; 30 saniyelik anlatı ve prodüksiyon kontrolü.
