artificialguybr's picture
Update app.py
9ac2f85 verified
raw
history blame
2.08 kB
import gradio as gr
import subprocess
import os
from uuid import uuid4
def get_video_duration(video_path):
"""Obtém a duração do vídeo usando ffprobe."""
cmd = f"ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 \"{video_path}\""
result = subprocess.run(cmd, shell=True, text=True, capture_output=True)
duration = float(result.stdout)
return duration
def merge_videos(video1_path, video2_path):
output_filename = f"{uuid4()}_merged.mp4"
# Altura e largura desejadas para o vídeo de saída
desired_height = 1280
desired_width = 720
# Comando ffmpeg revisado para usar a codificação NVENC
ffmpeg_cmd = (
f'ffmpeg -hwaccel cuda -i "{video1_path}" -i "{video2_path}" '
f'-filter_complex '
f'"[0:v]scale_cuda=-2:{desired_height}:force_original_aspect_ratio=decrease,scale_cuda={desired_width}:{desired_height}:force_original_aspect_ratio=increase,crop={desired_width}:{desired_height}[v0];'
f'[1:v]scale_cuda=-2:{desired_height}:force_original_aspect_ratio=decrease,scale_cuda={desired_width}:{desired_height}:force_original_aspect_ratio=increase,crop={desired_width}:{desired_height}[v1];'
f'[v0][v1]vstack=inputs=2[v]" '
f'-map "[v]" -c:v h264_nvenc -preset fast {output_filename}'
)
subprocess.run(ffmpeg_cmd, shell=True, check=True)
return output_filename
def gradio_interface(video1, video2):
# Os vídeos já são passados como caminhos de arquivo temporário, então não precisamos abrir e salvar
output_video = merge_videos(video1, video2)
return output_video
iface = gr.Interface(fn=gradio_interface,
inputs=[gr.Video(label="Video 1"), gr.Video(label="Video 2")],
outputs=gr.Video(label="Vídeo Mesclado"),
title="Mesclador de Vídeos para TikTok",
description="Faça upload de dois vídeos para mesclá-los verticalmente em um estilo adequado para TikTok.")
if __name__ == "__main__":
iface.launch()