Spaces:
Paused
Paused
Upload app.py
Browse files
app.py
CHANGED
|
@@ -281,25 +281,23 @@ def reencode_video(
|
|
| 281 |
if tem_logo:
|
| 282 |
cmd += ["-i", logo_tmp]
|
| 283 |
|
| 284 |
-
# ββ filter_complex
|
|
|
|
|
|
|
| 285 |
if tem_logo:
|
| 286 |
overlay_pos = calcular_posicao_logo(
|
| 287 |
logo_posicao, logo_margem, logo_offset_x, logo_offset_y
|
| 288 |
)
|
| 289 |
-
# Regra de ouro: NΓO forΓ§ar nenhum format= na cadeia. O overlay
|
| 290 |
-
# do FFmpeg jΓ‘ lida com alpha PNG corretamente. ConversΓ΅es
|
| 291 |
-
# explΓcitas yuv420pβrgba causam mismatch de matriz de cor
|
| 292 |
-
# (BT.601/BT.709) e introduzem halo verde nas bordas.
|
| 293 |
if vf_parts:
|
| 294 |
fc = (
|
| 295 |
f"[0:v]{','.join(vf_parts)}[base];"
|
| 296 |
f"[1:v]scale={logo_width_px}:-1[logo];"
|
| 297 |
-
f"[base][logo]overlay={overlay_pos}[vout]"
|
| 298 |
)
|
| 299 |
else:
|
| 300 |
fc = (
|
| 301 |
f"[1:v]scale={logo_width_px}:-1[logo];"
|
| 302 |
-
f"[0:v][logo]overlay={overlay_pos}[vout]"
|
| 303 |
)
|
| 304 |
cmd += ["-filter_complex", fc, "-map", "[vout]"]
|
| 305 |
if has_audio:
|
|
@@ -578,6 +576,7 @@ with gr.Blocks(title="Super Re-Encoder", theme=gr.themes.Soft(),
|
|
| 578 |
with gr.Column(scale=1):
|
| 579 |
logo_file = gr.Image(
|
| 580 |
type="filepath",
|
|
|
|
| 581 |
label="PNG com fundo transparente (recomendado)"
|
| 582 |
)
|
| 583 |
logo_preview = gr.Image(
|
|
@@ -652,4 +651,4 @@ with gr.Blocks(title="Super Re-Encoder", theme=gr.themes.Soft(),
|
|
| 652 |
)
|
| 653 |
|
| 654 |
demo.queue(max_size=5)
|
| 655 |
-
demo.launch(server_name="0.0.0.0", server_port=7860)
|
|
|
|
| 281 |
if tem_logo:
|
| 282 |
cmd += ["-i", logo_tmp]
|
| 283 |
|
| 284 |
+
# ββ filter_complex ββββββββββββββββββββββββββββββββββββββββββ
|
| 285 |
+
# O overlay do FFmpeg precisa de format=auto para lidar
|
| 286 |
+
# corretamente com o canal alpha do PNG.
|
| 287 |
if tem_logo:
|
| 288 |
overlay_pos = calcular_posicao_logo(
|
| 289 |
logo_posicao, logo_margem, logo_offset_x, logo_offset_y
|
| 290 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 291 |
if vf_parts:
|
| 292 |
fc = (
|
| 293 |
f"[0:v]{','.join(vf_parts)}[base];"
|
| 294 |
f"[1:v]scale={logo_width_px}:-1[logo];"
|
| 295 |
+
f"[base][logo]overlay={overlay_pos}:format=auto[vout]"
|
| 296 |
)
|
| 297 |
else:
|
| 298 |
fc = (
|
| 299 |
f"[1:v]scale={logo_width_px}:-1[logo];"
|
| 300 |
+
f"[0:v][logo]overlay={overlay_pos}:format=auto[vout]"
|
| 301 |
)
|
| 302 |
cmd += ["-filter_complex", fc, "-map", "[vout]"]
|
| 303 |
if has_audio:
|
|
|
|
| 576 |
with gr.Column(scale=1):
|
| 577 |
logo_file = gr.Image(
|
| 578 |
type="filepath",
|
| 579 |
+
image_mode="RGBA",
|
| 580 |
label="PNG com fundo transparente (recomendado)"
|
| 581 |
)
|
| 582 |
logo_preview = gr.Image(
|
|
|
|
| 651 |
)
|
| 652 |
|
| 653 |
demo.queue(max_size=5)
|
| 654 |
+
demo.launch(server_name="0.0.0.0", server_port=7860)
|