Скачиваем все видео с Youtube в автоматическом режиме при помощи Keenetic
Всем привет! В связи с частыми отключениями «свободного» интернета в наших краях (СПб) и включением белых списков, от которых с каждым днем спасает все меньше и меньше сервисов, решил я озадачиться скачиванием своих любимых видео из Youtube на локальный носитель. Но при этом не хочется оставлять компьютер включенным, а процесс подгрузки новых видео сделать автоматическим. Тут я вспомнил, что на мой любимый Keenetic Hopper (KN-3811) в рамках поддержки OPKG можно ставить исполняшки на python, в том числе популярную утилиту для скачивания видео с YT – yt-dlp.
Значит так, что нам понадобится:
Роутер Keenetic с USB портом и настроенным прокси/VPN (по понятным причинам настройку в этой статье обсуждать не будем);
Флешка хотя бы в 1Гб;
Жесткий диск, куда будем качать видео (SSD, HDD с переходником или просто большая флешка);
USB-hub для подключения флешки и жесткого диска одновременно (если USB порт всего 1);
Около часа времени.
Также нам понадобятся следующие программы/плагины:
PuTTY для подключения к роутеру по SSH (вроде можно подключаться через родной виндовый power shell, но я не пробовал);
Расширение для хрома «Get cookies.txt LOCALLY» (в рамках статьи будет использоваться браузер Google Chrome, но оно вроде на всех хромоподобных браузерах одинаковое);
DiskGenius для форматирования флешки в ext4;
Установщик Entware для вашего роутера.
ГОТОВИМ ФЛЕШКУ
Скачиваем и устанавливаем DiskGenius (можно с оф сайта не крякнутый, функций нам хватит) и форматируем с его помощью флешку в ext4.
После успешного форматирования подключаем флешку через USB-хаб (это важно) к роутеру.ГОТОВИМ РОУТЕР
Для начала советую обновиться до актуальной версии прошивки на роутере (у меня на момент настройки версия 5.1.1). Это можно сделать в разделе «Управление» - «Настройки системы». Там же нужно догрузить необходимые компоненты (кнопка «Изменить набор компонентов»), а именно:
Файловая система ext;
Утилиты для файловой системы ext;
Поддержка открытых пакетов;
Модули ядра для поддержки файловых систем;
Общий доступ к файлам и принтерам по протоколу SMB;
Сервер SSH.
Еще раз напомню, что ютуб сам по себе должен быть доступен для просмотра. Либо нативно, либо через иные способы, но сам роутер должен видеть ютуб.
После установки всех компонентов и перезагрузки роутера глянем, определилась ли флешка, перейдя в раздел «Управление» - «Накопители и устройства». Скорее всего будет написано «Требуется действие». Нажмите на флешку и проведите ее инициализацию (кинетик сам форматнет ее еще раз). После того, как флешка станет активна, можно начать установку Entware (это легковесная версия OpenWRT для Keenetic). Для этого качаем с официального сайта нужный нам архив.
Для 4G (KN-1212), Omni (KN-1410), Extra (KN-1710/1711/1713), Giga (KN-1010/1011), Ultra (KN-1810), Viva (KN-1910/1912/1913), Giant (KN-2610), Hero 4G (KN-2310/2311), Hopper (KN-3810) и Zyxel Keenetic II / III, Extra, Extra II, Giga II / III, Omni, Omni II, Viva, Ultra, Ultra II
Для Ultra SE (KN-2510), Giga SE (KN-2410), DSL (KN-2010), Skipper DSL (KN-2112), Duo (KN-2110), Ultra SE (KN-2510), Hopper DSL (KN-3610) и Zyxel Keenetic DSL, LTE, VOX
Для Peak (KN-2710), Ultra (KN-1811), Giga (KN-1012), Hopper (KN-3811) и Hopper SE (KN-3812)
Если вашего роутера тут нет, то придется поискать в гугле по запросу «скачать entware для keenetic KN-****», где **** - модель вашего Keenetic-а.
Заходим на роутер по 192.168.1.1 (или какой там у вас), переходим в раздел «Управление» - «Накопители и устройства» и выбираем свою флешку. В корне флешки создаем папку install если ее нет
и кнопкой «Загрузить файл в выбранную папку» загружаем скачанный ранее архив с Entware
После загрузки переходим в раздел «Управление» - «OPKG» и в выпадающем списке «Накопитель» выбираем нашу флешку
Теперь можно перейти в раздел «Управление» - «Диагностика» и по кнопке «Журнал» открыть журнал событий роутера. Если все правильно, то мы увидим процессы установки (нет у меня скрина журнала, к сожалению). Когда появится строка «"Entware" installed!» можно продолжать.
Итак, флешка и Entware у нас есть. Теперь нужно подключить хранилище. Отформатируйте свой жесткий, который хотите подключить к роутеру, на ПК. Советую выбирать размер кластера в 64Кб, это максимум, который поддерживает роутер и достаточно большой размер для сокращения кол-ва операций чтение/запись.
В итоге у вас должны появиться в накопителях три устройства: сам роутер, флешка с Entware и наше будущее хранилище.
Если роутер отказывается работать с HDD из коробки, то инициализируйте его как это было сделано ранее с флешкой. Тогда роутер сам отформатирует (обратите внимание) жесткий диск в формате ext4 (ему в нем удобнее).
Далее откроем доступ к хранилищу по SMB. Перейдем в раздел «Управление» - «Приложения». Нам кликните на «СЕРВЕР SMB» и убедитесь, что ваши новые хранилища (жесткий диск и флешка) смонтировались.
Если нет, то нажмите «Добавить общий ресурс» и выберите нужный вам жесткий диск из списка и нажмите кнопку «Выбрать». После этого в проводнике компьютера (для тех, кому за 30 – «Мой компьютер»), в разделе сеть должен появиться ваш кинетик, а в нем – смонтированный жесткий диск.
На этом базовый минимум настройки роутера закончен. О том, как настраивать обходы, я рассказывать не буду. У меня в тот момент стоял WireGuard, так что буду в рассказе опираться на него.
ГОТОВИМ ФАЙЛЫ И ПК
Теперь заранее подготовим компьютер.
Скачайте PuTTY с официального сайта https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
Установите в браузер расширение «Get cookies.txt LOCALLY» https://chromewebstore.google.com/detail/get-cookiestxt-locally/cclelndahbckbenkjhflpdbgdldlbecc
Перейдите на ютуб, авторизуйтесь, откройте Get cookies через верхнее меню браузера или через его общее меню и нажмите «Export»
Сохраните файл куки и переименуйте его в cookies.txt
Теперь создайте файл archive.txt и файл chan.txt. В последний запишите ссылки на каналы, которые хотите скачивать (по одному в строчку).
Положите файлы cookies.txt, archive.txt и chan.txt в папку роутера Сеть/Keenetic/*ВАШ_ЖЕСТКИЙ_ДИСК*/Youtube/
Вроде все. Все файлы готовы для работы. Переходим к настройке самого роутера и скачивания (остальной текст я заимствовал у гемини, который помогал мне с первоначальной настройкой, но внес некоторые правки и уточнения).
Шаг 1: Настройка маршрутизации в веб-интерфейсе Keenetic
Чтобы направить трафик роутера через VPN, а домашние устройства оставить на прямом интернете, перестроим логику политик:
Зайдите в веб-интерфейс Keenetic ➔ Сетевые правила ➔ Приоритеты подключений.
Вкладка Основная политика (в ней по умолчанию живут все системные процессы роутера и Entware): оставьте галочку только напротив вашего WireGuard-подключения. Все остальные галочки (основной провайдер) снимите.
Нажмите кнопку + Добавить профиль в верхнем правом углу. Назовите его Домашняя сеть. Внутри этого профиля поставьте галочку только напротив вашего основного провайдера (интернета). Сохраните.
Перейдите на вкладку Применение профилей (вверху страницы).
Найдите ваш основной домашний сегмент (Домашняя сеть / Домашний сегмент) и перетащите его из профиля «Основной» в созданный профиль Домашняя сеть. Нажмите Сохранить.
Результат: Компьютеры и телефоны работают напрямую на максимальной скорости провайдера, а сам роутер и его фоновые службы (включая загрузчик) намертво заперты внутри WireGuard.
Шаг 2: Установка системных зависимостей в Entware
Подключитесь к Keenetic по SSH через установленный ранее PuTTy (стандартно 192.168.1.1 и порт 222; стандартные логин и пароль root и keenetic соответственно)
и последовательно выполните команды для разворачивания окружения:
Обновляем репозиторий пакетов Entware:
opkg update
Устанавливаем Python 3 и менеджер пакетов pip:
opkg install python3 python3-pip
Устанавливаем ffmpeg для склейки видео и аудио дорожек высокого разрешения:
opkg install ffmpeg
Устанавливаем QuickJS — микро-движок JavaScript:
opkg install quickjs
Устанавливаем службу планировщика задач (cron):
opkg install cron
Разрешаем запуск службы cron и поднимаем её в фоне:
chmod +x /opt/etc/init.d/S10cron
/opt/etc/init.d/S10cron start
Шаг 3: Установка и обновление пакета yt-dlp
Устанавливаем сам парсер вместе с официальным пакетом скриптов дешифрации сигнатур (yt-dlp-ejs) напрямую из библиотеки Python:
python3 -m pip install -U "yt-dlp[default]"
Шаг 4: Подготовка рабочих файлов на жестком диске
Для начала узнаем под каким именем смонтирован HDD в системе:
df -h
В столбце «Size» ищем наиболее подходящее под нашу железку значение (у меня это 16.4Т), а рядом с ней в столбце “Mounted on” находим имя смонтированного тома.
Запоминаем его.
Создайте на вашем подключенном жестком диске целевую папку (в примере UUID диска — BE5895475894FEF9):
mkdir -p /tmp/mnt/BE5895475894FEF9/Youtube/
Поместите внутрь созданной папки два файла:
cookies.txt — файл в формате Netscape cookie file, экспортированный из вашего браузера на ПК (с помощью расширения вроде Get cookies.txt LOCALLY). Он необходим утилите для авторизации в вашем аккаунте.
chan.txt — резервный текстовый файл со ссылками на каналы (по одной на строку), если захотите качать конкретный список, а не весь фид подписок.
Шаг 5: Создание финального очищенного скрипта загрузки
Создайте чистый Bash-скрипт в защищенной системной папке роутера, которая поддерживает обход ограничений NTFS-дисков (на случай, если HDD все-таки подтянулся в NTFS, а не в ext4) (noexec):
cat << 'EOF' > /opt/etc/config/youtube_updater_new.sh
#!/bin/sh
# 1. Задаем системные пути, чтобы cron видел python, yt-dlp и quickjs
export PATH=/opt/bin:/opt/sbin:/usr/bin:/usr/sbin:/bin:/sbin
# 2. Принудительно включаем поддержку UTF-8 (защита от зависания аудио на 127 КБ)
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# 3. Проверка: смонтировано ли хранилище?
if ! mountpoint -q " /tmp/mnt/BE5895475894FEF9"; then
logger -t youtube_updater "Ошибка: Хранилище $MOUNT_DIR не смонтировано. Выход."
exit 1
fi
# 4. Запуск yt-dlp с фильтрацией шортсов/стримов и загрузкой фида личных подписок
/opt/bin/yt-dlp \
--cookies /tmp/mnt/BE5895475894FEF9/Youtube/cookies.txt \
--remote-components ejs:github \
--js-runtimes quickjs \
--match-filter "original_url !*=/shorts/ & !is_live & !was_live" \
--playlist-end 3 \
--playlist-reverse \
-o "/tmp/mnt/BE5895475894FEF9/Youtube/%(channel)s/%(upload_date)s_%(title)s.%(ext)s" \
-f "398+140/bestvideo+bestaudio" \
"ytsubs://" \
--download-archive "/tmp/mnt/BE5895475894FEF9/Youtube/archive.txt" \
-i >> /tmp/mnt/BE5895475894FEF9/Youtube/cron_daily.log 2>&1
EOF
Если вы хотите качать шортсы, то замените строчку
--match-filter "original_url !*=/shorts/ & !is_live & !was_live" \
на
--match-filter "original_url !*=!is_live & !was_live" \
А если хотите оставить стримы, то замените
--match-filter "original_url !*=/shorts/ & !is_live & !was_live" \
на
--match-filter "original_url !*=/shorts/ \
Если нужны все видео, то просто уберите строчку
--match-filter "original_url !*=/shorts/ & !is_live & !was_live" \
целиком.
Скрипт будет скачивать видео в формате 720р, а если его нет, то в лучше доступном. Если вы хотите выбрать другие варианты, то замените 398+140 на один из списка
📹 Видео (первая цифра)
🎧 Аудио (вторая цифра)
То есть видео в 4К (кодек H264) с максимальным звуком (при их наличии) будет 266+251, а строка примет вид
-f "266+251/bestvideo+bestaudio" \
Примечание: пробелы в начале строк важны, потому что python относится к ним ревностно.
Сделайте созданный скрипт исполняемым в системе:
chmod +x /opt/etc/config/youtube_updater.sh
Шаг 6: Настройка ночного расписания в планировщике
Чтобы запустить автоматическую проверку раз в сутки, откройте менеджер личных задач пользователя root (в нем откроется встроенный текстовый редактор):
crontab -e
Перейдите в режим ввода текста, вставьте следующую строчку:
0 1 * * * sh /opt/etc/config/youtube_updater.sh
Обязательно нажмите Enter, чтобы под строкой осталась одна пустая строка (критическое требование парсера cron).
Сохраните изменения и выйдите из редактора (для vi нажмите Esc, затем введите :wq и нажмите Enter).
Перезапустите планировщик для применения настроек:
/opt/etc/init.d/S10cron restart
Ручная проверка
В любой момент вы можете запустить комплекс вручную командой:
sh /opt/etc/config/youtube_updater.sh
Лог выполнения будет в реальном времени записываться в файл cron_daily.log на вашем жестком диске.
После запуска можно зайти в сетевую папку на кинетике в проводнике и проверить как лог, так и появление нужных нам видео в соответствующих папках.
Скрипт можно перенастроить на скачивание только новых видео (например, чтобы скачивать их ночью, а днем смотреть без задержки в 4К уже скачанное, если скорость интернета не позволяет смотреть онлайн или если к утру включат БС), настроить на скачивание сразу всех подписок (а не выборочных каналов) или на удаление очень старых видео. Простора для творчества масса, но статья была о базовой базе. Надеюсь, у вас тоже получится и мое потраченное время имеет смысл хоть для кого-то. Всем удачи в настройке! Если есть вопросы – задавайте.
P.S.: не уверен, что правильно выбрал сообщество, поправьте, если ошибся.
























