Update api/ltx_server.py
Browse files- api/ltx_server.py +21 -10
api/ltx_server.py
CHANGED
|
@@ -436,9 +436,7 @@ class VideoService:
|
|
| 436 |
print("================PODA CAUSAL=================")
|
| 437 |
return chunks
|
| 438 |
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
def _gerar_lista_com_transicoes(self, pasta: str, video_paths: list[str], crossfade_frames: int = 8) -> list[str]:
|
| 442 |
"""
|
| 443 |
Gera uma nova lista de vídeos aplicando transições suaves (blend frame a frame)
|
| 444 |
seguindo exatamente a lógica linear de Carlos.
|
|
@@ -507,17 +505,30 @@ class VideoService:
|
|
| 507 |
print(f"[DEBUG] Nova lista finalizada com {len(nova_lista)} partes.")
|
| 508 |
return nova_lista
|
| 509 |
|
| 510 |
-
def _concat_mp4s_no_reencode(self,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 511 |
|
|
|
|
| 512 |
with tempfile.NamedTemporaryFile("w", delete=False, suffix=".txt") as f:
|
| 513 |
-
for mp4 in
|
| 514 |
f.write(f"file '{os.path.abspath(mp4)}'\n")
|
| 515 |
-
|
| 516 |
-
|
| 517 |
-
print(f"[DEBUG] Concatenando {len(lista_mp4)} partes em {output_path}")
|
| 518 |
-
cmd = f'ffmpeg -y -f concat -safe 0 -i "{lista_path}" -c copy "{output_path}"'
|
| 519 |
-
subprocess.run(cmd, shell=True, check=True)
|
| 520 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 521 |
|
| 522 |
|
| 523 |
def generate(
|
|
|
|
| 436 |
print("================PODA CAUSAL=================")
|
| 437 |
return chunks
|
| 438 |
|
| 439 |
+
def _gerar_lista_com_transicoes(self, pasta: str, video_paths: list[str], crossfade_frames: int = 8) -> list[str]:
|
|
|
|
|
|
|
| 440 |
"""
|
| 441 |
Gera uma nova lista de vídeos aplicando transições suaves (blend frame a frame)
|
| 442 |
seguindo exatamente a lógica linear de Carlos.
|
|
|
|
| 505 |
print(f"[DEBUG] Nova lista finalizada com {len(nova_lista)} partes.")
|
| 506 |
return nova_lista
|
| 507 |
|
| 508 |
+
def _concat_mp4s_no_reencode(self, mp4_list: List[str], out_path: str):
|
| 509 |
+
"""
|
| 510 |
+
Concatena múltiplos MP4s sem reencode usando o demuxer do ffmpeg.
|
| 511 |
+
ATENÇÃO: todos os arquivos precisam ter mesmo codec, fps, resolução etc.
|
| 512 |
+
"""
|
| 513 |
+
if not mp4_list or len(mp4_list) < 2:
|
| 514 |
+
raise ValueError("Forneça pelo menos dois arquivos MP4 para concatenar.")
|
| 515 |
|
| 516 |
+
# Cria lista temporária para o ffmpeg
|
| 517 |
with tempfile.NamedTemporaryFile("w", delete=False, suffix=".txt") as f:
|
| 518 |
+
for mp4 in mp4_list:
|
| 519 |
f.write(f"file '{os.path.abspath(mp4)}'\n")
|
| 520 |
+
list_path = f.name
|
|
|
|
|
|
|
|
|
|
|
|
|
| 521 |
|
| 522 |
+
cmd = f"ffmpeg -y -f concat -safe 0 -i {list_path} -c copy {out_path}"
|
| 523 |
+
print(f"[DEBUG] Concat: {cmd}")
|
| 524 |
+
|
| 525 |
+
try:
|
| 526 |
+
subprocess.check_call(shlex.split(cmd))
|
| 527 |
+
finally:
|
| 528 |
+
try:
|
| 529 |
+
os.remove(list_path)
|
| 530 |
+
except Exception:
|
| 531 |
+
pass
|
| 532 |
|
| 533 |
|
| 534 |
def generate(
|