AlexandreScriptsMT commited on
Commit
f9c3950
·
verified ·
1 Parent(s): f64427e

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +2 -21
app.py CHANGED
@@ -39,9 +39,6 @@ def generate_video(project_json):
39
  print("--- INICIANDO RENDERIZAÇÃO (V2) ---")
40
 
41
  # Criar pasta temporária para processamento
42
- # O 'with' garante que a pasta suma depois, mas o arquivo final precisa persistir
43
- # Então vamos criar a estrutura manualmente dentro do temp
44
-
45
  temp_dir_obj = tempfile.TemporaryDirectory()
46
  temp_dir = temp_dir_obj.name
47
 
@@ -51,7 +48,6 @@ def generate_video(project_json):
51
  try:
52
  data = json.loads(project_json)
53
  except:
54
- # Caso venha como string mas não seja JSON válido
55
  raise gr.Error("Erro: O texto fornecido não é um JSON válido.")
56
  else:
57
  data = project_json
@@ -66,11 +62,9 @@ def generate_video(project_json):
66
  for i, scene in enumerate(scenes_data):
67
  print(f"Processando cena {i}...")
68
 
69
- # Definir caminhos
70
  img_path = os.path.join(temp_dir, f"scene_{i}.jpg")
71
  audio_path = os.path.join(temp_dir, f"scene_{i}.wav")
72
 
73
- # Pegar dados
74
  img_b64 = scene.get("image_data_base64")
75
  audio_b64 = scene.get("audio_data_base64")
76
 
@@ -78,26 +72,17 @@ def generate_video(project_json):
78
  print(f"Pulando cena {i}: Falta audio ou imagem.")
79
  continue
80
 
81
- # Decodificar arquivos
82
  if not base64_to_image(img_b64, img_path): continue
83
  if not pcm_to_wav(audio_b64, audio_path): continue
84
 
85
  try:
86
  # --- SINTAXE MOVIEPY 2.0 ---
87
-
88
- # 1. Carregar Audio
89
  audio_clip = AudioFileClip(audio_path)
90
-
91
- # 2. Carregar Imagem e definir duração = audio + 0.1s
92
  duration = audio_clip.duration + 0.1
93
  video_clip = ImageClip(img_path).with_duration(duration)
94
-
95
- # 3. Juntar Audio
96
  video_clip = video_clip.with_audio(audio_clip)
97
 
98
- # 4. Aplicar Fade In (Nova Sintaxe v2)
99
- # O crossfadein antigo foi depreciado em favor de composition ou fx
100
- # Vamos usar FadeIn simples para entrada suave
101
  video_clip = video_clip.with_effects([FadeIn(duration=0.5)])
102
 
103
  clips.append(video_clip)
@@ -110,10 +95,8 @@ def generate_video(project_json):
110
 
111
  print(f"Concatenando {len(clips)} cenas...")
112
 
113
- # Concatenação
114
  final_video = concatenate_videoclips(clips, method="compose")
115
 
116
- # Output final
117
  output_path = os.path.join(temp_dir, "output_final.mp4")
118
 
119
  final_video.write_videofile(
@@ -133,8 +116,7 @@ def generate_video(project_json):
133
  print(error_msg)
134
  raise gr.Error(error_msg)
135
 
136
- # Interface Gradio Atualizada
137
- # api_name="predict" garante que a rota /predict exista para seu frontend
138
  demo = gr.Interface(
139
  fn=generate_video,
140
  inputs=gr.JSON(label="JSON do Projeto"),
@@ -144,5 +126,4 @@ demo = gr.Interface(
144
  )
145
 
146
  if __name__ == "__main__":
147
- # Gradio 5 gerencia segurança automaticamente no Spaces
148
  demo.launch()
 
39
  print("--- INICIANDO RENDERIZAÇÃO (V2) ---")
40
 
41
  # Criar pasta temporária para processamento
 
 
 
42
  temp_dir_obj = tempfile.TemporaryDirectory()
43
  temp_dir = temp_dir_obj.name
44
 
 
48
  try:
49
  data = json.loads(project_json)
50
  except:
 
51
  raise gr.Error("Erro: O texto fornecido não é um JSON válido.")
52
  else:
53
  data = project_json
 
62
  for i, scene in enumerate(scenes_data):
63
  print(f"Processando cena {i}...")
64
 
 
65
  img_path = os.path.join(temp_dir, f"scene_{i}.jpg")
66
  audio_path = os.path.join(temp_dir, f"scene_{i}.wav")
67
 
 
68
  img_b64 = scene.get("image_data_base64")
69
  audio_b64 = scene.get("audio_data_base64")
70
 
 
72
  print(f"Pulando cena {i}: Falta audio ou imagem.")
73
  continue
74
 
 
75
  if not base64_to_image(img_b64, img_path): continue
76
  if not pcm_to_wav(audio_b64, audio_path): continue
77
 
78
  try:
79
  # --- SINTAXE MOVIEPY 2.0 ---
 
 
80
  audio_clip = AudioFileClip(audio_path)
 
 
81
  duration = audio_clip.duration + 0.1
82
  video_clip = ImageClip(img_path).with_duration(duration)
 
 
83
  video_clip = video_clip.with_audio(audio_clip)
84
 
85
+ # Aplicar Fade In
 
 
86
  video_clip = video_clip.with_effects([FadeIn(duration=0.5)])
87
 
88
  clips.append(video_clip)
 
95
 
96
  print(f"Concatenando {len(clips)} cenas...")
97
 
 
98
  final_video = concatenate_videoclips(clips, method="compose")
99
 
 
100
  output_path = os.path.join(temp_dir, "output_final.mp4")
101
 
102
  final_video.write_videofile(
 
116
  print(error_msg)
117
  raise gr.Error(error_msg)
118
 
119
+ # Interface Gradio
 
120
  demo = gr.Interface(
121
  fn=generate_video,
122
  inputs=gr.JSON(label="JSON do Projeto"),
 
126
  )
127
 
128
  if __name__ == "__main__":
 
129
  demo.launch()