File size: 2,913 Bytes
cf6ce9f
6478d6a
 
c887c55
740442f
a463449
9812b5d
740442f
9812b5d
 
740442f
c887c55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6478d6a
 
c887c55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6478d6a
 
 
c887c55
6478d6a
 
 
 
 
740442f
6478d6a
 
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import os
import replicate
import gradio as gr
from pydub import AudioSegment

# Aseg煤rate de que REPLICATE_API_TOKEN est茅 configurado en las variables de entorno
replicate_token = os.getenv("REPLICATE_API_TOKEN")

if not replicate_token:
    raise ValueError("No se ha encontrado el token de API de Replicate.")

# Funci贸n para dividir el archivo de audio en segmentos de duraci贸n definida (en milisegundos)
def dividir_audio(audio_path, segment_duration_ms=60000):
    audio = AudioSegment.from_file(audio_path)
    audio_length = len(audio)
    segments = []

    # Divide el audio en fragmentos
    for i in range(0, audio_length, segment_duration_ms):
        segment = audio[i:i+segment_duration_ms]
        segment_path = f"segment_{i // 1000}.wav"
        segment.export(segment_path, format="wav")  # Exporta el fragmento como un archivo WAV
        segments.append(segment_path)
    
    return segments

# Funci贸n para transcribir el audio
def transcribe_audio(audio_file):
    # Cargar el archivo de audio completo
    audio = AudioSegment.from_file(audio_file)
    audio_duration_minutes = len(audio) / (1000 * 60)  # Duraci贸n en minutos

    # Si el audio dura m谩s de 10 minutos, dividirlo en segmentos de 1 minuto
    if audio_duration_minutes > 10:
        segments = dividir_audio(audio_file, segment_duration_ms=60000)
    else:
        segments = [audio_file]  # Si es menor de 10 minutos, no dividir

    # Almacenar todas las transcripciones
    all_transcriptions = []

    # Procesar cada segmento individualmente
    for segment_path in segments:
        with open(segment_path, "rb") as audio:
            output = replicate.run(
                "vaibhavs10/incredibly-fast-whisper:3ab86df6c8f54c11309d4d1f930ac292bad43ace52d10c80d87eb258b3c9f79c",
                input={
                    "task": "transcribe",
                    "audio": audio,  # El archivo de audio cargado en Gradio
                    "language": "None",  # Detecta autom谩ticamente el idioma
                    "timestamp": "chunk",  # Incluye marcas de tiempo
                    "batch_size": 64,
                    "diarise_audio": False
                }
            )
            # Almacenar la transcripci贸n del segmento
            all_transcriptions.append(output['text'])
    
    # Combina todas las transcripciones en una sola cadena
    full_transcription = "\n".join(all_transcriptions)
    return full_transcription  # Devuelve la transcripci贸n completa

# Crea la interfaz de Gradio
with gr.Blocks() as demo:
    gr.Markdown("# Transcripci贸n de Audio usando Whisper")
    audio_input = gr.Audio(type="filepath", label="Sube tu archivo de audio")
    output_text = gr.Textbox(label="Transcripci贸n")
    
    transcribe_button = gr.Button("Transcribir")
    transcribe_button.click(fn=transcribe_audio, inputs=audio_input, outputs=output_text)

# Ejecuta la aplicaci贸n
demo.launch()