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)