File size: 3,298 Bytes
cb7c154
b298488
cb7c154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b298488
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cb7c154
 
 
 
 
 
 
 
 
 
 
 
 
b298488
 
 
 
cb7c154
 
 
a79075e
cb7c154
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
import os
import replicate
import streamlit as st
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):
    audio = AudioSegment.from_file(audio_path)
    audio_length = len(audio)
    segments = []

    # Divide el audio en fragmentos de la duraci贸n especificada (10 minutos en milisegundos)
    for i in range(0, audio_length, segment_duration_ms):
        segment = audio[i:i+segment_duration_ms]  # Cada fragmento de hasta 10 minutos
        segment_path = f"segment_{i // (60 * 1000)}.wav"  # Nombre del archivo con el 铆ndice del minuto
        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 10 minutos
    if audio_duration_minutes > 10:
        segments = dividir_audio(audio_file, segment_duration_ms=10 * 60 * 1000)  # 10 minutos en milisegundos
    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 Streamlit
                    "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


# Configurar la interfaz de Streamlit
st.title("")

# Subir archivo de audio
uploaded_audio = st.file_uploader("Sube tu archivo de audio", type=["wav", "mp3", "ogg", "flac"])

# Si se ha subido un archivo
if uploaded_audio is not None:
    # Guardar el archivo temporalmente
    with open("temp_audio_file.wav", "wb") as f:
        f.write(uploaded_audio.read())
    
    st.info("Transcribiendo el audio, esto puede tardar unos minutos...")

    # Transcribir el archivo
    transcription = transcribe_audio("temp_audio_file.wav")

    # Mostrar el resultado
    st.subheader("Transcripci贸n")
    st.text(transcription)