File size: 1,966 Bytes
03d88b9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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"
    
    # Não limitaremos a duração ao vídeo 1, pois queremos o vídeo completo mesclado.
    # A largura comum permanece, mas agora lidaremos com aspect ratios variados de forma mais dinâmica.
    common_width = 720
    
    ffmpeg_cmd = (
        f'ffmpeg -i "{video1_path}" -i "{video2_path}" '
        f'-filter_complex '
        f'"[0:v]scale={common_width}:-2:force_original_aspect_ratio=decrease,pad={common_width}:(ih*2):(ow-iw)/2:0,setdar=dar[v0];'
        f'[1:v]scale={common_width}:-2:force_original_aspect_ratio=decrease,pad={common_width}:(ih*2):(ow-iw)/2:ih,setdar=dar[v1];'
        f'[v0][v1]concat=n=2:v=1:a=0[v]" '
        f'-map "[v]" -map 0:a? -c:v libx264 -c:a aac {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()