
Можно ли синхронизировать общедоступный плейлист YouTube с локальной папкой в виде файлов mp3?
Основные характеристики:
- Добавить mp3-файл в локальную папку, если в плейлист добавлено новое видео
- Удалить mp3-файл в локальной папке, если соответствующее видео удалено из плейлиста
решение1
Вы можете использоватьэтотРепозиторий GitHub, который, кажется, делает именно то, что вам нужно.
Или вы можете использовать plain youtube-dl
with --download-archive
, как показано на странице руководства youtube-dl, хотя это не удалит никаких видео:
Как загрузить только новые видео из плейлиста?
Используйте функцию загрузки-архива. С помощью этой функции вы должны изначально загрузить полный плейлист,
--download-archive path/to/download/archive/file.txt
который запишет идентификаторы всех видео в специальный файл. Каждый последующий запуск с тем же самым--download-archive
будет загружать только новые видео и пропускать все видео, которые были загружены ранее. Обратите внимание, что в файл записываются только успешные загрузки.Например, сначала
youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
загрузим полный плейлист PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re и создадим файл archive.txt. Каждый последующий запуск будет загружать только новые видео, если таковые имеются:
youtube-dl --download-archive archive.txt "https://www.youtube.com/playlist?list=PLwiyx1dc3P2JR9N8gQaQN_BCvlSlap7re"
решение2
Это скорее обходной путь, чем прямой ответ, но если вас устраивает периодическая повторная загрузка некоторых старых файлов плейлистов, вы можете настроить cronjob для поиска и удаления файлов в целевом каталоге с помощью find
.
Вам следует просмотреть плейлист и оценить, как долго файлы обычно остаются в нем, прежде чем исчезнут, и использовать это количество дней для вашей переменной. Здесь, в моем примере, я выбрал 30 дней.
Вот пример скрипта Bash для запуска cron в качестве задания @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
Любые файлы, которые все еще находятся в плейлисте, но старше 30 дней, будут удалены, и youtube-dl повторно загрузит их при следующем запуске. Это не оптимально, но может быть достаточно.