¿Te gustaría descargar videos de YouTube con una herramienta creada por ti? En este tutorial, te guiaré paso a paso para hacerlo en Python y Node.js. Además de entender cómo funciona, te animaré a personalizar y mejorar tu herramienta. ¡Vamos allá! 🚀
Nota: La calidad de los vídeos puede que no sea la mas alta debido a que los videos de mayor calidad youtube los separa en audio y video para ahorrar ancho de banda, al final del articulo se explicara un metodo para que los videos se puedan descargar con mayor calidad fusionando los dos flujos(audio y video). No nos hacemos responsables del uso que el lector le pueda dar al código, el lector es responsable del uso que le de al codigo
Parte 1: Construyendo el descargador en Python
1. Instalando yt_dlp
La biblioteca yt_dlp
es una herramienta versátil para descargar contenido multimedia. Para usarla, primero debes instalarla:
pip install yt-dlp
2. Paso a paso del código
Ahora, desglosaremos el script.
Importar la biblioteca:
import yt_dlp
Esto trae toda la funcionalidad de yt_dlp
a tu script.
Definir la función de descarga:
Creamos una función para manejar la lógica:
def download_video(url): ydl_opts = { ... }
Aquí pasamos las configuraciones necesarias para la descarga.
Configurar opciones para yt_dlp
:
ydl_opts = {
'format': 'best', # Descarga la mejor calidad disponible.
'merge_output_format': 'mp4', # Combina el video y audio en un archivo MP4.
'outtmpl': '%(title)s.%(ext)s', # Usa el título del video como nombre de archivo.
'http_headers': { # Agrega un encabezado para evitar bloqueos.
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
}
}
Estas configuraciones le dicen a yt_dlp
cómo manejar la descarga.
Usar el descargador:
with yt_dlp.YoutubeDL(ydl_opts) as ydl: ydl.download([url])
Aquí se llama al descargador con las opciones configuradas y la URL proporcionada.
Manejar errores:
Agregamos un bloque try-except
para capturar problemas:
try: ... except Exception as e: print(f"Error al descargar el video: {e}")
Pedir la URL al usuario:
if __name__ == "__main__": url = input("Introduce la URL del video de YouTube: ") download_video(url)
Esto permite que el usuario ingrese la URL directamente desde la terminal.
Código completo en Python:
import yt_dlp
def download_video(url):
ydl_opts = {
'format': 'best',
'merge_output_format': 'mp4',
'outtmpl': '%(title)s.%(ext)s',
'http_headers': {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)...'
}
}
try:
with yt_dlp.YoutubeDL(ydl_opts) as ydl:
ydl.download([url])
print("🎉 Video descargado con éxito.")
except Exception as e:
print(f"❌ Error al descargar el video: {e}")
if __name__ == "__main__":
url = input("Introduce la URL del video de YouTube: ")
download_video(url)
Parte 2: Construyendo el descargador en Node.js
1. Configura tu proyecto
Crea un directorio para tu proyecto y configura Node.js
:
mkdir youtube-downloader
cd youtube-downloader
npm init -y
npm install ytdl-core
2. Paso a paso del código
Importar módulos:
import fs from 'fs'; // Maneja el sistema de archivos. import ytdl from 'ytdl-core'; // Biblioteca para descargar videos.
Definir la función de descarga:
async function downloadVideo(url) { const output = 'video.mp4'; // Nombre del archivo descargado.
Configurar y manejar el flujo de datos:
const videoStream = ytdl(url, { quality: 'highestvideo' }); videoStream.pipe(fs.createWriteStream(output));
Esto descarga el video y lo guarda como video.mp4
.
Manejar eventos de finalización y errores:
videoStream.on('end', () => { console.log("🎉 Video descargado con éxito."); }); videoStream.on('error', (err) => { console.error(`❌ Error al descargar el video: ${err}`); });
Capturar la URL desde la terminal:
if (process.argv.length < 3) { console.log("❗ Proporciona la URL del video."); console.log("Uso: node index.js <URL>"); process.exit(1); } const url = process.argv[2]; downloadVideo(url);
Código completo en Node.js:
import fs from 'fs';
import ytdl from 'ytdl-core';
async function downloadVideo(url) {
const output = 'video.mp4';
try {
console.log("⏳ Descargando video...");
const videoStream = ytdl(url, { quality: 'highestvideo' });
videoStream.pipe(fs.createWriteStream(output));
videoStream.on('end', () => {
console.log("🎉 Video descargado con éxito.");
});
videoStream.on('error', (err) => {
console.error(`❌ Error al descargar el video: ${err}`);
});
} catch (error) {
console.error(`❌ Algo salió mal: ${error}`);
}
}
if (process.argv.length < 3) {
console.log("❗ Por favor, proporciona la URL del video.");
console.log("Uso: node index.js <URL>");
process.exit(1);
}
const url = process.argv[2];
downloadVideo(url);
Limitaciones y mejoras
El script de Node.js utiliza la opción highestvideo
de ytdl-core
, pero es posible que no descargue la calidad máxima debido a cómo YouTube separa los videos de alta calidad (por ejemplo, 4K o 1080p) en flujos de video y audio separados, igual va para el script de python descargara en la maxima calidad que no tenga el audio separado.
Soluciones para descargar con mejor calidad:
- Combinar audio y video: Usa herramientas como
FFmpeg
para unir los flujos en ambos scripts. - Usar bibliotecas avanzadas: Integra herramientas como
yt-dlp
en Node.js utilizando módulos comochild_process
para ejecutar scripts de Python desde Node.js.
Conclusión y reto para el lector
¡Felicidades! Ahora tienes dos herramientas para descargar videos de YouTube: una en Python y otra en Node.js.
Pero esto no termina aquí. Te reto a:
- Crear una interfaz web para el descargador.
- Agregar opciones para elegir la calidad del video.
- Permitir descargas masivas con una lista de URLs.
¿Listo para mejorar? ¡Pon manos a la obra y comparte tu experiencia en la caja de comentarios! 🚀
Hola 👋 Soy Jawuil, un programador backend apasionado por la tecnología y el desarrollo de software. Me dedico a crear soluciones eficientes y escalables, siempre buscando mejorar y optimizar los sistemas que trabajo.
Además de mi carrera en programación, tengo una gran afición por la música. Aunque soy un músico amateur, disfruto explorando diferentes instrumentos y géneros, lo que me permite relajarme y expresar mi creatividad.
fanático del anime y las películas, me gusta mantener un equilibrio saludable entre el trabajo y el ocio .
Estoy siempre abierto a nuevas oportunidades y colaboraciones que me permitan crecer tanto profesional como personalmente.