Creación o Replicación de Canal de Otro Idioma al Español: Guía Paso a Paso

Flujo de Trabajo

  1. Descarga del Audio del Video Original
  2. Transcripción del Audio a Texto con Python en Google Colab
  3. Traducción del Texto a Español con IA
  4. División del Texto para Speech Synthesis
  5. Generación de Voz en Español (Texto a Voz)
  6. Creación del Archivo de Subtítulos (SRT)
  7. Edición del Video con CapCut (Versión 1.5.0)
  8. (Opcional) Creación de Subtítulos Palabra por Palabra con Python

Pasos Detallados

1. Descarga del Audio del Video Original

Utilizar: yt-dlp

2. Transcripción del Audio a Texto con Python en Google Colab

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! ✅")



    

3. Traducción del Texto a Español con IA

Utilizar: Google Translate, DeepL, Amazon Translate, Microsoft Translator (u otras plataformas de traducción automática)

4. División del Texto para Speech Synthesis

Utilizar: Script de Python personalizado

5. Generación de Voz en Español (Texto a Voz)

Utilizar: SpeechMa (u otras herramientas TTS)

6. Creación del Archivo de Subtítulos (SRT)

Utilizar: Editor de subtítulos (online o software) o editor de texto

7. Edición del Video con CapCut (Versión 1.5.0)

Utilizar: CapCut (versión 1.5.0)

8. (Opcional) Creación de Subtítulos Palabra por Palabra con Python

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")