Update main.py
Browse files
main.py
CHANGED
|
@@ -573,9 +573,63 @@ EXEMPLOS
|
|
| 573 |
video_x = 0
|
| 574 |
video_y = 0
|
| 575 |
print(f" → video_y (crop offset): {video_y}px")
|
| 576 |
-
|
| 577 |
-
# 5.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 578 |
import urllib.parse
|
|
|
|
| 579 |
title_params = urllib.parse.urlencode({
|
| 580 |
"text": title_text,
|
| 581 |
"image_url": screenshot_url,
|
|
@@ -583,7 +637,7 @@ EXEMPLOS
|
|
| 583 |
})
|
| 584 |
title_url = f"https://habulaj-recurve-api-img.hf.space/cover/title?{title_params}"
|
| 585 |
|
| 586 |
-
#
|
| 587 |
print(f"🎬 Chamando video export API...")
|
| 588 |
export_payload = {
|
| 589 |
"video_url": export_video_url,
|
|
@@ -597,6 +651,10 @@ EXEMPLOS
|
|
| 597 |
"video_height": crop_h,
|
| 598 |
"video_template": video_template
|
| 599 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 600 |
export_resp = requests.post(
|
| 601 |
"https://habulaj-recurve-videos-export.hf.space/video/export",
|
| 602 |
json=export_payload,
|
|
|
|
| 573 |
video_x = 0
|
| 574 |
video_y = 0
|
| 575 |
print(f" → video_y (crop offset): {video_y}px")
|
| 576 |
+
|
| 577 |
+
# 5. Gerar legendas se necessário
|
| 578 |
+
needs_legenda = result_data.get("legenda", False)
|
| 579 |
+
srt_for_export = None
|
| 580 |
+
if needs_legenda:
|
| 581 |
+
print("🎙️ Gerando legendas (Groq + Gemini)...")
|
| 582 |
+
try:
|
| 583 |
+
# Transcricao via Groq usando o arquivo local
|
| 584 |
+
import urllib.request as _urlreq
|
| 585 |
+
import uuid as _uuid
|
| 586 |
+
|
| 587 |
+
# Groq precisa de URL — usamos o video já upado (export_video_url)
|
| 588 |
+
srt_raw, _, _, _ = await get_groq_srt_base(
|
| 589 |
+
export_video_url, language="en", temperature=0.4,
|
| 590 |
+
has_bg_music=False
|
| 591 |
+
)
|
| 592 |
+
|
| 593 |
+
if srt_raw and srt_raw.strip():
|
| 594 |
+
# Tradução via Gemini (mesmo prompt do /subtitle)
|
| 595 |
+
translate_prompt = f"""IDIOMA: A legenda traduzida DEVE ser inteiramente em PORTUGUÊS DO BRASIL (pt-BR).
|
| 596 |
+
|
| 597 |
+
Traduza essa legenda pro português do Brasil, corrija qualquer erro de formatação, pontuação e mantenha timestamps e os textos nos seus respectivos blocos de legenda.
|
| 598 |
+
Você DEVE se basear estritamente na legenda original fornecida. NUNCA crie legendas novas e NUNCA adicione ou verifique diálogos no áudio que não estejam presentes na legenda original. Apenas traduza.
|
| 599 |
+
Mande o SRT completo, sem textos adicionais na resposta, apenas o SRT traduzido.
|
| 600 |
+
Não deve ser literal a tradução, deve se adaptar ao contexto e entonação. Se alguém estiver gritando, ESCREVA MAIÚSCULO!
|
| 601 |
+
NUNCA legende músicas, apenas diálogos falados.
|
| 602 |
+
PALAVRÕES: substitua com asteriscos (ex: "merda" → "merd*", "caralho" → "caral**").
|
| 603 |
+
|
| 604 |
+
LEGENDA ORIGINAL:
|
| 605 |
+
{srt_raw}"""
|
| 606 |
+
translate_model = get_gemini_model("flash")
|
| 607 |
+
translate_resp = await client.generate_content(translate_prompt, model=translate_model)
|
| 608 |
+
translated_srt = translate_resp.text.strip()
|
| 609 |
+
|
| 610 |
+
# Limpar bloco de código se o Gemini retornar com ```
|
| 611 |
+
if "```" in translated_srt:
|
| 612 |
+
parts = translated_srt.split("```")
|
| 613 |
+
for part in parts:
|
| 614 |
+
clean = part.strip()
|
| 615 |
+
if clean.startswith("srt"): clean = clean[3:].strip()
|
| 616 |
+
if re.match(r"\d+\s*\n\d{2}:", clean):
|
| 617 |
+
translated_srt = clean
|
| 618 |
+
break
|
| 619 |
+
|
| 620 |
+
if translated_srt:
|
| 621 |
+
srt_for_export = translated_srt
|
| 622 |
+
print(f"✅ Legendas geradas ({len(srt_for_export)} chars)")
|
| 623 |
+
else:
|
| 624 |
+
print("⚠️ Gemini retornou SRT vazio na tradução")
|
| 625 |
+
else:
|
| 626 |
+
print("⚠️ Groq não retornou transcrição válida")
|
| 627 |
+
except Exception as sub_e:
|
| 628 |
+
print(f"⚠️ Erro ao gerar legendas: {sub_e}")
|
| 629 |
+
|
| 630 |
+
# 6. Montar title_url
|
| 631 |
import urllib.parse
|
| 632 |
+
|
| 633 |
title_params = urllib.parse.urlencode({
|
| 634 |
"text": title_text,
|
| 635 |
"image_url": screenshot_url,
|
|
|
|
| 637 |
})
|
| 638 |
title_url = f"https://habulaj-recurve-api-img.hf.space/cover/title?{title_params}"
|
| 639 |
|
| 640 |
+
# 7. Chamar API de video export
|
| 641 |
print(f"🎬 Chamando video export API...")
|
| 642 |
export_payload = {
|
| 643 |
"video_url": export_video_url,
|
|
|
|
| 651 |
"video_height": crop_h,
|
| 652 |
"video_template": video_template
|
| 653 |
}
|
| 654 |
+
if srt_for_export:
|
| 655 |
+
export_payload["subtitles"] = srt_for_export
|
| 656 |
+
print(f"📝 Legendas incluídas no export")
|
| 657 |
+
|
| 658 |
export_resp = requests.post(
|
| 659 |
"https://habulaj-recurve-videos-export.hf.space/video/export",
|
| 660 |
json=export_payload,
|