EuuIia commited on
Commit
d4c94b4
·
verified ·
1 Parent(s): 4e44c56

Update api/ltx_server.py

Browse files
Files changed (1) hide show
  1. api/ltx_server.py +9 -16
api/ltx_server.py CHANGED
@@ -453,19 +453,17 @@ class VideoService:
453
  for i in range(len(video_paths)):
454
  video_atual = video_paths[i]
455
  video_proximo = video_paths[i + 1] if i + 1 < len(video_paths) else None
 
456
 
457
  # ---- 1. Video atual podado ----
458
  if i == 0:
459
- # Primeiro vídeo: remove últimos crossfade_frames
460
- podado = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
461
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim=0:-{crossfade_frames},setpts=PTS-STARTPTS" "{podado}"'
462
  elif video_proximo:
463
- # Vídeos do meio: remove primeiros e últimos crossfade_frames
464
- podado = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
465
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim={crossfade_frames}:-{crossfade_frames},setpts=PTS-STARTPTS" "{podado}"'
466
  else:
467
- # Último vídeo: remove primeiros crossfade_frames
468
- podado = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
469
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim={crossfade_frames}:,setpts=PTS-STARTPTS" "{podado}"'
470
 
471
  subprocess.run(cmd_trim, shell=True, check=True)
@@ -473,18 +471,15 @@ class VideoService:
473
 
474
  # ---- 2. Gerar transição, se houver próximo vídeo ----
475
  if video_proximo:
476
- # Extrair últimos frames do atual
477
- temp_fim = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
478
  cmd_fim = f'ffmpeg -y -i "{video_atual}" -vf "trim=-{crossfade_frames},setpts=PTS-STARTPTS" "{temp_fim}"'
479
  subprocess.run(cmd_fim, shell=True, check=True)
480
 
481
- # Extrair primeiros frames do próximo
482
- temp_inicio = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
483
  cmd_inicio = f'ffmpeg -y -i "{video_proximo}" -vf "trim=0:{crossfade_frames},setpts=PTS-STARTPTS" "{temp_inicio}"'
484
  subprocess.run(cmd_inicio, shell=True, check=True)
485
 
486
- # Criar vídeo de transição
487
- transicao = tempfile.NamedTemporaryFile(delete=False, suffix=".mp4").name
488
  cmd_blend = f"""
489
  ffmpeg -y -i "{temp_fim}" -i "{temp_inicio}" -filter_complex "
490
  [0:v][1:v]blend=all_expr='A*(1-T/{crossfade_frames})+B*(T/{crossfade_frames})'[v]
@@ -494,7 +489,8 @@ class VideoService:
494
  nova_lista.append(transicao)
495
 
496
  return nova_lista
497
-
 
498
  def _concat_mp4s_no_reencode(self, mp4_list: List[str], out_path: str):
499
  """
500
  Concatena múltiplos MP4s sem reencode usando o demuxer do ffmpeg.
@@ -519,9 +515,6 @@ class VideoService:
519
  os.remove(list_path)
520
  except Exception:
521
  pass
522
-
523
-
524
-
525
 
526
  def generate(
527
  self,
 
453
  for i in range(len(video_paths)):
454
  video_atual = video_paths[i]
455
  video_proximo = video_paths[i + 1] if i + 1 < len(video_paths) else None
456
+ pasta = os.path.dirname(video_atual)
457
 
458
  # ---- 1. Video atual podado ----
459
  if i == 0:
460
+ podado = os.path.join(pasta, f"podado_fim_{i+1}.mp4")
 
461
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim=0:-{crossfade_frames},setpts=PTS-STARTPTS" "{podado}"'
462
  elif video_proximo:
463
+ podado = os.path.join(pasta, f"podado_inicio_fim_{i+1}.mp4")
 
464
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim={crossfade_frames}:-{crossfade_frames},setpts=PTS-STARTPTS" "{podado}"'
465
  else:
466
+ podado = os.path.join(pasta, f"podado_inicio_{i+1}.mp4")
 
467
  cmd_trim = f'ffmpeg -y -i "{video_atual}" -vf "trim={crossfade_frames}:,setpts=PTS-STARTPTS" "{podado}"'
468
 
469
  subprocess.run(cmd_trim, shell=True, check=True)
 
471
 
472
  # ---- 2. Gerar transição, se houver próximo vídeo ----
473
  if video_proximo:
474
+ temp_fim = os.path.join(pasta, f"temp_fim_{i+1}.mp4")
 
475
  cmd_fim = f'ffmpeg -y -i "{video_atual}" -vf "trim=-{crossfade_frames},setpts=PTS-STARTPTS" "{temp_fim}"'
476
  subprocess.run(cmd_fim, shell=True, check=True)
477
 
478
+ temp_inicio = os.path.join(pasta, f"temp_inicio_{i+2}.mp4")
 
479
  cmd_inicio = f'ffmpeg -y -i "{video_proximo}" -vf "trim=0:{crossfade_frames},setpts=PTS-STARTPTS" "{temp_inicio}"'
480
  subprocess.run(cmd_inicio, shell=True, check=True)
481
 
482
+ transicao = os.path.join(pasta, f"transicao_{i+1}_{i+2}.mp4")
 
483
  cmd_blend = f"""
484
  ffmpeg -y -i "{temp_fim}" -i "{temp_inicio}" -filter_complex "
485
  [0:v][1:v]blend=all_expr='A*(1-T/{crossfade_frames})+B*(T/{crossfade_frames})'[v]
 
489
  nova_lista.append(transicao)
490
 
491
  return nova_lista
492
+
493
+
494
  def _concat_mp4s_no_reencode(self, mp4_list: List[str], out_path: str):
495
  """
496
  Concatena múltiplos MP4s sem reencode usando o demuxer do ffmpeg.
 
515
  os.remove(list_path)
516
  except Exception:
517
  pass
 
 
 
518
 
519
  def generate(
520
  self,