Diferencia entre revisiones de «Youtube Bajar Videos»

De FSF
Sin resumen de edición
 
(No se muestran 16 ediciones intermedias del mismo usuario)
Línea 1: Línea 1:
__toc__{{cen1|Bajar videos de '''YOUTUBE'''}}
__toc__
{{cen1|Bajar videos de '''YOUTUBE'''}}
----
----
[[File:Youtube estructura resultante.jpg|thumb|right|570px]]
[[File:Youtube estructura resultante.jpg|thumb|right|570px|Estructura general de carpetas, programas, listas y archivos descargados.]]
 
{{Chat|20260616}}
 
{| class="wikitable" style="width:57%; border:2px solid #B71C1C; margin:12px 0;"
! style="background:#B71C1C; color:white; padding:9px;" | Aviso de uso responsable
|-
| style="background:#FFF8F8; padding:12px;" |
Esta herramienta debe utilizarse para descargar material propio, videos con autorización, obras de dominio público, recursos con licencias que permitan su conservación o contenidos cuya descarga sea legítima dentro del contexto del usuario. La posibilidad técnica de descargar un archivo no elimina los derechos de autor, las condiciones de uso de la plataforma ni la responsabilidad personal sobre su utilización.
|}
 
== Introducción ==
 
'''yt-dlp''' es una herramienta de línea de comandos capaz de descargar videos, audios, listas de reproducción y colecciones completas de numerosos sitios compatibles, entre ellos YouTube.
 
A diferencia de una aplicación gráfica convencional, yt-dlp puede integrarse dentro de un archivo por lotes de Windows —un archivo con extensión <code>.bat</code>— para automatizar procesos repetitivos.
 
Este sistema permite:
 
:* Descargar videos individuales.
:* Descargar listas completas de reproducción.
:* Revisar periódicamente canales o playlists.
:* Evitar descargas repetidas mediante un historial.
:* Limitar la resolución para ahorrar espacio.
:* Organizar los nombres usando fecha, título, canal e identificador.
:* Unir automáticamente las pistas separadas de imagen y sonido.
:* Registrar fechas de ejecución y posibles errores.
:* Programar las descargas para ejecutarse sin intervención manual.
<small>
{| class="wikitable" style="width:57%; border:2px solid #00527A;"
! style="background:#00527A; color:white;" | Componente
! style="background:#00527A; color:white;" | Función
|-
| '''yt-dlp.exe'''
| Analiza las direcciones, identifica los formatos disponibles y realiza las descargas.
|-
| '''ffmpeg.exe'''
| Une video y audio cuando YouTube los entrega como pistas separadas.
|-
| '''ffprobe.exe'''
| Examina las características técnicas de los archivos multimedia.
|-
| '''deno.exe'''
| Proporciona un entorno JavaScript que ayuda a interpretar mecanismos modernos de YouTube.
|-
| '''videos.txt'''
| Contiene las direcciones que se desean procesar.
|-
| '''videos_descargados.txt'''
| Conserva el historial de identificadores ya descargados.
|-
| '''descargar_youtube.bat'''
| Reúne las instrucciones y automatiza todo el proceso.
|-
| '''registro_descargas.txt'''
| Registra fechas, resultados y posibles fallos del sistema.
|}
</small>
== Uso ==
 
: '''Perfecto. Asumiendo que el archivo se llama:'''
:* E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe
 
: '''Puedes guardar este script como:'''
:* E:\00_APP\00_YOUTUBE_Videos\descargar_youtube.bat
 
----
 
Para ejecutar manualmente el sistema desde la consola de Windows:
 
<pre>
cd E:\00_APP\00_YOUTUBE_Videos
E:
descargar_youtube
</pre>
 
También es posible abrir la carpeta:
 
<pre>
E:\00_APP\00_YOUTUBE_Videos
</pre>
 
y hacer doble clic sobre:
 
<pre>
descargar_youtube.bat
</pre>
 
=== Estructura recomendada ===
 
<pre>
E:\00_APP\00_YOUTUBE_Videos\
├── descargar_youtube.bat
├── videos.txt
├── videos_descargados.txt
├── registro_descargas.txt
├── yt-dlp\
│  ├── yt-dlp.exe
│  ├── ffmpeg.exe
│  ├── ffprobe.exe
│  └── deno.exe
└── Videos_Descargados\
    ├── 20231029 - City - Orbital [MkdWdBg-0kA].mp4
    ├── 20150925 - Nombre_del_video - EstrellaTV [ID].mp4
    └── Otros archivos descargados...
</pre>
 
{| class="wikitable" style="width:100%; border:2px solid #2E7D32;"
! style="background:#2E7D32; color:white;" | Ventaja
! style="background:#2E7D32; color:white;" | Explicación
|-
| Una sola carpeta
| Todos los videos pueden quedar directamente dentro de <code>Videos_Descargados</code>, sin carpetas repetidas por canal.
|-
| Nombre identificable
| Cada archivo conserva fecha, título, canal y clave de YouTube.
|-
| Historial
| El sistema recuerda qué videos ya fueron procesados.
|-
| Automatización
| Puede ejecutarse todos los días o durante la madrugada.
|-
| Bajo consumo
| La versión de 360p resulta útil para conservar muchos videos sin ocupar tanto espacio.
|}
 
== Fuente 20260615 ==
 
:* https://github.com/yt-dlp/yt-dlp/releases/tag/2026.06.09
:* https://sourceforge.net/projects/yt-dlp.mirror/files/latest/download
:* https://github.com/yt-dlp/yt-dlp
:* https://github.com/yt-dlp/yt-dlp/wiki/FAQ
:* https://github.com/yt-dlp/yt-dlp/wiki/EJS
:* https://ffmpeg.org/download.html
:* https://www.gyan.dev/ffmpeg/builds/
:* https://deno.com/
 
{{Chat|20260616}}
 
== Script ==
== Script ==
El siguiente bloque corresponde a la base conservada para el sistema de descarga.
----
<small><small>
<pre>
@echo off
setlocal EnableExtensions
rem ============================================================
rem DESCARGADOR AUTOMATICO DE VIDEOS DE YOUTUBE
rem ============================================================
rem
rem Todos los videos se guardan directamente en:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Nombre del archivo:
rem FECHA - TITULO - CANAL [ID].mp4
rem ============================================================
rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"
set "FFMPEG=%BASE%\yt-dlp"
set "DESTINO=%BASE%\Videos_Descargados"
set "LISTA=%BASE%\videos.txt"
set "HISTORIAL=%BASE%\videos_descargados.txt"
set "LOG=%BASE%\registro_descargas.txt"
rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================
if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)
rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================
if not exist "%YTDLP%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)
</pre>
----
----
</small></small>
== Tipos de descargas ==
: {{a3|Sí, puedes descargar listas completas de reproducción.}}
:* Tu archivo:
::<code>E:\00_APP\00_YOUTUBE_Videos\videos.txt</code>
:* Puede contener cualquiera de estos tipos de enlaces:
::<pre>
https://www.youtube.com/watch?v=ID_DEL_VIDEO
https://www.youtube.com/playlist?list=ID_DE_LA_LISTA
https://www.youtube.com/@NombreDelCanal/videos
</pre>
=== Video individual ===
<pre>
https://www.youtube.com/watch?v=ID_DEL_VIDEO
</pre>
Descarga solamente el video señalado.
=== Lista completa de reproducción ===
<pre>
https://www.youtube.com/playlist?list=ID_DE_LA_LISTA
</pre>
yt-dlp abre la lista, examina sus elementos y procesa cada video disponible.
=== Canal completo ===
<pre>
https://www.youtube.com/@NombreDelCanal/videos
</pre>
Puede revisar todos los videos públicos del canal. Esta operación puede implicar cientos o miles de elementos, por lo que conviene utilizar pausas entre solicitudes y vigilar el espacio disponible.
=== Mezclar varios tipos de direcciones ===
El archivo <code>videos.txt</code> puede contener diferentes clases de enlaces:
<pre>
https://www.youtube.com/watch?v=VIDEO_1
https://www.youtube.com/playlist?list=LISTA_1
https://www.youtube.com/@CanalEjemplo/videos
https://www.youtube.com/watch?v=VIDEO_2
</pre>
Cada dirección debe colocarse en un renglón independiente.
{| class="wikitable" style="width:100%; border:2px solid #6A1B9A;"
! style="background:#6A1B9A; color:white;" | Dirección
! style="background:#6A1B9A; color:white;" | Resultado esperado
! style="background:#6A1B9A; color:white;" | Precaución
|-
| Video individual
| Un solo archivo.
| Es la opción más rápida para pruebas.
|-
| Playlist
| Todos los elementos disponibles.
| Puede contener videos eliminados, privados o bloqueados.
|-
| Canal
| Revisión de la colección pública completa.
| Puede generar muchas solicitudes y activar controles de YouTube.
|-
| Varias URL
| Procesamiento secuencial.
| Conviene revisar que no existan enlaces duplicados.
|}
== Historial y prevención de duplicados ==
La opción:
<pre>
--download-archive "%HISTORIAL%"
</pre>
hace que yt-dlp registre cada video completado dentro de:
<pre>
E:\00_APP\00_YOUTUBE_Videos\videos_descargados.txt
</pre>
El archivo suele guardar entradas semejantes a:
<pre>
youtube LkdWdBg-0kA
</pre>
La próxima vez que la misma dirección aparezca dentro de una lista o canal, yt-dlp reconoce el identificador y omite la descarga.
{{oro|Esto convierte al archivo de historial en una memoria técnica del sistema: no registra solamente nombres, sino las claves únicas de cada video.}}
=== Cuándo editar el historial ===
Puede ser necesario retirar una línea del historial cuando:
:* La descarga quedó incompleta.
:* Se descargó únicamente el audio o el video por falta de FFmpeg.
:* Se desea bajar nuevamente el material en otra resolución.
:* El archivo fue eliminado accidentalmente.
:* Se desea crear una copia renovada.
No conviene borrar todo el historial sin necesidad, porque yt-dlp podría intentar descargar nuevamente colecciones completas.
== Maximo 360p ==
:* {{a3|Versión del programa para bajar videos de poca resolución y tamaño.}}
:* {{oro|Ayuda a tener un registro educativo y de recuerdos de poco espacio en tu PC; o para cuando el internet falla.}}
:* {{oro|Es una manera de guardar conocimiento valioso o programar tu aprendizaje así como para tener o conservar recuerdos de video retros.}}
La resolución de 360p resulta especialmente útil cuando el valor central se encuentra en:
:* La voz del expositor.
:* Una clase o conferencia.
:* Una receta.
:* Un documental principalmente narrativo.
:* Una transmisión antigua.
:* Un recuerdo familiar.
:* Un programa de televisión retro.
:* Material que será consultado en una pantalla pequeña.
:* Contenido donde la imagen no necesita gran detalle.
{| class="wikitable" style="width:100%; border:2px solid #EF6C00;"
! style="background:#EF6C00; color:white;" | Resolución
! style="background:#EF6C00; color:white;" | Uso sugerido
! style="background:#EF6C00; color:white;" | Espacio relativo
|-
| 144p
| Referencia mínima, voz o archivo de emergencia.
| Muy bajo.
|-
| 240p
| Grabaciones antiguas o material principalmente auditivo.
| Bajo.
|-
| '''360p'''
| Biblioteca de estudio, recuerdos, recetas y videos largos.
| Moderado.
|-
| 480p
| Textos en pantalla y demostraciones con detalles medios.
| Medio.
|-
| 720p
| Visualización más cómoda, diagramas y material con detalles.
| Alto.
|-
| 1080p o superior
| Archivo visual de alta calidad.
| Muy alto.
|}
<small><small>
<pre>
<pre>
@echo off
@echo off
setlocal
setlocal EnableExtensions
 
rem ============================================================
rem DESCARGADOR AUTOMATICO DE VIDEOS DE YOUTUBE
rem ============================================================
rem
rem Todos los videos se guardan directamente en:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Resolucion preferida:
rem Hasta 360p
rem
rem Nombre del archivo:
rem FECHA - TITULO - CANAL [ID].mp4
rem ============================================================
 


rem ============================================================
rem ============================================================
rem DESCARGA PROGRAMADA DE VIDEOS DE YOUTUBE
rem RUTAS PRINCIPALES
rem ============================================================
rem ============================================================


rem Ruta del programa yt-dlp
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "YTDLP=E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe"
 
set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"


rem Carpeta donde se guardarán los videos descargados
set "FFMPEG=%BASE%\yt-dlp"
set "DESTINO=E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados"


rem Archivo que contiene las URLs
set "DESTINO=%BASE%\Videos_Descargados"
set "LISTA=E:\00_APP\00_YOUTUBE_Videos\videos.txt"


rem Archivo que registra los videos ya descargados
set "LISTA=%BASE%\videos.txt"
set "HISTORIAL=E:\00_APP\00_YOUTUBE_Videos\videos_descargados.txt"


rem Crear la carpeta de destino si todavía no existe
set "HISTORIAL=%BASE%\videos_descargados.txt"
if not exist "%DESTINO%" mkdir "%DESTINO%"
 
set "LOG=%BASE%\registro_descargas.txt"
 
 
rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================
 
if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)
 
 
rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================


rem Verificar que exista yt-dlp
if not exist "%YTDLP%" (
if not exist "%YTDLP%" (
     echo.
     echo.
     echo ERROR: No se encontro yt-dlp.exe en:
    echo ============================================================
     echo %YTDLP%
     echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================
 
if not exist "%FFMPEG%\ffmpeg.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFMPEG
    echo ============================================================
    echo.
     echo Archivo esperado:
    echo "%FFMPEG%\ffmpeg.exe"
     echo.
     echo.
     pause
     pause
Línea 37: Línea 456:
)
)


rem Verificar que exista la lista de URLs
if not exist "%FFMPEG%\ffprobe.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFPROBE
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffprobe.exe"
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem VERIFICAR LISTA DE URL
rem ============================================================
 
if not exist "%LISTA%" (
if not exist "%LISTA%" (
     echo.
     echo.
     echo ERROR: No se encontro el archivo:
    echo ============================================================
     echo %LISTA%
     echo ERROR: NO SE ENCONTRO LA LISTA DE VIDEOS
    echo ============================================================
    echo.
    echo Archivo esperado:
     echo "%LISTA%"
     echo.
     echo.
     echo Crea videos.txt y coloca una URL por renglon.
     echo Crea videos.txt y coloca una URL por renglon.
Línea 49: Línea 489:
)
)


echo.
 
rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================
 
cls
 
echo ============================================================
echo ============================================================
echo INICIANDO DESCARGAS DE YOUTUBE
echo         DESCARGADOR AUTOMATICO DE YOUTUBE
echo ============================================================
echo ============================================================
echo Programa: %YTDLP%
echo.
echo Destino: %DESTINO%
echo Programa:   %YTDLP%
echo Lista:   %LISTA%
echo FFmpeg:    %FFMPEG%
echo Destino:   %DESTINO%
echo Lista:     %LISTA%
echo Historial:  %HISTORIAL%
echo Resolucion: Hasta 360p
echo.
echo.
echo Fecha: %date%
echo Fecha: %date%
echo Hora:  %time%
echo Hora:  %time%
echo.
echo ============================================================
echo.
rem ============================================================
rem REGISTRAR INICIO
rem ============================================================
echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo RESOLUCION: Hasta 360p>>"%LOG%"
echo ============================================================>>"%LOG%"
rem ============================================================
rem DESCARGAR VIDEOS
rem ============================================================
rem
rem Resolucion maxima preferida: 360p
rem Sin subcarpetas por canal
rem Nombre:
rem FECHA - TITULO - CANAL [ID].EXTENSION
rem ============================================================
"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--continue ^
--ignore-errors ^
--no-overwrites ^
--windows-filenames ^
--restrict-filenames ^
--merge-output-format mp4 ^
--format "bv*[height<=360]+ba/b[height<=360]" ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s].%%(ext)s" ^
--newline
rem ============================================================
rem GUARDAR RESULTADO
rem ============================================================
set "RESULTADO=%ERRORLEVEL%"
echo.
echo ============================================================
if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo EL PROCESO TERMINO CON UNO O MAS ERRORES
    echo Codigo de salida: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)
echo.
echo Fecha final: %date%
echo Hora final:  %time%
echo ============================================================
echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"
echo.
pause
endlocal
</pre>
</small></small>
----
== Cómo interpreta la resolución ==
La expresión:
<pre>
--format "bv*[height<=360]+ba/b[height<=360]"
</pre>
significa:
:* <code>bv*</code>: seleccionar la mejor pista de video disponible.
:* <code>[height<=360]</code>: no superar 360 píxeles de altura.
:* <code>+ba</code>: agregar la mejor pista de audio.
:* <code>/b[height<=360]</code>: si no existen pistas separadas apropiadas, intentar un formato combinado de hasta 360p.
Si el video ofrece:
<pre>
144p
240p
360p
480p
720p
</pre>
el sistema elegirá normalmente 360p.
Si no existe 360p, elegirá la mejor opción inferior disponible.
== FFmpeg: unión de video y audio ==
YouTube suele almacenar por separado:
:* La imagen.
:* El sonido.
Por eso yt-dlp puede descargar inicialmente dos archivos:
<pre>
Nombre_del_video.f398.mp4
Nombre_del_video.f251.webm
</pre>
En este ejemplo:
:* <code>f398.mp4</code> puede contener únicamente la imagen.
:* <code>f251.webm</code> puede contener únicamente el sonido.
FFmpeg los fusiona en:
<pre>
Nombre_del_video.mp4
</pre>
La línea:
<pre>
--ffmpeg-location "%FFMPEG%"
</pre>
indica expresamente dónde se encuentran:
<pre>
E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffmpeg.exe
E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffprobe.exe
</pre>
=== Comprobación de FFmpeg ===
<pre>
"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffmpeg.exe" -version
</pre>
Si aparece la información de versión, FFmpeg está disponible.
{| class="wikitable" style="width:100%; border:2px solid #C62828;"
! style="background:#C62828; color:white;" | Mensaje
! style="background:#C62828; color:white;" | Significado
! style="background:#C62828; color:white;" | Solución
|-
| <code>ffmpeg is not installed</code>
| yt-dlp no puede unir las pistas.
| Instalar FFmpeg o corregir su ruta.
|-
| Archivos <code>.f398</code> y <code>.f251</code>
| La imagen y el audio quedaron separados.
| Instalar FFmpeg y volver a procesar o unir manualmente.
|-
| Un solo MP4 con audio
| La fusión se completó correctamente.
| No requiere corrección.
|}
== Cookies ==
Las cookies permiten que yt-dlp utilice una sesión de navegador ya autenticada.
Esto puede ser necesario cuando YouTube muestra:
<pre>
Sign in to confirm you’re not a bot
</pre>
Prueba de autenticación desde Chrome:
<pre>
"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" ^
-vU ^
--cookies-from-browser chrome ^
--js-runtimes "deno:E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe" ^
--simulate ^
"https://www.youtube.com/watch?v=dqgMNHYk1Gk"
</pre>
La opción:
<pre>
--simulate
</pre>
hace una prueba sin descargar el video completo.
La opción:
<pre>
-vU
</pre>
activa información detallada y comprueba actualizaciones.
=== Perfil específico de Chrome ===
Chrome puede tener varios perfiles:
<pre>
Default
Profile 1
Profile 2
</pre>
Para conocer la ruta del perfil activo, abrir en Chrome:
<pre>
chrome://version
</pre>
Buscar:
<pre>
Ruta del perfil
</pre>
Ejemplo:
<pre>
C:\Users\USUARIO\AppData\Local\Google\Chrome\User Data\Profile 1
</pre>
Después se puede utilizar:
<pre>
--cookies-from-browser "chrome:Profile 1"
</pre>
=== Archivo de cookies ===
También es posible trabajar con un archivo:
<pre>
E:\00_APP\00_YOUTUBE_Videos\youtube_cookies.txt
</pre>
y llamarlo desde el script:
<pre>
--cookies "%BASE%\youtube_cookies.txt" ^
</pre>
{| class="wikitable" style="width:100%; border:2px solid #AD1457;"
! style="background:#AD1457; color:white;" | Precaución de seguridad
|-
| style="background:#FFF4F8; padding:12px;" |
Un archivo de cookies puede contener datos de sesión activos. No debe publicarse, adjuntarse a WikiFSF, compartirse por mensajería ni almacenarse en una carpeta pública. Debe tratarse como una credencial privada.
|}
== Deno y JavaScript ==
El aviso:
<pre>
No supported JavaScript runtime could be found
</pre>
indica que yt-dlp no encontró un entorno JavaScript compatible.
La ruta utilizada es:
<pre>
E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe
</pre>
Comprobación:
<pre>
"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe" --version
</pre>
Uso dentro del script:
<pre>
--js-runtimes "deno:%DENO%" ^
</pre>
Deno no descarga el video por sí mismo. Su función es ayudar a yt-dlp a interpretar procesos modernos de extracción utilizados por YouTube.
== Error: confirmar que no eres un robot ==
Mensaje habitual:
<pre>
ERROR: [youtube] Sign in to confirm you’re not a bot.
Use --cookies-from-browser or --cookies for the authentication.
</pre>
Posibles causas:
:* Muchas solicitudes consecutivas.
:* Una lista con cientos de videos.
:* Cookies ausentes.
:* Perfil incorrecto del navegador.
:* Sesión de YouTube no iniciada.
:* Restricción temporal de la dirección IP.
:* Falta de entorno JavaScript.
:* Cookies caducadas.
:* Ejecución demasiado rápida.
Posibles soluciones:
:# Detener temporalmente el proceso.
:# Confirmar que YouTube abre normalmente en el navegador.
:# Iniciar sesión en la cuenta correcta.
:# Identificar el perfil correcto de Chrome.
:# Usar cookies del navegador o un archivo de cookies.
:# Añadir Deno.
:# Reducir la velocidad de las solicitudes.
:# Probar primero con un solo video.
:# Esperar varias horas si existe una limitación temporal.
:# Reiniciar el módem solamente si se comprende el funcionamiento de la conexión y el proveedor entrega IP dinámica.
=== Pausas recomendadas ===
<pre>
--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^
</pre>
Estas líneas hacen que yt-dlp espere entre solicitudes.
{| class="wikitable" style="width:100%; border:2px solid #37474F;"
! style="background:#37474F; color:white;" | Parámetro
! style="background:#37474F; color:white;" | Función
|-
| <code>--sleep-requests 3</code>
| Espera tres segundos entre determinadas solicitudes de extracción.
|-
| <code>--sleep-interval 5</code>
| Espera como mínimo cinco segundos entre descargas.
|-
| <code>--max-sleep-interval 12</code>
| Permite una espera variable de hasta doce segundos.
|-
| <code>--retries 10</code>
| Reintenta una operación hasta diez veces.
|-
| <code>--fragment-retries 10</code>
| Reintenta fragmentos individuales del video.
|}
{{oro|Las pausas hacen el proceso más lento, pero también más estable y menos agresivo frente al servidor.}}
== Script ampliado con cookies, Deno y pausas ==
El siguiente bloque conserva el enfoque de 360p, una sola carpeta y nombres completos, pero añade autenticación, JavaScript y pausas.
<small><small>
<pre>
@echo off
setlocal EnableExtensions
rem ============================================================
rem DESCARGADOR AUTOMATICO DE YOUTUBE - 360p
rem ============================================================
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"
set "FFMPEG=%BASE%\yt-dlp"
set "DENO=%BASE%\yt-dlp\deno.exe"
set "DESTINO=%BASE%\Videos_Descargados"
set "LISTA=%BASE%\videos.txt"
set "HISTORIAL=%BASE%\videos_descargados.txt"
set "LOG=%BASE%\registro_descargas.txt"
if not exist "%DESTINO%" mkdir "%DESTINO%"
if not exist "%YTDLP%" (
    echo ERROR: No se encontro "%YTDLP%"
    pause
    exit /b 1
)
if not exist "%FFMPEG%\ffmpeg.exe" (
    echo ERROR: No se encontro "%FFMPEG%\ffmpeg.exe"
    pause
    exit /b 1
)
if not exist "%FFMPEG%\ffprobe.exe" (
    echo ERROR: No se encontro "%FFMPEG%\ffprobe.exe"
    pause
    exit /b 1
)
if not exist "%DENO%" (
    echo ERROR: No se encontro "%DENO%"
    pause
    exit /b 1
)
if not exist "%LISTA%" (
    echo ERROR: No se encontro "%LISTA%"
    pause
    exit /b 1
)
cls
echo ============================================================
echo        DESCARGADOR AUTOMATICO DE YOUTUBE
echo ============================================================
echo.
echo Resolucion: Hasta 360p
echo Cookies:    Google Chrome
echo JavaScript: Deno
echo Destino:    %DESTINO%
echo Lista:      %LISTA%
echo.
echo ============================================================
echo ============================================================
echo.
echo.
echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"


"%YTDLP%" ^
"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--js-runtimes "deno:%DENO%" ^
--cookies-from-browser chrome ^
--batch-file "%LISTA%" ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--download-archive "%HISTORIAL%" ^
Línea 71: Línea 952:
--restrict-filenames ^
--restrict-filenames ^
--merge-output-format mp4 ^
--merge-output-format mp4 ^
--format "bv*[height<=720]+ba/b[height<=720]" ^
--format "bv*[height<=360]+ba/b[height<=360]" ^
--output "%DESTINO%\%%(uploader)s\%%(playlist_title,channel)s\%%(upload_date)s - %%(title)s [%%(id)s].%%(ext)s"
--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^
--retries 10 ^
--fragment-retries 10 ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s].%%(ext)s" ^
--newline
 
set "RESULTADO=%ERRORLEVEL%"


echo.
echo.
echo ============================================================
echo ============================================================
echo PROCESO TERMINADO
 
if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo PROCESO TERMINADO CON ERRORES
    echo Codigo: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)
 
echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"
 
echo.
pause
endlocal
</pre>
</small></small>
 
== Programación automática en Windows ==
 
El '''Programador de tareas de Windows''' permite ejecutar el archivo sin necesidad de recordar manualmente cuándo hacerlo.
 
=== Abrir el Programador de tareas ===
 
:# Presionar <code>Windows + R</code>.
:# Escribir:
::<pre>
taskschd.msc
</pre>
:# Presionar <code>Enter</code>.
:# Elegir '''Crear tarea básica'''.
 
=== Configuración sugerida ===
 
{| class="wikitable" style="width:100%; border:2px solid #1565C0;"
! style="background:#1565C0; color:white;" | Campo
! style="background:#1565C0; color:white;" | Valor sugerido
|-
| Nombre
| Descargar videos de YouTube
|-
| Desencadenador
| Diario, semanal o al iniciar sesión
|-
| Hora
| Madrugada o periodo de poco uso
|-
| Acción
| Iniciar un programa
|-
| Programa
| <code>E:\00_APP\00_YOUTUBE_Videos\descargar_youtube.bat</code>
|-
| Iniciar en
| <code>E:\00_APP\00_YOUTUBE_Videos</code>
|}
 
=== Frecuencias posibles ===
 
:* Cada noche.
:* Una vez por semana.
:* Los domingos.
:* Al iniciar la computadora.
:* Al iniciar sesión.
:* Cuando el equipo esté inactivo.
:* En horarios donde la conexión no sea utilizada por otras personas.
 
=== Adaptación para ejecución automática ===
 
El comando:
 
<pre>
pause
</pre>
 
mantiene abierta la ventana al terminar.
 
Esto es útil durante pruebas, porque permite leer errores. Sin embargo, en una tarea automática puede dejar una ventana esperando indefinidamente.
 
Para la versión programada, puede cambiarse por:
 
<pre>
rem pause
</pre>
 
o eliminarse.
 
{{oro|Conviene conservar dos archivos: uno de prueba con <code>pause</code> y otro automático sin <code>pause</code>.}}
 
== Flujo de trabajo recomendado ==
 
{| class="wikitable" style="width:100%; border:2px solid #00838F;"
! style="background:#00838F; color:white;" | Paso
! style="background:#00838F; color:white;" | Acción
! style="background:#00838F; color:white;" | Resultado
|-
| 1
| Localizar el video, playlist o canal.
| Se obtiene una URL.
|-
| 2
| Pegar la URL en <code>videos.txt</code>.
| Queda registrada en la cola.
|-
| 3
| Ejecutar <code>descargar_youtube.bat</code>.
| yt-dlp examina la lista.
|-
| 4
| Consultar el historial.
| Se omiten elementos anteriores.
|-
| 5
| Descargar video y audio.
| Se obtienen las pistas necesarias.
|-
| 6
| Unir mediante FFmpeg.
| Se crea el MP4 final.
|-
| 7
| Guardar fecha, título, canal e ID.
| El archivo queda identificable.
|-
| 8
| Revisar la reproducción.
| Se confirma imagen y sonido.
|-
| 9
| Clasificar o vincular en WikiFSF.
| El archivo se integra al sistema de conocimiento.
|}
 
== Uso para estudio y aprendizaje ==
 
Esta herramienta puede funcionar como una estación de aprendizaje y no solamente como un descargador.
 
=== Biblioteca de estudio ===
 
Es posible crear listas temáticas:
 
:* Pedagogía.
:* Tecnología.
:* Historia.
:* Cocina.
:* Salud.
:* Documentales.
:* Espiritualidad.
:* Programación.
:* Videojuegos.
:* Escuela RyE.
:* 5Era.
:* Memoria familiar.
 
Cada lista puede agregarse a <code>videos.txt</code> y descargarse poco a poco.
 
=== Aprendizaje sin conexión ===
 
Los archivos locales permiten estudiar cuando:
 
:* La conexión falla.
:* El proveedor reduce la velocidad.
:* Se viaja.
:* Se desea evitar distracciones de la plataforma.
:* El contenido será reproducido varias veces.
:* Se busca conservar una clase para consulta futura.
 
=== Estudio pausado ===
 
Un video guardado localmente puede:
 
:* Reproducirse a menor velocidad.
:* Pausarse para tomar notas.
:* Compararse con otros materiales.
:* Utilizarse para crear una ficha WikiFSF.
:* Revisarse sin publicidad o recomendaciones externas.
:* Dividirse en estaciones de estudio.
:* Convertirse en audio cuando la imagen no es esencial.
:* Integrarse a una cronología de aprendizaje.
 
=== Conservación de memoria ===
 
{{oro|Un archivo de video puede ser memoria cultural, educativa, técnica, familiar o personal.}}
 
Algunos contenidos desaparecen por:
 
:* Eliminación del canal.
:* Cierre de cuentas.
:* Cambios en derechos de distribución.
:* Conversión del video en privado.
:* Fallos de almacenamiento.
:* Transformaciones de la plataforma.
:* Pérdida de acceso a internet.
:* Olvido de la dirección original.
 
Conservar responsablemente una copia de materiales significativos puede ayudar a mantener:
 
:* Recuerdos familiares.
:* Programas antiguos.
:* Explicaciones técnicas.
:* Recetas.
:* Testimonios.
:* Clases.
:* Entrevistas.
:* Documentales difíciles de localizar.
:* Fuentes utilizadas en artículos.
:* Material para reflexión futura.
 
== Relación con WikiFSF ==
 
Los videos descargados pueden servir como material de apoyo para:
 
:* Crear artículos.
:* Resumir clases.
:* Documentar procesos.
:* Conservar fuentes.
:* Extraer cronologías.
:* Registrar recetas.
:* Crear tablas comparativas.
:* Construir estaciones de aprendizaje.
:* Vincular recuerdos con fechas y personas.
:* Preservar una fuente antes de que desaparezca.
 
=== Ficha mínima sugerida ===
 
<pre>
== Video ==
* Título:
* Canal:
* Fecha de publicación:
* URL original:
* Fecha de descarga:
* Resolución:
* Duración:
* Tema:
* Motivo de conservación:
* Resumen:
* Aprendizajes:
* Palabras clave:
</pre>
 
=== Importancia del identificador ===
 
El nombre:
 
<pre>
20231029 - Spicy_City - Orbital_Bacon [LkdWdBg-0kA].mp4
</pre>
 
conserva:
 
:* <code>20231029</code>: fecha de publicación.
:* <code>Spicy_City</code>: título.
:* <code>Orbital_Bacon</code>: canal.
:* <code>LkdWdBg-0kA</code>: identificador original de YouTube.
:* <code>.mp4</code>: formato final.
 
El identificador es especialmente útil porque permite reconstruir la URL:
 
<pre>
https://www.youtube.com/watch?v=LkdWdBg-0kA
</pre>
 
aunque el nombre del archivo haya sido modificado.
 
== Mejoras posibles ==
 
El sistema puede adaptarse para realizar tareas adicionales.
 
{| class="wikitable" style="width:100%; border:2px solid #4527A0;"
! style="background:#4527A0; color:white;" | Mejora
! style="background:#4527A0; color:white;" | Utilidad
|-
| Descargar miniaturas
| Conservar la portada original del video.
|-
| Descargar subtítulos
| Facilitar lectura, búsqueda y estudio.
|-
| Guardar descripción
| Conservar fuentes, enlaces y contexto.
|-
| Descargar solamente audio
| Crear una biblioteca de clases, música autorizada o conferencias.
|-
| Separar por tema
| Crear diferentes carpetas y listas de trabajo.
|-
| Crear registro CSV o JSON
| Analizar fechas, canales, duración y títulos.
|-
| Limitar duración
| Evitar transmisiones demasiado largas.
|-
| Limitar tamaño
| Proteger el espacio del disco.
|-
| Descargar solamente videos nuevos
| Mantener actualizada una lista o canal.
|-
| Programación nocturna
| Aprovechar periodos de bajo uso.
|}
 
=== Descargar miniatura ===
 
<pre>
--write-thumbnail ^
</pre>
 
=== Descargar subtítulos disponibles ===
 
<pre>
--write-subs ^
--write-auto-subs ^
--sub-langs "es.*,en.*" ^
</pre>
 
=== Guardar descripción y metadatos ===
 
<pre>
--write-description ^
--write-info-json ^
</pre>
 
=== Descargar solamente audio ===
 
<pre>
-x ^
--audio-format mp3 ^
--audio-quality 5 ^
</pre>
 
=== Descargar solo una parte de una playlist ===
 
<pre>
--playlist-start 1 ^
--playlist-end 25 ^
</pre>
 
=== Limitar cantidad de elementos ===
 
Puede dividirse una lista grande en segmentos:
 
<pre>
--playlist-start 1 --playlist-end 50
--playlist-start 51 --playlist-end 100
--playlist-start 101 --playlist-end 150
</pre>
 
Esto reduce sesiones excesivamente largas y facilita detectar errores.
 
=== Limitar duración ===
 
Ejemplo conceptual para evitar videos demasiado extensos:
 
<pre>
--match-filter "duration < 14400"
</pre>
 
El valor <code>14400</code> equivale a cuatro horas.
 
=== Lista de espera pedagógica ===
 
Una playlist propia puede utilizarse como una cola de aprendizaje:
 
:# Se crea una playlist privada o no listada.
:# Se agregan videos que se desean estudiar.
:# El archivo <code>videos.txt</code> conserva la dirección de esa playlist.
:# La tarea programada revisa periódicamente la lista.
:# Los videos nuevos se descargan.
:# El historial evita duplicados.
:# La persona consulta después el material sin depender de la plataforma.
 
{{oro|La playlist deja de ser solamente una colección temporal y se convierte en una estación de selección, conservación y aprendizaje.}}
 
== Mantenimiento ==
 
=== Actualizar yt-dlp ===
 
Comando:
 
<pre>
"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" -U
</pre>
 
También puede revisarse la versión:
 
<pre>
"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" --version
</pre>
 
=== Revisar espacio disponible ===
 
Las playlists y canales pueden consumir mucho espacio.
 
Antes de procesar una colección grande conviene revisar:
 
:* Cantidad de videos.
:* Duración promedio.
:* Resolución seleccionada.
:* Espacio disponible.
:* Posibilidad de duplicados externos.
:* Capacidad del disco.
:* Tiempo estimado de descarga.
 
=== Copias de seguridad ===
 
Conviene respaldar:
 
<pre>
videos.txt
videos_descargados.txt
descargar_youtube.bat
registro_descargas.txt
</pre>
 
El archivo más importante para evitar repeticiones es:
 
<pre>
videos_descargados.txt
</pre>
 
=== Limpieza ===
 
No deben borrarse automáticamente archivos con nombres como:
 
<pre>
.f398.mp4
.f251.webm
.part
.ytdl
</pre>
 
sin revisar primero su estado.
 
Pueden representar:
 
:* Descargas incompletas.
:* Pistas pendientes de fusionar.
:* Archivos temporales.
:* Procesos interrumpidos.
:* Datos útiles para reanudar.
 
== Diagnóstico rápido ==
 
{| class="wikitable" style="width:100%; border:2px solid #455A64;"
! style="background:#455A64; color:white;" | Síntoma
! style="background:#455A64; color:white;" | Causa probable
! style="background:#455A64; color:white;" | Acción
|-
| Aparecen dos archivos por video
| Falta FFmpeg o no se encontró su ruta.
| Verificar <code>ffmpeg.exe</code> y <code>--ffmpeg-location</code>.
|-
| El archivo no tiene audio
| Se conservó solamente la pista de video.
| Unir con FFmpeg o repetir la descarga.
|-
| El archivo solo tiene sonido
| Se abrió la pista de audio.
| Buscar el MP4 final o instalar FFmpeg.
|-
| Se crean dos carpetas iguales
| La plantilla de salida contiene canal y playlist como carpetas.
| Eliminar las carpetas de la expresión <code>--output</code>.
|-
| El video se omite
| Está registrado en el historial.
| Revisar <code>videos_descargados.txt</code>.
|-
| No eres un robot
| YouTube solicita autenticación.
| Usar cookies, Deno y pausas.
|-
| No hay entorno JavaScript
| Falta Deno.
| Instalar <code>deno.exe</code>.
|-
| El nombre usa guiones bajos
| Está activo <code>--restrict-filenames</code>.
| Quitar esa línea si se desean nombres naturales.
|-
| La ventana queda abierta
| El script contiene <code>pause</code>.
| Eliminarlo en la versión programada.
|-
| Descarga nuevamente una colección
| El historial fue borrado o cambiado.
| Restaurar la copia de seguridad del historial.
|}
 
== Límites prácticos ==
 
La herramienta no garantiza que todos los videos puedan descargarse.
 
Algunos contenidos pueden estar:
 
:* Eliminados.
:* Privados.
:* Restringidos por edad.
:* Bloqueados geográficamente.
:* Protegidos por membresía.
:* Limitados por derechos.
:* Disponibles solamente mediante una sesión específica.
:* Sujetos a cambios técnicos de YouTube.
:* Protegidos por mecanismos que yt-dlp todavía no interpreta.
 
{{oro|La automatización facilita el proceso, pero requiere supervisión, actualización y uso responsable.}}
 
== Reflexión ==
 
Las plataformas digitales ofrecen una sensación de permanencia, pero muchos contenidos son temporales. Una dirección puede funcionar hoy y desaparecer mañana.
 
Guardar un video no significa únicamente acumular archivos. Cuando existe una intención clara, puede convertirse en un acto de:
 
:* Estudio.
:* Preservación.
:* Memoria.
:* Documentación.
:* Preparación.
:* Autonomía.
:* Curaduría.
:* Continuidad educativa.
 
El valor no se encuentra solamente en descargar, sino en decidir:
 
:* Qué merece conservarse.
:* Por qué se conserva.
:* Cómo se clasifica.
:* Cuándo se revisará.
:* Qué aprendizaje puede extraerse.
:* Cómo se relaciona con otros conocimientos.
:* Qué debe eliminarse cuando deja de tener sentido.
 
{{oro|Una biblioteca útil no es la que contiene más archivos, sino aquella cuyos contenidos pueden encontrarse, comprenderse, relacionarse y convertirse en aprendizaje.}}
 
== Autoría y documentación ==
 
{| class="wikitable" style="width:100%; border:2px solid #263238;"
! style="background:#263238; color:white;" | Dato
! style="background:#263238; color:white;" | Información
|-
| Documento base
| Información, rutas, pruebas y scripts conservados por Ziv.
|-
| Curaduría, ampliación y organización
| Inteligencia Artificial, mediante la plantilla {{Chat|20260616}}.
|-
| Fecha de ampliación
| 16 de junio de 2026.
|-
| Propósito
| Documentar la instalación, automatización, uso pedagógico, conservación y mantenimiento de yt-dlp en WikiFSF.
|-
| Ruta documentada
| <code>E:\00_APP\00_YOUTUBE_Videos</code>
|}
 
{{Chat|20260616 - {{s|Creado mayormente por CHATGPT a petición mia (Ziv).}} }}
----
== Script para conservar AUDIO ==
: {{a3|Este script reduce lo más que puede el video y su resolución para crear archivos pequeños.}}
:* {{oro|Pero trata de conservar una buena calidad de AUDIO.}}
----
:* E:\00_APP\00_YOUTUBE_Videos\'''descargar_youtube_compacto_audio_mejor.bat'''
----
<small><pre>
@echo off
setlocal EnableExtensions
 
rem ============================================================
rem YOUTUBE: VIDEO MAS COMPACTO + MEJOR AUDIO DISPONIBLE
rem ============================================================
rem
rem Objetivo:
rem - Buscar la pista de video con menor tamano estimado.
rem - Mantener la mejor calidad de audio disponible.
rem - Preferir MP4 y M4A cuando sea posible.
rem - Usar MKV si MP4 no admite los codecs seleccionados.
rem - Guardar todos los videos en una sola carpeta.
rem
rem VLC puede reproducir MP4, MKV y la mayoria de codecs usados.
rem ============================================================
 
 
rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================
 
set "BASE=E:\00_APP\00_YOUTUBE_Videos"
 
set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"
 
set "FFMPEG=%BASE%\yt-dlp"
 
set "DENO=%BASE%\yt-dlp\deno.exe"
 
set "DESTINO=%BASE%\Videos_Descargados"
 
set "LISTA=%BASE%\videos.txt"
 
rem Historial separado para esta modalidad
set "HISTORIAL=%BASE%\videos_descargados_compactos.txt"
 
set "LOG=%BASE%\registro_descargas_compactas.txt"
 
 
rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================
 
if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)
 
 
rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================
 
if not exist "%YTDLP%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================
 
if not exist "%FFMPEG%\ffmpeg.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFMPEG
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffmpeg.exe"
    echo.
    pause
    exit /b 1
)
 
if not exist "%FFMPEG%\ffprobe.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFPROBE
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffprobe.exe"
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem VERIFICAR DENO
rem ============================================================
 
if not exist "%DENO%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO DENO
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%DENO%"
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem VERIFICAR LISTA DE URL
rem ============================================================
 
if not exist "%LISTA%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO LA LISTA DE VIDEOS
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%LISTA%"
    echo.
    echo Coloca una URL por renglon dentro de videos.txt.
    echo.
    pause
    exit /b 1
)
 
 
rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================
 
cls
 
echo ============================================================
echo      VIDEO MAS COMPACTO + MEJOR AUDIO DISPONIBLE
echo ============================================================
echo.
echo Programa:  %YTDLP%
echo FFmpeg:    %FFMPEG%
echo Deno:      %DENO%
echo Destino:    %DESTINO%
echo Lista:      %LISTA%
echo Historial:  %HISTORIAL%
echo.
echo Video:      Menor tamano estimado
echo Audio:      Mejor bitrate disponible
echo Contenedor: Preferencia MP4; alternativa MKV
echo.
echo Fecha: %date%
echo Fecha: %date%
echo Hora:  %time%
echo Hora:  %time%
echo.
echo ============================================================
echo ============================================================
echo.
echo.


rem ============================================================
rem REGISTRAR INICIO
rem ============================================================
echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo VIDEO: Menor tamano estimado>>"%LOG%"
echo AUDIO: Mejor bitrate disponible>>"%LOG%"
echo CONTENEDOR: MP4 o MKV>>"%LOG%"
echo ============================================================>>"%LOG%"
rem ============================================================
rem DESCARGAR
rem ============================================================
rem
rem bv+ba:
rem  Pista de video separada + pista de audio separada.
rem
rem /b:
rem  Si no existen pistas separadas compatibles, usa un formato
rem  combinado.
rem
rem abr:
rem  Prefiere mayor bitrate de audio.
rem
rem +size:
rem  Prefiere menor tamano de archivo.
rem
rem vext:mp4:
rem  Da preferencia al contenedor de video MP4.
rem
rem aext:m4a:
rem  Da preferencia al audio M4A.
rem
rem mp4/mkv:
rem  Intenta MP4 y utiliza MKV cuando sea necesario.
rem ============================================================
"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--js-runtimes "deno:%DENO%" ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--continue ^
--ignore-errors ^
--no-overwrites ^
--windows-filenames ^
--restrict-filenames ^
--format "bv+ba/b" ^
--format-sort "abr,+size,vext:mp4,aext:m4a" ^
--merge-output-format "mp4/mkv" ^
--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^
--retries 10 ^
--fragment-retries 10 ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s] [COMPACTO_AUDIO_MEJOR].%%(ext)s" ^
--newline
rem ============================================================
rem GUARDAR RESULTADO
rem ============================================================
set "RESULTADO=%ERRORLEVEL%"
echo.
echo ============================================================
if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo EL PROCESO TERMINO CON UNO O MAS ERRORES
    echo Codigo de salida: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)
echo.
echo Fecha final: %date%
echo Hora final:  %time%
echo ============================================================
echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"
echo.
pause
pause
endlocal
endlocal
</pre>
</pre></small>
----
----
[[CATEGORY:YOUTUBE]]
[[CATEGORY:YOUTUBE]]
Línea 90: Línea 1796:
[[CATEGORY:TOOLS]]
[[CATEGORY:TOOLS]]
[[CATEGORY:ZIV]]
[[CATEGORY:ZIV]]
[[CATEGORY:EDUCACION]]
[[CATEGORY:MEMORIA]]
[[CATEGORY:VIDEO]]
[[CATEGORY:WINDOWS]]
[[CATEGORY:AUTOMATIZACION]]

Revisión actual - 09:55 16 jun 2026

Bajar videos de YOUTUBE

Estructura general de carpetas, programas, listas y archivos descargados.

🤝ChatGPT 🧩🌐- 20260616

Aviso de uso responsable

Esta herramienta debe utilizarse para descargar material propio, videos con autorización, obras de dominio público, recursos con licencias que permitan su conservación o contenidos cuya descarga sea legítima dentro del contexto del usuario. La posibilidad técnica de descargar un archivo no elimina los derechos de autor, las condiciones de uso de la plataforma ni la responsabilidad personal sobre su utilización.

Introducción

yt-dlp es una herramienta de línea de comandos capaz de descargar videos, audios, listas de reproducción y colecciones completas de numerosos sitios compatibles, entre ellos YouTube.

A diferencia de una aplicación gráfica convencional, yt-dlp puede integrarse dentro de un archivo por lotes de Windows —un archivo con extensión .bat— para automatizar procesos repetitivos.

Este sistema permite:

  • Descargar videos individuales.
  • Descargar listas completas de reproducción.
  • Revisar periódicamente canales o playlists.
  • Evitar descargas repetidas mediante un historial.
  • Limitar la resolución para ahorrar espacio.
  • Organizar los nombres usando fecha, título, canal e identificador.
  • Unir automáticamente las pistas separadas de imagen y sonido.
  • Registrar fechas de ejecución y posibles errores.
  • Programar las descargas para ejecutarse sin intervención manual.

Componente Función
yt-dlp.exe Analiza las direcciones, identifica los formatos disponibles y realiza las descargas.
ffmpeg.exe Une video y audio cuando YouTube los entrega como pistas separadas.
ffprobe.exe Examina las características técnicas de los archivos multimedia.
deno.exe Proporciona un entorno JavaScript que ayuda a interpretar mecanismos modernos de YouTube.
videos.txt Contiene las direcciones que se desean procesar.
videos_descargados.txt Conserva el historial de identificadores ya descargados.
descargar_youtube.bat Reúne las instrucciones y automatiza todo el proceso.
registro_descargas.txt Registra fechas, resultados y posibles fallos del sistema.

Uso

Perfecto. Asumiendo que el archivo se llama:
  • E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe
Puedes guardar este script como:
  • E:\00_APP\00_YOUTUBE_Videos\descargar_youtube.bat

Para ejecutar manualmente el sistema desde la consola de Windows:

cd E:\00_APP\00_YOUTUBE_Videos
E:
descargar_youtube

También es posible abrir la carpeta:

E:\00_APP\00_YOUTUBE_Videos

y hacer doble clic sobre:

descargar_youtube.bat

Estructura recomendada

E:\00_APP\00_YOUTUBE_Videos\
│
├── descargar_youtube.bat
├── videos.txt
├── videos_descargados.txt
├── registro_descargas.txt
│
├── yt-dlp\
│   ├── yt-dlp.exe
│   ├── ffmpeg.exe
│   ├── ffprobe.exe
│   └── deno.exe
│
└── Videos_Descargados\
    ├── 20231029 - City - Orbital [MkdWdBg-0kA].mp4
    ├── 20150925 - Nombre_del_video - EstrellaTV [ID].mp4
    └── Otros archivos descargados...
Ventaja Explicación
Una sola carpeta Todos los videos pueden quedar directamente dentro de Videos_Descargados, sin carpetas repetidas por canal.
Nombre identificable Cada archivo conserva fecha, título, canal y clave de YouTube.
Historial El sistema recuerda qué videos ya fueron procesados.
Automatización Puede ejecutarse todos los días o durante la madrugada.
Bajo consumo La versión de 360p resulta útil para conservar muchos videos sin ocupar tanto espacio.

Fuente 20260615

🤝ChatGPT 🧩🌐- 20260616

Script

El siguiente bloque corresponde a la base conservada para el sistema de descarga.


@echo off
setlocal EnableExtensions

rem ============================================================
rem DESCARGADOR AUTOMATICO DE VIDEOS DE YOUTUBE
rem ============================================================
rem
rem Todos los videos se guardan directamente en:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Nombre del archivo:
rem FECHA - TITULO - CANAL [ID].mp4
rem ============================================================


rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================

set "BASE=E:\00_APP\00_YOUTUBE_Videos"

set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"

set "FFMPEG=%BASE%\yt-dlp"

set "DESTINO=%BASE%\Videos_Descargados"

set "LISTA=%BASE%\videos.txt"

set "HISTORIAL=%BASE%\videos_descargados.txt"

set "LOG=%BASE%\registro_descargas.txt"


rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================

if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)


rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================

if not exist "%YTDLP%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)

Tipos de descargas

Sí, puedes descargar listas completas de reproducción.
  • Tu archivo:
E:\00_APP\00_YOUTUBE_Videos\videos.txt
  • Puede contener cualquiera de estos tipos de enlaces:

https://www.youtube.com/watch?v=ID_DEL_VIDEO https://www.youtube.com/playlist?list=ID_DE_LA_LISTA https://www.youtube.com/@NombreDelCanal/videos

Video individual

https://www.youtube.com/watch?v=ID_DEL_VIDEO

Descarga solamente el video señalado.

Lista completa de reproducción

https://www.youtube.com/playlist?list=ID_DE_LA_LISTA

yt-dlp abre la lista, examina sus elementos y procesa cada video disponible.

Canal completo

https://www.youtube.com/@NombreDelCanal/videos

Puede revisar todos los videos públicos del canal. Esta operación puede implicar cientos o miles de elementos, por lo que conviene utilizar pausas entre solicitudes y vigilar el espacio disponible.

Mezclar varios tipos de direcciones

El archivo videos.txt puede contener diferentes clases de enlaces:

https://www.youtube.com/watch?v=VIDEO_1
https://www.youtube.com/playlist?list=LISTA_1
https://www.youtube.com/@CanalEjemplo/videos
https://www.youtube.com/watch?v=VIDEO_2

Cada dirección debe colocarse en un renglón independiente.

Dirección Resultado esperado Precaución
Video individual Un solo archivo. Es la opción más rápida para pruebas.
Playlist Todos los elementos disponibles. Puede contener videos eliminados, privados o bloqueados.
Canal Revisión de la colección pública completa. Puede generar muchas solicitudes y activar controles de YouTube.
Varias URL Procesamiento secuencial. Conviene revisar que no existan enlaces duplicados.

Historial y prevención de duplicados

La opción:

--download-archive "%HISTORIAL%"

hace que yt-dlp registre cada video completado dentro de:

E:\00_APP\00_YOUTUBE_Videos\videos_descargados.txt

El archivo suele guardar entradas semejantes a:

youtube LkdWdBg-0kA

La próxima vez que la misma dirección aparezca dentro de una lista o canal, yt-dlp reconoce el identificador y omite la descarga.

Esto convierte al archivo de historial en una memoria técnica del sistema: no registra solamente nombres, sino las claves únicas de cada video.

Cuándo editar el historial

Puede ser necesario retirar una línea del historial cuando:

  • La descarga quedó incompleta.
  • Se descargó únicamente el audio o el video por falta de FFmpeg.
  • Se desea bajar nuevamente el material en otra resolución.
  • El archivo fue eliminado accidentalmente.
  • Se desea crear una copia renovada.

No conviene borrar todo el historial sin necesidad, porque yt-dlp podría intentar descargar nuevamente colecciones completas.

Maximo 360p

  • Versión del programa para bajar videos de poca resolución y tamaño.
  • Ayuda a tener un registro educativo y de recuerdos de poco espacio en tu PC; o para cuando el internet falla.
  • Es una manera de guardar conocimiento valioso o programar tu aprendizaje así como para tener o conservar recuerdos de video retros.

La resolución de 360p resulta especialmente útil cuando el valor central se encuentra en:

  • La voz del expositor.
  • Una clase o conferencia.
  • Una receta.
  • Un documental principalmente narrativo.
  • Una transmisión antigua.
  • Un recuerdo familiar.
  • Un programa de televisión retro.
  • Material que será consultado en una pantalla pequeña.
  • Contenido donde la imagen no necesita gran detalle.
Resolución Uso sugerido Espacio relativo
144p Referencia mínima, voz o archivo de emergencia. Muy bajo.
240p Grabaciones antiguas o material principalmente auditivo. Bajo.
360p Biblioteca de estudio, recuerdos, recetas y videos largos. Moderado.
480p Textos en pantalla y demostraciones con detalles medios. Medio.
720p Visualización más cómoda, diagramas y material con detalles. Alto.
1080p o superior Archivo visual de alta calidad. Muy alto.

@echo off
setlocal EnableExtensions

rem ============================================================
rem DESCARGADOR AUTOMATICO DE VIDEOS DE YOUTUBE
rem ============================================================
rem
rem Todos los videos se guardan directamente en:
rem E:\00_APP\00_YOUTUBE_Videos\Videos_Descargados
rem
rem Resolucion preferida:
rem Hasta 360p
rem
rem Nombre del archivo:
rem FECHA - TITULO - CANAL [ID].mp4
rem ============================================================


rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================

set "BASE=E:\00_APP\00_YOUTUBE_Videos"

set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"

set "FFMPEG=%BASE%\yt-dlp"

set "DESTINO=%BASE%\Videos_Descargados"

set "LISTA=%BASE%\videos.txt"

set "HISTORIAL=%BASE%\videos_descargados.txt"

set "LOG=%BASE%\registro_descargas.txt"


rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================

if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)


rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================

if not exist "%YTDLP%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================

if not exist "%FFMPEG%\ffmpeg.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFMPEG
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffmpeg.exe"
    echo.
    pause
    exit /b 1
)

if not exist "%FFMPEG%\ffprobe.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFPROBE
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffprobe.exe"
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem VERIFICAR LISTA DE URL
rem ============================================================

if not exist "%LISTA%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO LA LISTA DE VIDEOS
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%LISTA%"
    echo.
    echo Crea videos.txt y coloca una URL por renglon.
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================

cls

echo ============================================================
echo          DESCARGADOR AUTOMATICO DE YOUTUBE
echo ============================================================
echo.
echo Programa:   %YTDLP%
echo FFmpeg:     %FFMPEG%
echo Destino:    %DESTINO%
echo Lista:      %LISTA%
echo Historial:  %HISTORIAL%
echo Resolucion: Hasta 360p
echo.
echo Fecha: %date%
echo Hora:  %time%
echo.
echo ============================================================
echo.


rem ============================================================
rem REGISTRAR INICIO
rem ============================================================

echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo RESOLUCION: Hasta 360p>>"%LOG%"
echo ============================================================>>"%LOG%"


rem ============================================================
rem DESCARGAR VIDEOS
rem ============================================================
rem
rem Resolucion maxima preferida: 360p
rem Sin subcarpetas por canal
rem Nombre:
rem FECHA - TITULO - CANAL [ID].EXTENSION
rem ============================================================

"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--continue ^
--ignore-errors ^
--no-overwrites ^
--windows-filenames ^
--restrict-filenames ^
--merge-output-format mp4 ^
--format "bv*[height<=360]+ba/b[height<=360]" ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s].%%(ext)s" ^
--newline


rem ============================================================
rem GUARDAR RESULTADO
rem ============================================================

set "RESULTADO=%ERRORLEVEL%"

echo.
echo ============================================================

if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo EL PROCESO TERMINO CON UNO O MAS ERRORES
    echo Codigo de salida: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)

echo.
echo Fecha final: %date%
echo Hora final:  %time%
echo ============================================================

echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"

echo.
pause

endlocal


Cómo interpreta la resolución

La expresión:

--format "bv*[height<=360]+ba/b[height<=360]"

significa:

  • bv*: seleccionar la mejor pista de video disponible.
  • [height<=360]: no superar 360 píxeles de altura.
  • +ba: agregar la mejor pista de audio.
  • /b[height<=360]: si no existen pistas separadas apropiadas, intentar un formato combinado de hasta 360p.

Si el video ofrece:

144p
240p
360p
480p
720p

el sistema elegirá normalmente 360p.

Si no existe 360p, elegirá la mejor opción inferior disponible.

FFmpeg: unión de video y audio

YouTube suele almacenar por separado:

  • La imagen.
  • El sonido.

Por eso yt-dlp puede descargar inicialmente dos archivos:

Nombre_del_video.f398.mp4
Nombre_del_video.f251.webm

En este ejemplo:

  • f398.mp4 puede contener únicamente la imagen.
  • f251.webm puede contener únicamente el sonido.

FFmpeg los fusiona en:

Nombre_del_video.mp4

La línea:

--ffmpeg-location "%FFMPEG%"

indica expresamente dónde se encuentran:

E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffmpeg.exe
E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffprobe.exe

Comprobación de FFmpeg

"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\ffmpeg.exe" -version

Si aparece la información de versión, FFmpeg está disponible.

Mensaje Significado Solución
ffmpeg is not installed yt-dlp no puede unir las pistas. Instalar FFmpeg o corregir su ruta.
Archivos .f398 y .f251 La imagen y el audio quedaron separados. Instalar FFmpeg y volver a procesar o unir manualmente.
Un solo MP4 con audio La fusión se completó correctamente. No requiere corrección.

Cookies

Las cookies permiten que yt-dlp utilice una sesión de navegador ya autenticada.

Esto puede ser necesario cuando YouTube muestra:

Sign in to confirm you’re not a bot

Prueba de autenticación desde Chrome:

"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" ^
-vU ^
--cookies-from-browser chrome ^
--js-runtimes "deno:E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe" ^
--simulate ^
"https://www.youtube.com/watch?v=dqgMNHYk1Gk"

La opción:

--simulate

hace una prueba sin descargar el video completo.

La opción:

-vU

activa información detallada y comprueba actualizaciones.

Perfil específico de Chrome

Chrome puede tener varios perfiles:

Default
Profile 1
Profile 2

Para conocer la ruta del perfil activo, abrir en Chrome:

chrome://version

Buscar:

Ruta del perfil

Ejemplo:

C:\Users\USUARIO\AppData\Local\Google\Chrome\User Data\Profile 1

Después se puede utilizar:

--cookies-from-browser "chrome:Profile 1"

Archivo de cookies

También es posible trabajar con un archivo:

E:\00_APP\00_YOUTUBE_Videos\youtube_cookies.txt

y llamarlo desde el script:

--cookies "%BASE%\youtube_cookies.txt" ^
Precaución de seguridad

Un archivo de cookies puede contener datos de sesión activos. No debe publicarse, adjuntarse a WikiFSF, compartirse por mensajería ni almacenarse en una carpeta pública. Debe tratarse como una credencial privada.

Deno y JavaScript

El aviso:

No supported JavaScript runtime could be found

indica que yt-dlp no encontró un entorno JavaScript compatible.

La ruta utilizada es:

E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe

Comprobación:

"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\deno.exe" --version

Uso dentro del script:

--js-runtimes "deno:%DENO%" ^

Deno no descarga el video por sí mismo. Su función es ayudar a yt-dlp a interpretar procesos modernos de extracción utilizados por YouTube.

Error: confirmar que no eres un robot

Mensaje habitual:

ERROR: [youtube] Sign in to confirm you’re not a bot.
Use --cookies-from-browser or --cookies for the authentication.

Posibles causas:

  • Muchas solicitudes consecutivas.
  • Una lista con cientos de videos.
  • Cookies ausentes.
  • Perfil incorrecto del navegador.
  • Sesión de YouTube no iniciada.
  • Restricción temporal de la dirección IP.
  • Falta de entorno JavaScript.
  • Cookies caducadas.
  • Ejecución demasiado rápida.

Posibles soluciones:

  1. Detener temporalmente el proceso.
  2. Confirmar que YouTube abre normalmente en el navegador.
  3. Iniciar sesión en la cuenta correcta.
  4. Identificar el perfil correcto de Chrome.
  5. Usar cookies del navegador o un archivo de cookies.
  6. Añadir Deno.
  7. Reducir la velocidad de las solicitudes.
  8. Probar primero con un solo video.
  9. Esperar varias horas si existe una limitación temporal.
  10. Reiniciar el módem solamente si se comprende el funcionamiento de la conexión y el proveedor entrega IP dinámica.

Pausas recomendadas

--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^

Estas líneas hacen que yt-dlp espere entre solicitudes.

Parámetro Función
--sleep-requests 3 Espera tres segundos entre determinadas solicitudes de extracción.
--sleep-interval 5 Espera como mínimo cinco segundos entre descargas.
--max-sleep-interval 12 Permite una espera variable de hasta doce segundos.
--retries 10 Reintenta una operación hasta diez veces.
--fragment-retries 10 Reintenta fragmentos individuales del video.

Las pausas hacen el proceso más lento, pero también más estable y menos agresivo frente al servidor.

Script ampliado con cookies, Deno y pausas

El siguiente bloque conserva el enfoque de 360p, una sola carpeta y nombres completos, pero añade autenticación, JavaScript y pausas.

@echo off
setlocal EnableExtensions

rem ============================================================
rem DESCARGADOR AUTOMATICO DE YOUTUBE - 360p
rem ============================================================

set "BASE=E:\00_APP\00_YOUTUBE_Videos"
set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"
set "FFMPEG=%BASE%\yt-dlp"
set "DENO=%BASE%\yt-dlp\deno.exe"
set "DESTINO=%BASE%\Videos_Descargados"
set "LISTA=%BASE%\videos.txt"
set "HISTORIAL=%BASE%\videos_descargados.txt"
set "LOG=%BASE%\registro_descargas.txt"

if not exist "%DESTINO%" mkdir "%DESTINO%"

if not exist "%YTDLP%" (
    echo ERROR: No se encontro "%YTDLP%"
    pause
    exit /b 1
)

if not exist "%FFMPEG%\ffmpeg.exe" (
    echo ERROR: No se encontro "%FFMPEG%\ffmpeg.exe"
    pause
    exit /b 1
)

if not exist "%FFMPEG%\ffprobe.exe" (
    echo ERROR: No se encontro "%FFMPEG%\ffprobe.exe"
    pause
    exit /b 1
)

if not exist "%DENO%" (
    echo ERROR: No se encontro "%DENO%"
    pause
    exit /b 1
)

if not exist "%LISTA%" (
    echo ERROR: No se encontro "%LISTA%"
    pause
    exit /b 1
)

cls

echo ============================================================
echo         DESCARGADOR AUTOMATICO DE YOUTUBE
echo ============================================================
echo.
echo Resolucion: Hasta 360p
echo Cookies:    Google Chrome
echo JavaScript: Deno
echo Destino:    %DESTINO%
echo Lista:      %LISTA%
echo.
echo ============================================================
echo.

echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"

"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--js-runtimes "deno:%DENO%" ^
--cookies-from-browser chrome ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--continue ^
--ignore-errors ^
--no-overwrites ^
--windows-filenames ^
--restrict-filenames ^
--merge-output-format mp4 ^
--format "bv*[height<=360]+ba/b[height<=360]" ^
--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^
--retries 10 ^
--fragment-retries 10 ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s].%%(ext)s" ^
--newline

set "RESULTADO=%ERRORLEVEL%"

echo.
echo ============================================================

if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo PROCESO TERMINADO CON ERRORES
    echo Codigo: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)

echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"

echo.
pause
endlocal

Programación automática en Windows

El Programador de tareas de Windows permite ejecutar el archivo sin necesidad de recordar manualmente cuándo hacerlo.

Abrir el Programador de tareas

  1. Presionar Windows + R.
  2. Escribir:

taskschd.msc

  1. Presionar Enter.
  2. Elegir Crear tarea básica.

Configuración sugerida

Campo Valor sugerido
Nombre Descargar videos de YouTube
Desencadenador Diario, semanal o al iniciar sesión
Hora Madrugada o periodo de poco uso
Acción Iniciar un programa
Programa E:\00_APP\00_YOUTUBE_Videos\descargar_youtube.bat
Iniciar en E:\00_APP\00_YOUTUBE_Videos

Frecuencias posibles

  • Cada noche.
  • Una vez por semana.
  • Los domingos.
  • Al iniciar la computadora.
  • Al iniciar sesión.
  • Cuando el equipo esté inactivo.
  • En horarios donde la conexión no sea utilizada por otras personas.

Adaptación para ejecución automática

El comando:

pause

mantiene abierta la ventana al terminar.

Esto es útil durante pruebas, porque permite leer errores. Sin embargo, en una tarea automática puede dejar una ventana esperando indefinidamente.

Para la versión programada, puede cambiarse por:

rem pause

o eliminarse.

Conviene conservar dos archivos: uno de prueba con pause y otro automático sin pause.

Flujo de trabajo recomendado

Paso Acción Resultado
1 Localizar el video, playlist o canal. Se obtiene una URL.
2 Pegar la URL en videos.txt. Queda registrada en la cola.
3 Ejecutar descargar_youtube.bat. yt-dlp examina la lista.
4 Consultar el historial. Se omiten elementos anteriores.
5 Descargar video y audio. Se obtienen las pistas necesarias.
6 Unir mediante FFmpeg. Se crea el MP4 final.
7 Guardar fecha, título, canal e ID. El archivo queda identificable.
8 Revisar la reproducción. Se confirma imagen y sonido.
9 Clasificar o vincular en WikiFSF. El archivo se integra al sistema de conocimiento.

Uso para estudio y aprendizaje

Esta herramienta puede funcionar como una estación de aprendizaje y no solamente como un descargador.

Biblioteca de estudio

Es posible crear listas temáticas:

  • Pedagogía.
  • Tecnología.
  • Historia.
  • Cocina.
  • Salud.
  • Documentales.
  • Espiritualidad.
  • Programación.
  • Videojuegos.
  • Escuela RyE.
  • 5Era.
  • Memoria familiar.

Cada lista puede agregarse a videos.txt y descargarse poco a poco.

Aprendizaje sin conexión

Los archivos locales permiten estudiar cuando:

  • La conexión falla.
  • El proveedor reduce la velocidad.
  • Se viaja.
  • Se desea evitar distracciones de la plataforma.
  • El contenido será reproducido varias veces.
  • Se busca conservar una clase para consulta futura.

Estudio pausado

Un video guardado localmente puede:

  • Reproducirse a menor velocidad.
  • Pausarse para tomar notas.
  • Compararse con otros materiales.
  • Utilizarse para crear una ficha WikiFSF.
  • Revisarse sin publicidad o recomendaciones externas.
  • Dividirse en estaciones de estudio.
  • Convertirse en audio cuando la imagen no es esencial.
  • Integrarse a una cronología de aprendizaje.

Conservación de memoria

Un archivo de video puede ser memoria cultural, educativa, técnica, familiar o personal.

Algunos contenidos desaparecen por:

  • Eliminación del canal.
  • Cierre de cuentas.
  • Cambios en derechos de distribución.
  • Conversión del video en privado.
  • Fallos de almacenamiento.
  • Transformaciones de la plataforma.
  • Pérdida de acceso a internet.
  • Olvido de la dirección original.

Conservar responsablemente una copia de materiales significativos puede ayudar a mantener:

  • Recuerdos familiares.
  • Programas antiguos.
  • Explicaciones técnicas.
  • Recetas.
  • Testimonios.
  • Clases.
  • Entrevistas.
  • Documentales difíciles de localizar.
  • Fuentes utilizadas en artículos.
  • Material para reflexión futura.

Relación con WikiFSF

Los videos descargados pueden servir como material de apoyo para:

  • Crear artículos.
  • Resumir clases.
  • Documentar procesos.
  • Conservar fuentes.
  • Extraer cronologías.
  • Registrar recetas.
  • Crear tablas comparativas.
  • Construir estaciones de aprendizaje.
  • Vincular recuerdos con fechas y personas.
  • Preservar una fuente antes de que desaparezca.

Ficha mínima sugerida

== Video ==
* Título:
* Canal:
* Fecha de publicación:
* URL original:
* Fecha de descarga:
* Resolución:
* Duración:
* Tema:
* Motivo de conservación:
* Resumen:
* Aprendizajes:
* Palabras clave:

Importancia del identificador

El nombre:

20231029 - Spicy_City - Orbital_Bacon [LkdWdBg-0kA].mp4

conserva:

  • 20231029: fecha de publicación.
  • Spicy_City: título.
  • Orbital_Bacon: canal.
  • LkdWdBg-0kA: identificador original de YouTube.
  • .mp4: formato final.

El identificador es especialmente útil porque permite reconstruir la URL:

https://www.youtube.com/watch?v=LkdWdBg-0kA

aunque el nombre del archivo haya sido modificado.

Mejoras posibles

El sistema puede adaptarse para realizar tareas adicionales.

Mejora Utilidad
Descargar miniaturas Conservar la portada original del video.
Descargar subtítulos Facilitar lectura, búsqueda y estudio.
Guardar descripción Conservar fuentes, enlaces y contexto.
Descargar solamente audio Crear una biblioteca de clases, música autorizada o conferencias.
Separar por tema Crear diferentes carpetas y listas de trabajo.
Crear registro CSV o JSON Analizar fechas, canales, duración y títulos.
Limitar duración Evitar transmisiones demasiado largas.
Limitar tamaño Proteger el espacio del disco.
Descargar solamente videos nuevos Mantener actualizada una lista o canal.
Programación nocturna Aprovechar periodos de bajo uso.

Descargar miniatura

--write-thumbnail ^

Descargar subtítulos disponibles

--write-subs ^
--write-auto-subs ^
--sub-langs "es.*,en.*" ^

Guardar descripción y metadatos

--write-description ^
--write-info-json ^

Descargar solamente audio

-x ^
--audio-format mp3 ^
--audio-quality 5 ^

Descargar solo una parte de una playlist

--playlist-start 1 ^
--playlist-end 25 ^

Limitar cantidad de elementos

Puede dividirse una lista grande en segmentos:

--playlist-start 1 --playlist-end 50
--playlist-start 51 --playlist-end 100
--playlist-start 101 --playlist-end 150

Esto reduce sesiones excesivamente largas y facilita detectar errores.

Limitar duración

Ejemplo conceptual para evitar videos demasiado extensos:

--match-filter "duration < 14400"

El valor 14400 equivale a cuatro horas.

Lista de espera pedagógica

Una playlist propia puede utilizarse como una cola de aprendizaje:

  1. Se crea una playlist privada o no listada.
  2. Se agregan videos que se desean estudiar.
  3. El archivo videos.txt conserva la dirección de esa playlist.
  4. La tarea programada revisa periódicamente la lista.
  5. Los videos nuevos se descargan.
  6. El historial evita duplicados.
  7. La persona consulta después el material sin depender de la plataforma.

La playlist deja de ser solamente una colección temporal y se convierte en una estación de selección, conservación y aprendizaje.

Mantenimiento

Actualizar yt-dlp

Comando:

"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" -U

También puede revisarse la versión:

"E:\00_APP\00_YOUTUBE_Videos\yt-dlp\yt-dlp.exe" --version

Revisar espacio disponible

Las playlists y canales pueden consumir mucho espacio.

Antes de procesar una colección grande conviene revisar:

  • Cantidad de videos.
  • Duración promedio.
  • Resolución seleccionada.
  • Espacio disponible.
  • Posibilidad de duplicados externos.
  • Capacidad del disco.
  • Tiempo estimado de descarga.

Copias de seguridad

Conviene respaldar:

videos.txt
videos_descargados.txt
descargar_youtube.bat
registro_descargas.txt

El archivo más importante para evitar repeticiones es:

videos_descargados.txt

Limpieza

No deben borrarse automáticamente archivos con nombres como:

.f398.mp4
.f251.webm
.part
.ytdl

sin revisar primero su estado.

Pueden representar:

  • Descargas incompletas.
  • Pistas pendientes de fusionar.
  • Archivos temporales.
  • Procesos interrumpidos.
  • Datos útiles para reanudar.

Diagnóstico rápido

Síntoma Causa probable Acción
Aparecen dos archivos por video Falta FFmpeg o no se encontró su ruta. Verificar ffmpeg.exe y --ffmpeg-location.
El archivo no tiene audio Se conservó solamente la pista de video. Unir con FFmpeg o repetir la descarga.
El archivo solo tiene sonido Se abrió la pista de audio. Buscar el MP4 final o instalar FFmpeg.
Se crean dos carpetas iguales La plantilla de salida contiene canal y playlist como carpetas. Eliminar las carpetas de la expresión --output.
El video se omite Está registrado en el historial. Revisar videos_descargados.txt.
No eres un robot YouTube solicita autenticación. Usar cookies, Deno y pausas.
No hay entorno JavaScript Falta Deno. Instalar deno.exe.
El nombre usa guiones bajos Está activo --restrict-filenames. Quitar esa línea si se desean nombres naturales.
La ventana queda abierta El script contiene pause. Eliminarlo en la versión programada.
Descarga nuevamente una colección El historial fue borrado o cambiado. Restaurar la copia de seguridad del historial.

Límites prácticos

La herramienta no garantiza que todos los videos puedan descargarse.

Algunos contenidos pueden estar:

  • Eliminados.
  • Privados.
  • Restringidos por edad.
  • Bloqueados geográficamente.
  • Protegidos por membresía.
  • Limitados por derechos.
  • Disponibles solamente mediante una sesión específica.
  • Sujetos a cambios técnicos de YouTube.
  • Protegidos por mecanismos que yt-dlp todavía no interpreta.

La automatización facilita el proceso, pero requiere supervisión, actualización y uso responsable.

Reflexión

Las plataformas digitales ofrecen una sensación de permanencia, pero muchos contenidos son temporales. Una dirección puede funcionar hoy y desaparecer mañana.

Guardar un video no significa únicamente acumular archivos. Cuando existe una intención clara, puede convertirse en un acto de:

  • Estudio.
  • Preservación.
  • Memoria.
  • Documentación.
  • Preparación.
  • Autonomía.
  • Curaduría.
  • Continuidad educativa.

El valor no se encuentra solamente en descargar, sino en decidir:

  • Qué merece conservarse.
  • Por qué se conserva.
  • Cómo se clasifica.
  • Cuándo se revisará.
  • Qué aprendizaje puede extraerse.
  • Cómo se relaciona con otros conocimientos.
  • Qué debe eliminarse cuando deja de tener sentido.

Una biblioteca útil no es la que contiene más archivos, sino aquella cuyos contenidos pueden encontrarse, comprenderse, relacionarse y convertirse en aprendizaje.

Autoría y documentación

Dato Información
Documento base Información, rutas, pruebas y scripts conservados por Ziv.
Curaduría, ampliación y organización Inteligencia Artificial, mediante la plantilla 🤝ChatGPT 🧩🌐- 20260616.
Fecha de ampliación 16 de junio de 2026.
Propósito Documentar la instalación, automatización, uso pedagógico, conservación y mantenimiento de yt-dlp en WikiFSF.
Ruta documentada E:\00_APP\00_YOUTUBE_Videos

🤝ChatGPT 🧩🌐- 20260616 - Creado mayormente por CHATGPT a petición mia (Ziv).


Script para conservar AUDIO

Este script reduce lo más que puede el video y su resolución para crear archivos pequeños.
  • Pero trata de conservar una buena calidad de AUDIO.

  • E:\00_APP\00_YOUTUBE_Videos\descargar_youtube_compacto_audio_mejor.bat

@echo off
setlocal EnableExtensions

rem ============================================================
rem YOUTUBE: VIDEO MAS COMPACTO + MEJOR AUDIO DISPONIBLE
rem ============================================================
rem
rem Objetivo:
rem - Buscar la pista de video con menor tamano estimado.
rem - Mantener la mejor calidad de audio disponible.
rem - Preferir MP4 y M4A cuando sea posible.
rem - Usar MKV si MP4 no admite los codecs seleccionados.
rem - Guardar todos los videos en una sola carpeta.
rem
rem VLC puede reproducir MP4, MKV y la mayoria de codecs usados.
rem ============================================================


rem ============================================================
rem RUTAS PRINCIPALES
rem ============================================================

set "BASE=E:\00_APP\00_YOUTUBE_Videos"

set "YTDLP=%BASE%\yt-dlp\yt-dlp.exe"

set "FFMPEG=%BASE%\yt-dlp"

set "DENO=%BASE%\yt-dlp\deno.exe"

set "DESTINO=%BASE%\Videos_Descargados"

set "LISTA=%BASE%\videos.txt"

rem Historial separado para esta modalidad
set "HISTORIAL=%BASE%\videos_descargados_compactos.txt"

set "LOG=%BASE%\registro_descargas_compactas.txt"


rem ============================================================
rem CREAR CARPETA DE DESTINO
rem ============================================================

if not exist "%DESTINO%" (
    mkdir "%DESTINO%"
)


rem ============================================================
rem VERIFICAR YT-DLP
rem ============================================================

if not exist "%YTDLP%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO YT-DLP
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%YTDLP%"
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem VERIFICAR FFMPEG
rem ============================================================

if not exist "%FFMPEG%\ffmpeg.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFMPEG
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffmpeg.exe"
    echo.
    pause
    exit /b 1
)

if not exist "%FFMPEG%\ffprobe.exe" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO FFPROBE
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%FFMPEG%\ffprobe.exe"
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem VERIFICAR DENO
rem ============================================================

if not exist "%DENO%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO DENO
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%DENO%"
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem VERIFICAR LISTA DE URL
rem ============================================================

if not exist "%LISTA%" (
    echo.
    echo ============================================================
    echo ERROR: NO SE ENCONTRO LA LISTA DE VIDEOS
    echo ============================================================
    echo.
    echo Archivo esperado:
    echo "%LISTA%"
    echo.
    echo Coloca una URL por renglon dentro de videos.txt.
    echo.
    pause
    exit /b 1
)


rem ============================================================
rem MOSTRAR INFORMACION
rem ============================================================

cls

echo ============================================================
echo      VIDEO MAS COMPACTO + MEJOR AUDIO DISPONIBLE
echo ============================================================
echo.
echo Programa:   %YTDLP%
echo FFmpeg:     %FFMPEG%
echo Deno:       %DENO%
echo Destino:    %DESTINO%
echo Lista:      %LISTA%
echo Historial:  %HISTORIAL%
echo.
echo Video:      Menor tamano estimado
echo Audio:      Mejor bitrate disponible
echo Contenedor: Preferencia MP4; alternativa MKV
echo.
echo Fecha: %date%
echo Hora:  %time%
echo.
echo ============================================================
echo.


rem ============================================================
rem REGISTRAR INICIO
rem ============================================================

echo.>>"%LOG%"
echo ============================================================>>"%LOG%"
echo INICIO: %date% %time%>>"%LOG%"
echo VIDEO: Menor tamano estimado>>"%LOG%"
echo AUDIO: Mejor bitrate disponible>>"%LOG%"
echo CONTENEDOR: MP4 o MKV>>"%LOG%"
echo ============================================================>>"%LOG%"


rem ============================================================
rem DESCARGAR
rem ============================================================
rem
rem bv+ba:
rem   Pista de video separada + pista de audio separada.
rem
rem /b:
rem   Si no existen pistas separadas compatibles, usa un formato
rem   combinado.
rem
rem abr:
rem   Prefiere mayor bitrate de audio.
rem
rem +size:
rem   Prefiere menor tamano de archivo.
rem
rem vext:mp4:
rem   Da preferencia al contenedor de video MP4.
rem
rem aext:m4a:
rem   Da preferencia al audio M4A.
rem
rem mp4/mkv:
rem   Intenta MP4 y utiliza MKV cuando sea necesario.
rem ============================================================

"%YTDLP%" ^
--ffmpeg-location "%FFMPEG%" ^
--js-runtimes "deno:%DENO%" ^
--batch-file "%LISTA%" ^
--download-archive "%HISTORIAL%" ^
--continue ^
--ignore-errors ^
--no-overwrites ^
--windows-filenames ^
--restrict-filenames ^
--format "bv+ba/b" ^
--format-sort "abr,+size,vext:mp4,aext:m4a" ^
--merge-output-format "mp4/mkv" ^
--sleep-requests 3 ^
--sleep-interval 5 ^
--max-sleep-interval 12 ^
--retries 10 ^
--fragment-retries 10 ^
--output "%DESTINO%\%%(upload_date)s - %%(title)s - %%(channel,uploader)s [%%(id)s] [COMPACTO_AUDIO_MEJOR].%%(ext)s" ^
--newline


rem ============================================================
rem GUARDAR RESULTADO
rem ============================================================

set "RESULTADO=%ERRORLEVEL%"

echo.
echo ============================================================

if "%RESULTADO%"=="0" (
    echo PROCESO TERMINADO CORRECTAMENTE
    echo RESULTADO: Correcto>>"%LOG%"
) else (
    echo EL PROCESO TERMINO CON UNO O MAS ERRORES
    echo Codigo de salida: %RESULTADO%
    echo RESULTADO: Error %RESULTADO%>>"%LOG%"
)

echo.
echo Fecha final: %date%
echo Hora final:  %time%
echo ============================================================

echo FIN: %date% %time%>>"%LOG%"
echo ============================================================>>"%LOG%"

echo.
pause

endlocal