Spaces:
Paused
Paused
Upload app.py
Browse files
app.py
CHANGED
|
@@ -34,7 +34,6 @@ def reencode_video(video_file, modo, resolucao, fps, crf_valor, normalizar_audio
|
|
| 34 |
vid_h = int(stream.get("height", 1080))
|
| 35 |
is_vertical = vid_h > vid_w
|
| 36 |
|
| 37 |
-
# Pegar a duraΓ§Γ£o total para calcular a porcentagem
|
| 38 |
probe_dur = subprocess.run([
|
| 39 |
"ffprobe", "-v", "error",
|
| 40 |
"-show_entries", "format=duration",
|
|
@@ -78,9 +77,10 @@ def reencode_video(video_file, modo, resolucao, fps, crf_valor, normalizar_audio
|
|
| 78 |
vf = ",".join(vf_parts) if vf_parts else "null"
|
| 79 |
|
| 80 |
# ββ Monta comando base ββββββββββββββββββββββββββββββββββββββ
|
|
|
|
|
|
|
|
|
|
| 81 |
cmd = ["ffmpeg", "-hide_banner", "-loglevel", "error", "-progress", "pipe:1", "-y"]
|
| 82 |
-
if use_gpu:
|
| 83 |
-
cmd += ["-hwaccel", "cuda"]
|
| 84 |
cmd += ["-i", input_path, "-vf", vf]
|
| 85 |
|
| 86 |
if remover_duplicados:
|
|
@@ -165,7 +165,6 @@ def reencode_video(video_file, modo, resolucao, fps, crf_valor, normalizar_audio
|
|
| 165 |
current_sec = 0.0
|
| 166 |
pct = 0
|
| 167 |
|
| 168 |
-
# LΓͺ a saΓda do -progress pipe:1
|
| 169 |
while True:
|
| 170 |
line = process.stdout.readline()
|
| 171 |
if not line and process.poll() is not None:
|
|
@@ -182,7 +181,6 @@ def reencode_video(video_file, modo, resolucao, fps, crf_valor, normalizar_audio
|
|
| 182 |
else:
|
| 183 |
yield None, f"β³ Codificando... {current_sec:.1f}s processados"
|
| 184 |
|
| 185 |
-
# Verifica se deu erro no final
|
| 186 |
if process.returncode != 0:
|
| 187 |
err = process.stderr.read()
|
| 188 |
yield None, f"β Erro no FFmpeg:\n{err[-1500:]}"
|
|
@@ -199,7 +197,7 @@ def reencode_video(video_file, modo, resolucao, fps, crf_valor, normalizar_audio
|
|
| 199 |
elif not has_audio:
|
| 200 |
extras.append("β οΈ sem faixa de Γ‘udio")
|
| 201 |
if remover_duplicados:
|
| 202 |
-
extras.append("frames duplicados removidos")
|
| 203 |
if gpu_fallback:
|
| 204 |
extras.append("β οΈ GPU indisponΓvel β usou CPU")
|
| 205 |
|
|
|
|
| 34 |
vid_h = int(stream.get("height", 1080))
|
| 35 |
is_vertical = vid_h > vid_w
|
| 36 |
|
|
|
|
| 37 |
probe_dur = subprocess.run([
|
| 38 |
"ffprobe", "-v", "error",
|
| 39 |
"-show_entries", "format=duration",
|
|
|
|
| 77 |
vf = ",".join(vf_parts) if vf_parts else "null"
|
| 78 |
|
| 79 |
# ββ Monta comando base ββββββββββββββββββββββββββββββββββββββ
|
| 80 |
+
# NOTA: Removido o -hwaccel cuda. Como usamos filtros de software (-vf),
|
| 81 |
+
# deixar o FFmpeg decodificar na CPU e enviar direto pro NVENC Γ© muito
|
| 82 |
+
# mais rΓ‘pido do que ficar transferindo frames da GPU pra CPU e vice-versa.
|
| 83 |
cmd = ["ffmpeg", "-hide_banner", "-loglevel", "error", "-progress", "pipe:1", "-y"]
|
|
|
|
|
|
|
| 84 |
cmd += ["-i", input_path, "-vf", vf]
|
| 85 |
|
| 86 |
if remover_duplicados:
|
|
|
|
| 165 |
current_sec = 0.0
|
| 166 |
pct = 0
|
| 167 |
|
|
|
|
| 168 |
while True:
|
| 169 |
line = process.stdout.readline()
|
| 170 |
if not line and process.poll() is not None:
|
|
|
|
| 181 |
else:
|
| 182 |
yield None, f"β³ Codificando... {current_sec:.1f}s processados"
|
| 183 |
|
|
|
|
| 184 |
if process.returncode != 0:
|
| 185 |
err = process.stderr.read()
|
| 186 |
yield None, f"β Erro no FFmpeg:\n{err[-1500:]}"
|
|
|
|
| 197 |
elif not has_audio:
|
| 198 |
extras.append("β οΈ sem faixa de Γ‘udio")
|
| 199 |
if remover_duplicados:
|
| 200 |
+
extras.append("frames duplicados removidos (forΓ§a uso de CPU)")
|
| 201 |
if gpu_fallback:
|
| 202 |
extras.append("β οΈ GPU indisponΓvel β usou CPU")
|
| 203 |
|