Update api/ltx_server.py
Browse files- api/ltx_server.py +32 -25
api/ltx_server.py
CHANGED
|
@@ -460,63 +460,70 @@ class VideoService:
|
|
| 460 |
|
| 461 |
poda = crossfade_frames
|
| 462 |
total_partes = len(video_paths)
|
| 463 |
-
|
|
|
|
| 464 |
nova_lista = []
|
| 465 |
|
| 466 |
print(f"[DEBUG] Iniciando pipeline com {total_partes} vídeos e {poda} frames de crossfade")
|
| 467 |
|
| 468 |
for i in range(total_partes):
|
| 469 |
base = os.path.splitext(os.path.basename(video_paths[i]))[0]
|
| 470 |
-
|
| 471 |
-
shutil.copy(video_paths[i], video_clone)
|
| 472 |
-
|
| 473 |
# --- PODA ---
|
| 474 |
video_podado = os.path.join(pasta, f"{base}_podado_{i}.mp4")
|
| 475 |
|
| 476 |
-
|
| 477 |
-
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 481 |
cmd_fim = (
|
| 482 |
-
f'ffmpeg -y -hide_banner -loglevel error -i "{
|
| 483 |
-
f'-vf "trim=start_frame={start_frame}:end_frame={
|
| 484 |
f'-an "{video_podado}"'
|
| 485 |
)
|
| 486 |
subprocess.run(cmd_fim, shell=True, check=True)
|
| 487 |
nova_lista.append(video_podado)
|
| 488 |
-
|
| 489 |
-
|
| 490 |
-
|
| 491 |
if i > 0:
|
| 492 |
video_fade_ini = os.path.join(pasta, f"{base}_fade_ini_{i}.mp4")
|
| 493 |
cmd_ini = (
|
| 494 |
-
f'ffmpeg -y -hide_banner -loglevel error -i "{
|
| 495 |
f'-vf "trim=end_frame={poda},setpts=PTS-STARTPTS" -an "{video_fade_ini}"'
|
| 496 |
)
|
| 497 |
subprocess.run(cmd_ini, shell=True, check=True)
|
| 498 |
|
| 499 |
# --- TRANSIÇÃO ---
|
| 500 |
-
if
|
| 501 |
-
|
| 502 |
cmd_blend = (
|
| 503 |
f'ffmpeg -y -hide_banner -loglevel error '
|
| 504 |
-
f'-i "{
|
| 505 |
f'-filter_complex "[0:v][1:v]blend=all_expr=\'A*(1-T/{poda})+B*(T/{poda})\',format=yuv420p" '
|
| 506 |
-
f'-frames:v {poda} "{
|
| 507 |
)
|
| 508 |
subprocess.run(cmd_blend, shell=True, check=True)
|
| 509 |
-
nova_lista.append(
|
| 510 |
|
| 511 |
# --- FADE_FIM ---
|
| 512 |
if i < total_partes - 1:
|
| 513 |
video_fade_fim = os.path.join(pasta, f"{base}_fade_fim_{i}.mp4")
|
| 514 |
-
|
| 515 |
-
|
| 516 |
-
|
| 517 |
-
|
|
|
|
| 518 |
subprocess.run(cmd_fim, shell=True, check=True)
|
| 519 |
-
video_anterior_fade_fim = video_fade_fim
|
| 520 |
|
| 521 |
print(f"[DEBUG] Nova lista finalizada com {len(nova_lista)} partes.")
|
| 522 |
print(f"[DEBUG] {nova_lista}")
|
|
|
|
| 460 |
|
| 461 |
poda = crossfade_frames
|
| 462 |
total_partes = len(video_paths)
|
| 463 |
+
video_fade_fim = None
|
| 464 |
+
video_fade_ini = None
|
| 465 |
nova_lista = []
|
| 466 |
|
| 467 |
print(f"[DEBUG] Iniciando pipeline com {total_partes} vídeos e {poda} frames de crossfade")
|
| 468 |
|
| 469 |
for i in range(total_partes):
|
| 470 |
base = os.path.splitext(os.path.basename(video_paths[i]))[0]
|
| 471 |
+
|
|
|
|
|
|
|
| 472 |
# --- PODA ---
|
| 473 |
video_podado = os.path.join(pasta, f"{base}_podado_{i}.mp4")
|
| 474 |
|
| 475 |
+
|
| 476 |
+
if i<total_partes-1:
|
| 477 |
+
end_frame = self._get_total_frames(base) - poda
|
| 478 |
+
else:
|
| 479 |
+
print(f"[DEBUG] ultima iteracao")
|
| 480 |
+
end_frame = self._get_total_frames(base)
|
| 481 |
+
|
| 482 |
+
if i>0:
|
| 483 |
+
start_frame = poda
|
| 484 |
+
else:
|
| 485 |
+
start_frame = 0
|
| 486 |
+
print(f"[DEBUG] primeira iteracao")
|
| 487 |
+
|
| 488 |
cmd_fim = (
|
| 489 |
+
f'ffmpeg -y -hide_banner -loglevel error -i "{base}" '
|
| 490 |
+
f'-vf "trim=start_frame={start_frame}:end_frame={end_frame},setpts=PTS-STARTPTS" '
|
| 491 |
f'-an "{video_podado}"'
|
| 492 |
)
|
| 493 |
subprocess.run(cmd_fim, shell=True, check=True)
|
| 494 |
nova_lista.append(video_podado)
|
| 495 |
+
|
| 496 |
+
|
| 497 |
+
# --- FADE_INI ---
|
| 498 |
if i > 0:
|
| 499 |
video_fade_ini = os.path.join(pasta, f"{base}_fade_ini_{i}.mp4")
|
| 500 |
cmd_ini = (
|
| 501 |
+
f'ffmpeg -y -hide_banner -loglevel error -i "{base}" '
|
| 502 |
f'-vf "trim=end_frame={poda},setpts=PTS-STARTPTS" -an "{video_fade_ini}"'
|
| 503 |
)
|
| 504 |
subprocess.run(cmd_ini, shell=True, check=True)
|
| 505 |
|
| 506 |
# --- TRANSIÇÃO ---
|
| 507 |
+
if video_fade_fim and video_fade_ini:
|
| 508 |
+
video_fade = os.path.join(pasta, f"transicao_{i-1}_{i}.mp4")
|
| 509 |
cmd_blend = (
|
| 510 |
f'ffmpeg -y -hide_banner -loglevel error '
|
| 511 |
+
f'-i "{video_fade_fim}" -i "{video_fade_ini}" '
|
| 512 |
f'-filter_complex "[0:v][1:v]blend=all_expr=\'A*(1-T/{poda})+B*(T/{poda})\',format=yuv420p" '
|
| 513 |
+
f'-frames:v {poda} "{video_fade}"'
|
| 514 |
)
|
| 515 |
subprocess.run(cmd_blend, shell=True, check=True)
|
| 516 |
+
nova_lista.append(video_fade)
|
| 517 |
|
| 518 |
# --- FADE_FIM ---
|
| 519 |
if i < total_partes - 1:
|
| 520 |
video_fade_fim = os.path.join(pasta, f"{base}_fade_fim_{i}.mp4")
|
| 521 |
+
cmd_fim = (
|
| 522 |
+
f'ffmpeg -y -hide_banner -loglevel error '
|
| 523 |
+
f'-i "{base}" -vf "trim=start_frame=-{poda},setpts=PTS-STARTPTS" '
|
| 524 |
+
f'-an "{video_fade_fim}"'
|
| 525 |
+
)
|
| 526 |
subprocess.run(cmd_fim, shell=True, check=True)
|
|
|
|
| 527 |
|
| 528 |
print(f"[DEBUG] Nova lista finalizada com {len(nova_lista)} partes.")
|
| 529 |
print(f"[DEBUG] {nova_lista}")
|