mrblackdev commited on
Commit
d3aec91
verified
1 Parent(s): e49afa0

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +105 -0
app.py ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import moviepy.editor as mp
3
+ from pydub import AudioSegment
4
+ from pydub.effects import normalize
5
+ from scipy.io.wavfile import read, write
6
+ import noisereduce as nr
7
+ import numpy as np
8
+ import gradio as gr
9
+
10
+
11
+ # --- FUNCIONES PARA EL PROCESAMIENTO DE AUDIO ---
12
+
13
+ def extract_audio(video_path, output_audio_path):
14
+ """Extrae el audio de un video y lo guarda como un archivo de audio."""
15
+ video = mp.VideoFileClip(video_path)
16
+ video.audio.write_audiofile(output_audio_path)
17
+
18
+ def denoise_audio(input_audio_path, output_audio_path):
19
+ """Aplica reducci贸n de ruido a un archivo de audio."""
20
+ rate, data = read(input_audio_path)
21
+ if data.ndim > 1: # Convertir a mono si el audio es est茅reo
22
+ data = np.mean(data, axis=1).astype(np.int16)
23
+ reduced_noise = nr.reduce_noise(y=data, sr=rate)
24
+ write(output_audio_path, rate, reduced_noise.astype(np.int16))
25
+
26
+ def process_audio(input_audio_path, output_audio_path):
27
+ """Aplica mejoras como normalizaci贸n y ecualizaci贸n al audio."""
28
+ audio = AudioSegment.from_file(input_audio_path)
29
+ audio = normalize(audio) # Normaliza el volumen
30
+ # Opcional: Filtrar frecuencias no deseadas (ejemplo: ruido de baja frecuencia)
31
+ audio = audio.low_pass_filter(3000).high_pass_filter(100)
32
+ audio.export(output_audio_path, format="wav")
33
+
34
+ def replace_audio(video_path, new_audio_path, output_video_path):
35
+ """Reemplaza el audio original de un video con uno procesado."""
36
+ video = mp.VideoFileClip(video_path)
37
+ audio = mp.AudioFileClip(new_audio_path)
38
+ video = video.set_audio(audio)
39
+ video.write_videofile(output_video_path, codec="libx264", audio_codec="aac")
40
+
41
+
42
+ # --- FUNCIONES PRINCIPALES PARA PROCESAR VIDEO O AUDIO ---
43
+
44
+ def process_video_audio(video_path, output_video_path):
45
+ """Procesa el audio de un video y lo integra nuevamente."""
46
+ temp_audio_path = "temp_audio.wav"
47
+ temp_denoised_audio_path = "temp_denoised_audio.wav"
48
+ temp_processed_audio_path = "temp_processed_audio.wav"
49
+
50
+ # Extraer el audio del video
51
+ extract_audio(video_path, temp_audio_path)
52
+
53
+ # Reducir ruido del audio
54
+ denoise_audio(temp_audio_path, temp_denoised_audio_path)
55
+
56
+ # Procesar y mejorar el audio
57
+ process_audio(temp_denoised_audio_path, temp_processed_audio_path)
58
+
59
+ # Reemplazar el audio original en el video
60
+ replace_audio(video_path, temp_processed_audio_path, output_video_path)
61
+
62
+ # Limpiar archivos temporales
63
+ os.remove(temp_audio_path)
64
+ os.remove(temp_denoised_audio_path)
65
+ os.remove(temp_processed_audio_path)
66
+
67
+ def process_audio_file(input_audio_path, output_audio_path):
68
+ """Procesa 煤nicamente un archivo de audio."""
69
+ temp_denoised_audio_path = "temp_denoised_audio.wav"
70
+
71
+ # Reducir ruido del audio
72
+ denoise_audio(input_audio_path, temp_denoised_audio_path)
73
+
74
+ # Procesar y mejorar el audio
75
+ process_audio(temp_denoised_audio_path, output_audio_path)
76
+
77
+ # Limpiar archivo temporal
78
+ os.remove(temp_denoised_audio_path)
79
+
80
+
81
+ # --- INTERFAZ GRADIO ---
82
+
83
+ def audio_processing_interface(video_file=None, audio_file=None):
84
+ if video_file is not None:
85
+ output_video_path = "processed_video.mp4"
86
+ process_video_audio(video_file.name, output_video_path)
87
+ return output_video_path
88
+ elif audio_file is not None:
89
+ output_audio_path = "processed_audio.wav"
90
+ process_audio_file(audio_file.name, output_audio_path)
91
+ return output_audio_path
92
+
93
+
94
+ # Interfaz Gradio
95
+ iface = gr.Interface(
96
+ fn=audio_processing_interface,
97
+ inputs=[
98
+ gr.File(label="Sube un video (para procesar su audio)", type="file"),
99
+ gr.File(label="O sube un archivo de audio", type="file")
100
+ ],
101
+ outputs=gr.File(label="Archivo Procesado"),
102
+ live=False
103
+ )
104
+
105
+ iface.launch()