Convertir videos de YouTube en mp3

  • Autor Autor Sabogal
  • Fecha de inicio Fecha de inicio
Sabogal

Sabogal

Épsilon
Verificación en dos pasos activada
Verificado por Binance
Cuando requiero convertir un video de YouTube en MP3 debo recurrir a herramienta en línea que están cargadas de publicidad intrusiva y suelen representar un riesgo de seguridad, así que quise recurrir a la IA para programar un script en Python para ejecutarlo en Visual Studio Code, y obtuve el siguiente que me funciona perfectamente.
Insertar CODE, HTML o PHP:
import yt_dlp

def descargar_mp3(url, nombre_personalizado):
    ydl_opts = {
        # Pedimos el mejor audio
        'format': 'bestaudio/best',
        
        # Convertimos a MP3
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        }],
        
        # MEJORA: Usamos tu nombre personalizado en lugar del título de YouTube
        # F-strings de Python: pone el nombre que le pases y le añade la extensión (.mp3)
        'outtmpl': f'{nombre_personalizado}.%(ext)s',
        
        'noplaylist': True,
    }

    print(f"\nDescargando y guardando como: {nombre_personalizado}.mp3\n")

    try:
        with yt_dlp.YoutubeDL(ydl_opts) as ydl:
            ydl.download([url])
        print("\n¡Listo! Tu archivo MP3 se ha guardado con el nombre correcto.")
        
    except Exception as e:
        print(f"\nOcurrió un error: {e}")

# ==========================================
# EJECUCIÓN
# ==========================================
if __name__ == "__main__":
    
    # 1. PEGA AQUÍ TU ENLACE:
    url_del_video = "https://www.youtube.com/watch?v=JMExdHddO5M"
    
    # 2. ESCRIBE AQUÍ EL NOMBRE QUE QUIERES PARA EL ARCHIVO:
    # (No pongas la extensión .mp3, el script la pone automáticamente)
    nombre_final = "Y yo ni se diga"
    
    # Validaciones y ejecución
    if "youtube.com" in url_del_video or "youtu.be" in url_del_video:
        if nombre_final.strip() == "":
            print("Error: Por favor, escribe un nombre para el archivo.")
        else:
            descargar_mp3(url_del_video, nombre_final)
    else:
        print("URL no válida.")
 
¡Excelente solución! Usar Python para evitar esos sitios llenos de publicidad es lo más inteligente. Gracias por compartir el script, seguro le será útil a más de uno en el foro.
 
Una idea genial. ¿Se pueden descargar varios vídeos a la vez? ¿Por ejemplo, convertir 10 vídeos con un solo clic?
 
Una idea genial. ¿Se pueden descargar varios vídeos a la vez? ¿Por ejemplo, convertir 10 vídeos con un solo clic?
No lo se, pero creería que no se puede hacer con Python porque eso ha es edición de video o audio y habría que utilizar una aplicación específica para ello.

Lo que sí se puede hacer es descargar varios videos en una sola ejecución.
 
No lo se, pero creería que no se puede hacer con Python porque eso ha es edición de video o audio y habría que utilizar una aplicación específica para ello.
se pueden hacer muchas cosas
para bajar y convertir varios, solo crea una lista con las urls pegadas
asi como lo tienes tienes que estar cambiando el nombre, url, etc
y menos si no tiene un input, y menos un while para que "regrese" el código al principio
después esa lista la procesas para cada url
pero con yt-dlp.exe con comandos para que le agregue los datos
y ya
 
Una idea genial. ¿Se pueden descargar varios vídeos a la vez? ¿Por ejemplo, convertir 10 vídeos con un solo clic?
Sí, se puede descargar varios videos diferentes al mismo tíempo...
Luego podes ponerle el Cover que quieras, inclusive generado con IA...
Posteriormente lo puedes convertir en videos musicales si quieres...
Y hasta subirlo a redes sociales y grupos, o solo guardarlos localmente.

Todo eso la IA ya te responde al instante y cero conflicto...
Te tira el código en el lenguaje que quieras, script bash, sin drama.
 
Excelente aporte. La verdad es que yt-dlp es una gran herramienta y mil veces más segura que andar lidiando con páginas web engañosas, llenas de publicidad o simplemente ineficaces. Yo también la utilizo habitualmente y había pensado alguna vez construir una aplicación en c++ y qml para automatizar todo el proceso.

Si me permites una pequeña sugerencia técnica para robustecer el script: la validación de la URL con "youtube.com" in url_del_video puede quedarse corta con enlaces cortos (youtu.be) o formatos de Shorts. Como ya tienes un bloque try/except envolviendo la descarga, podrías retirar ese if y dejar que el propio yt-dlp valide la URL internamente. Si la URL es inválida, saltará directamente al except Exception as e, atrapando el error de forma más limpia y cubriendo todos los formatos de enlace posibles.

¡Gracias por compartirlo! Es bueno ver que otros también tuvieron las mismas inquietudes que uno, y se adelantan a resolverlas.
 
IMPRESIONANTEMENTE BIEN Y SENCILLO AUNQUE SI NO SABES DE PROGRAMACION USAS LA IA Y LO CONSIGUES EN UN MOMENTO. MUCHAS GRACIAS.
 
Yo uso esta herramienta para pasar de videos a mp3 y no tiene nada de publicidad, uso como navegador Brave

 
Le he dado una vuelta al script y he añadido algunas mejoras para hacerlo más cómodo de usar.

La principal es que ya no hace falta entrar en el código cada vez para cambiar la URL y el nombre del archivo.
Ahora ejecutas python descargar.py, pegas la URL cuando te la pida, escribes el nombre que quieres para el MP3 y listo.

También crea automáticamente una carpeta MP3 junto al script para tener todas las descargas organizadas.

He añadido además una pequeña limpieza de los nombres de archivo.
Si escribes caracteres que Windows no admite en un nombre (:, ?, *, etc.), los elimina automáticamente para evitar errores.

Reconoce enlaces normales de YouTube, enlaces cortos de youtu.be y YouTube Music.
También mantiene noplaylist para evitar que por accidente se descargue una lista de reproducción completa.

Por último, he mejorado un poco el control de errores para que, si algo falla, resulte más fácil saber qué ha ocurrido.


El funcionamiento queda simplemente así:

1. Ejecutar python descargar.py
2. Pegar la URL del vídeo.
3. Escribir el nombre del archivo.
4. El audio se descarga, se convierte a MP3 a 192 kbps mediante FFmpeg y queda guardado en la carpeta MP3.

Como en el script original, hay que tener instalados Python, yt-dlp y FFmpeg.

Para instalar o actualizar yt-dlp:

python -m pip install -U yt-dlp

No es nada del otro mundo, pero para quien utilice el script con frecuencia creo que resulta bastante más cómodo así.


Insertar CODE, HTML o PHP:
from pathlib import Path
import re
import yt_dlp


# ==========================================================
# CONFIGURACIÓN
# ==========================================================

CALIDAD_MP3 = "192"

# Los archivos se guardarán en una carpeta llamada "MP3"
# situada junto a este script.
CARPETA_DESCARGAS = Path(__file__).resolve().parent / "MP3"


def limpiar_nombre(nombre):
    """
    Elimina caracteres que pueden dar problemas al crear
    archivos en Windows.
    """
    nombre = nombre.strip()

    # Caracteres no permitidos en nombres de archivo de Windows
    nombre = re.sub(r'[<>:"/\\|?*]', "", nombre)

    # Windows tampoco acepta bien espacios o puntos al final
    return nombre.rstrip(" .")


def es_url_youtube(url):
    """
    Comprueba de forma sencilla si parece una URL de YouTube.
    """
    url = url.lower().strip()

    return (
        "youtube.com/" in url
        or "youtu.be/" in url
        or "music.youtube.com/" in url
    )


def descargar_mp3(url, nombre):
    """
    Descarga el mejor audio disponible y lo convierte a MP3.
    """

    # Crear automáticamente la carpeta si no existe
    CARPETA_DESCARGAS.mkdir(parents=True, exist_ok=True)

    nombre = limpiar_nombre(nombre)

    if not nombre:
        print("\n❌ El nombre del archivo no es válido.")
        return

    plantilla_salida = CARPETA_DESCARGAS / f"{nombre}.%(ext)s"

    opciones = {
        # Mejor audio disponible
        "format": "bestaudio/best",

        # Evitar descargar una playlist completa accidentalmente
        "noplaylist": True,

        # Ruta y nombre del archivo
        "outtmpl": str(plantilla_salida),

        # Convertir a MP3 mediante FFmpeg
        "postprocessors": [
            {
                "key": "FFmpegExtractAudio",
                "preferredcodec": "mp3",
                "preferredquality": CALIDAD_MP3,
            }
        ],
    }

    print("\n" + "=" * 55)
    print("               YOUTUBE → MP3")
    print("=" * 55)

    print(f"\n🎵 Archivo: {nombre}.mp3")
    print(f"🎧 Calidad: {CALIDAD_MP3} kbps")
    print(f"📁 Carpeta: {CARPETA_DESCARGAS}")

    print("\n⏳ Descargando y convirtiendo...\n")

    try:
        with yt_dlp.YoutubeDL(opciones) as ydl:
            ydl.download([url])

        archivo_final = CARPETA_DESCARGAS / f"{nombre}.mp3"

        print("\n" + "=" * 55)
        print("✅ DESCARGA COMPLETADA")
        print("=" * 55)
        print(f"\nArchivo guardado en:\n{archivo_final}\n")

    except yt_dlp.utils.DownloadError as error:
        print("\n❌ No se pudo descargar el vídeo.")
        print(f"Detalle: {error}")

    except Exception as error:
        print("\n❌ Ha ocurrido un error inesperado.")
        print(f"Detalle: {error}")


def main():

    print("\n" + "=" * 55)
    print("               YOUTUBE → MP3")
    print("=" * 55)

    # Ya no hay que modificar el código.
    # El programa pregunta la URL al ejecutarse.
    url = input("\n🔗 Pega la URL del vídeo: ").strip()

    if not es_url_youtube(url):
        print("\n❌ La URL introducida no parece ser de YouTube.")
        return

    # También pregunta el nombre que queremos utilizar.
    nombre = input("📝 Nombre del archivo: ").strip()

    if not nombre:
        print("\n❌ Debes introducir un nombre para el archivo.")
        return

    descargar_mp3(url, nombre)


if __name__ == "__main__":
    main()


Necesita, como el original, yt-dlp y FFmpeg instalados.
Para instalar/actualizar yt-dlp:
Insertar CODE, HTML o PHP:
python -m pip install -U yt-dlp

Y se ejecuta con:
Insertar CODE, HTML o PHP:
python descargar.py
 
Última edición:
Yo uso esta herramienta para pasar de videos a mp3 y no tiene nada de publicidad, uso como navegador Brave

El problema de ese tipo de páginas es que dependes completamente de un servicio externo.
Y2Mate, además, está bloqueado en bastantes lugares y, dependiendo del país o del proveedor, puede ser necesario recurrir a una VPN para acceder.
Con VPN, además, la velocidad de descarga puede empeorar bastante.
El script con yt-dlp + FFmpeg no tiene esa dependencia de una página concreta, ni publicidad, redirecciones o dominios alternativos que buscar.
Se ejecuta directamente en el equipo y yt-dlp se puede mantener actualizado.
Evidentemente una web tiene la ventaja de no tener que instalar nada, pero una vez configurado Python + yt-dlp + FFmpeg, no parece una solución mejor que el script simplemente es otra opción que puede resultar más inmediata para un uso puntual.
 
Atrás
Arriba