Utilizar: yt-dlp
Utilizar: Whisper (OpenAI)
Script de Python para Descargar y Transcribir:
!pip install -q git+https://github.com/openai/whisper.git
!pip install -q yt-dlp
!sudo apt update && sudo apt install -y ffmpeg
import os
import whisper
import yt_dlp
# --- Configuración ---
YOUTUBE_URL = "https://www.youtube.com/watch?v=49b8APxF6_Y" # Cambia esto por tu URL
AUDIO_FILENAME = "audio.mp3"
MODEL_WHISPER = "large" # Opciones: tiny, base, small, medium, large
# --- 1. Descargar audio de YouTube ---
def download_youtube_audio(url, output_file="audio.mp3"):
ydl_opts = {
'format': 'bestaudio/best',
'postprocessors': [{
'key': 'FFmpegExtractAudio',
'preferredcodec': 'mp3',
'preferredquality': '192',
}],
'outtmpl': output_file.replace('.mp3', ''),
}
print("⏳ Descargando audio de YouTube...")
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
print(f"✅ Audio descargado como: {output_file}")
return output_file
# --- 2. Transcribir con Whisper ---
def transcribe_audio(audio_file, model_size="meduim"):
print("🔍 Cargando modelo Whisper...")
model = whisper.load_model(model_size)
print("🎤 Transcribiendo audio (esto puede tardar)...")
result = model.transcribe(audio_file)
return result["text"]
# --- 3. Guardar transcripción en un archivo ---
def save_transcription(text, filename="transcripcion.txt"):
with open(filename, "w", encoding="utf-8") as f:
f.write(text)
print(f"📄 Transcripción guardada en: {filename}")
# --- EJECUCIÓN PRINCIPAL ---
if __name__ == "__main__":
print("\n🎬 INICIANDO DESCARGA Y TRANSCRIPCIÓN 🎬")
audio_file = download_youtube_audio(YOUTUBE_URL, AUDIO_FILENAME)
transcription = transcribe_audio(audio_file, MODEL_WHISPER)
print("\n📜 **Transcripción Completa:**")
print(transcription)
save_transcription(transcription)
print("\n✅ ¡Proceso completado con éxito! ✅")
Utilizar: Google Translate, DeepL, Amazon Translate, Microsoft Translator (u otras plataformas de traducción automática)
Utilizar: Script de Python personalizado
Utilizar: SpeechMa (u otras herramientas TTS)
Utilizar: Editor de subtítulos (online o software) o editor de texto
Utilizar: CapCut (versión 1.5.0)
Utilizar: Script de Python personalizado con la librería `srt`
Script de Python para Dividir SRT Palabra por Palabra:
!pip install srt
import re
import srt
from datetime import timedelta
def capitalize_first_letter(word):
if not word:
return word
return word[0].upper() + word[1:].lower()
def clean_word(word):
cleaned = re.sub(r'[.,!?;:¿¡"]', '', word)
return capitalize_first_letter(cleaned)
def split_srt_to_words(input_file, output_file):
print(f"Procesando archivo: {input_file}")
try:
with open(input_file, "r", encoding="utf-8") as file:
content = file.read()
print("Contenido del archivo leído correctamente")
subtitles = list(srt.parse(content))
except Exception as e:
print(f"Error al leer el archivo: {str(e)}")
return
if not subtitles:
print("El archivo no contiene subtítulos o está vacío")
return
print(f"Encontrados {len(subtitles)} subtítulos para procesar")
new_subtitles = []
index = 1
for i, subtitle in enumerate(subtitles, 1):
print(f"\nProcesando subtítulo {i}:")
print(f"Texto original: '{subtitle.content}'")
print(f"Duración original: {subtitle.end - subtitle.start}")
words = re.findall(r"\w+[\w'-]*", subtitle.content)
cleaned_words = [clean_word(w) for w in words if clean_word(w)]
print(f"Palabras procesadas: {cleaned_words}")
if not cleaned_words:
print("No se encontraron palabras válidas en este subtítulo")
continue
total_chars = sum(len(w) for w in cleaned_words)
if total_chars == 0:
continue
duration_per_char = (subtitle.end - subtitle.start) / total_chars
start_time = subtitle.start
for word in cleaned_words:
word_duration = duration_per_char * len(word)
end_time = start_time + word_duration
if i < len(subtitles) and end_time > subtitles[i].start:
end_time = subtitles[i].start - timedelta(milliseconds=1)
new_sub = srt.Subtitle(index, start_time, end_time, word)
new_subtitles.append(new_sub)
print(f"Añadida palabra {index}: '{word}' ({start_time} --> {end_time})")
start_time = end_time
index += 1
if not new_subtitles:
print("No se generaron subtítulos. Verifica el formato del archivo.")
return
print(f"\nTotal de palabras generadas: {len(new_subtitles)}")
try:
with open(output_file, "w", encoding="utf-8") as file:
file.write(srt.compose(new_subtitles))
print(f"\nArchivo de salida '{output_file}' generado con éxito!")
except Exception as e:
print(f"Error al guardar el archivo: {str(e)}")
# Ejemplo de uso
# split_srt_to_words("input.srt", "output_palabra_por_palabra.srt")