¿Cómo mantener una lista de reproducción de YouTube sincronizada con una carpeta local como archivos mp3?

¿Cómo mantener una lista de reproducción de YouTube sincronizada con una carpeta local como archivos mp3?

¿Es posible mantener una lista de reproducción pública de YouTube sincronizada con una carpeta local como archivos mp3?

Caracteristicas claves:

  • Agregue el archivo mp3 a la carpeta local, si se agrega un nuevo video a la lista de reproducción
  • Elimine el archivo mp3 en la carpeta local, si el video respectivo se elimina de la lista de reproducción

Respuesta1

Puedes usaresteRepositorio de GitHub, que parece hacer exactamente lo que quieres.
O puedes usar simple youtube-dlcon --download-archive, como se ve en la página de manual de youtube-dl, aunque esto no eliminará ningún video:

¿Cómo descargo solo videos nuevos de una lista de reproducción?

Utilice la función de descarga y archivo. Con esta función, inicialmente debes descargar la lista de reproducción completa --download-archive path/to/download/archive/file.txtque registrará los identificadores de todos los videos en un archivo especial. Cada ejecución posterior con el mismo --download-archivedescargará solo videos nuevos y omitirá todos los videos que se hayan descargado anteriormente. Tenga en cuenta que en el archivo solo se registran las descargas exitosas.

Por ejemplo, al principio,
youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
descargará la lista de reproducción PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re completa y creará un archivo archive.txt. Cada ejecución posterior solo descargará videos nuevos, si los hay:
youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"

Respuesta2

Esto es más una solución alternativa que una respuesta directa, pero si está de acuerdo con volver a descargar ocasionalmente algunos de los archivos de listas de reproducción más antiguos, puede configurar un cronjob para buscar y eliminar archivos en un directorio de destino usando find.

Debes revisar la lista de reproducción y estimar cuánto tiempo suelen permanecer los archivos en ella antes de desaparecer, y usar esa cantidad de días para tu variable. Aquí en mi ejemplo elegí 30 días.

Aquí hay un ejemplo de script Bash para que cron se ejecute como un trabajo @daily:

#! /bin/bash

# Delete all files in a directory older than 30 days
# (careful, this is recursive and will delete files in subdirectories)
find /PATH/TO/youtube-dl-playlist-files -mtime +30 -delete

Todos los archivos que aún estén en la lista de reproducción pero que tengan más de 30 días se eliminarán y youtube-dl los volverá a descargar la próxima vez que lo ejecute. Esto no es óptimo pero puede ser suficiente.

información relacionada