EuuIia commited on
Commit
4cdfd1b
·
verified ·
1 Parent(s): 98350dd

Update api/ltx_server.py

Browse files
Files changed (1) hide show
  1. 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, lista_mp4, output_path):
 
 
 
 
 
 
511
 
 
512
  with tempfile.NamedTemporaryFile("w", delete=False, suffix=".txt") as f:
513
- for mp4 in lista_mp4:
514
  f.write(f"file '{os.path.abspath(mp4)}'\n")
515
- lista_path = f.name
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(