unzero

unzero

Пикабушник
Дата рождения: 1 июня
96К рейтинг 16 подписчиков 15 подписок 100 постов 32 в горячем
Награды:
Пикабу 17 лет! За надежную связь 10 лет на Пикабу
76

Скачиваем все видео с 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

https://bin.entware.net/mipselsf-k3.4/installer/mipsel-installer.tar.gz

Для 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

https://bin.entware.net/mipssf-k3.4/installer/mips-installer.tar.gz

Для Peak (KN-2710), Ultra (KN-1811), Giga (KN-1012), Hopper (KN-3811) и Hopper SE (KN-3812)

https://bin.entware.net/aarch64-k3.10/installer/aarch64-installer.tar.gz

Если вашего роутера тут нет, то придется поискать в гугле по запросу «скачать entware для keenetic KN-****», где **** - модель вашего Keenetic-а.

Заходим на роутер по 192.168.1.1 (или какой там у вас), переходим в раздел «Управление» - «Накопители и устройства» и выбираем свою флешку. В корне флешки создаем папку install если ее нет

Создать папку на флешке

Создать папку на флешке

и кнопкой «Загрузить файл в выбранную папку» загружаем скачанный ранее архив с Entware

Загружаем архив с Entware в папку install

Загружаем архив с Entware в папку install

После загрузки переходим в раздел «Управление» - «OPKG» и в выпадающем списке «Накопитель» выбираем нашу флешку

Вот эта вот с EXT4 в начале

Вот эта вот с EXT4 в начале

Теперь можно перейти в раздел «Управление» - «Диагностика» и по кнопке «Журнал» открыть журнал событий роутера. Если все правильно, то мы увидим процессы установки (нет у меня скрина журнала, к сожалению). Когда появится строка «"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, а домашние устройства оставить на прямом интернете, перестроим логику политик:

  1. Зайдите в веб-интерфейс Keenetic ➔ Сетевые правилаПриоритеты подключений.

  2. Вкладка Основная политика (в ней по умолчанию живут все системные процессы роутера и Entware): оставьте галочку только напротив вашего WireGuard-подключения. Все остальные галочки (основной провайдер) снимите.

  3. Нажмите кнопку + Добавить профиль в верхнем правом углу. Назовите его Домашняя сеть. Внутри этого профиля поставьте галочку только напротив вашего основного провайдера (интернета). Сохраните.

  4. Перейдите на вкладку Применение профилей (вверху страницы).

  5. Найдите ваш основной домашний сегмент (Домашняя сеть / Домашний сегмент) и перетащите его из профиля «Основной» в созданный профиль Домашняя сеть. Нажмите Сохранить.

Результат: Компьютеры и телефоны работают напрямую на максимальной скорости провайдера, а сам роутер и его фоновые службы (включая загрузчик) намертво заперты внутри WireGuard.


Шаг 2: Установка системных зависимостей в Entware

Подключитесь к Keenetic по SSH через установленный ранее PuTTy (стандартно 192.168.1.1 и порт 222; стандартные логин и пароль root и keenetic соответственно)

Кратко как подключиться по SSH через PyTTY к роутеру

Кратко как подключиться по SSH через PyTTY к роутеру

и последовательно выполните команды для разворачивания окружения:

Обновляем репозиторий пакетов 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” находим имя смонтированного тома.

У меня это вон тот здоровяк на 16,4Тб

У меня это вон тот здоровяк на 16,4Тб

Запоминаем его.

Создайте на вашем подключенном жестком диске целевую папку (в примере UUID диска — BE5895475894FEF9):

mkdir -p /tmp/mnt/BE5895475894FEF9/Youtube/

Поместите внутрь созданной папки два файла:

  1. cookies.txt — файл в формате Netscape cookie file, экспортированный из вашего браузера на ПК (с помощью расширения вроде Get cookies.txt LOCALLY). Он необходим утилите для авторизации в вашем аккаунте.

  2. 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

  1. Перейдите в режим ввода текста, вставьте следующую строчку:

0 1 * * * sh /opt/etc/config/youtube_updater.sh

  1. Обязательно нажмите Enter, чтобы под строкой осталась одна пустая строка (критическое требование парсера cron).

  2. Сохраните изменения и выйдите из редактора (для vi нажмите Esc, затем введите :wq и нажмите Enter).

Перезапустите планировщик для применения настроек:

/opt/etc/init.d/S10cron restart


Ручная проверка

В любой момент вы можете запустить комплекс вручную командой:

sh /opt/etc/config/youtube_updater.sh

Лог выполнения будет в реальном времени записываться в файл cron_daily.log на вашем жестком диске.

После запуска можно зайти в сетевую папку на кинетике в проводнике и проверить как лог, так и появление нужных нам видео в соответствующих папках.

Скрипт можно перенастроить на скачивание только новых видео (например, чтобы скачивать их ночью, а днем смотреть без задержки в 4К уже скачанное, если скорость интернета не позволяет смотреть онлайн или если к утру включат БС), настроить на скачивание сразу всех подписок (а не выборочных каналов) или на удаление очень старых видео. Простора для творчества масса, но статья была о базовой базе. Надеюсь, у вас тоже получится и мое потраченное время имеет смысл хоть для кого-то. Всем удачи в настройке! Если есть вопросы – задавайте.

P.S.: не уверен, что правильно выбрал сообщество, поправьте, если ошибся.

Показать полностью 13
1561

Ожидаемо

Может есть у кого связь с автором сайта? Пусть введут авторизацию какую. Через ВК, госуслуги или богопротивный макс. А то последняя возможность отслеживать появление бензина накроется медным тазом.

Показать полностью 2
245

Ответ на пост «А вот и первые киберпсихи»2

Дело не в зумерах, @olga.docent. На самом деле есть люди, которые не ведут внутреннего монолога. Судя по исследованиям это где-то 20% всех людей в мире. На пикабу уже обсуждалось: Внутренний монолог и его отсутствие
Вот для таких представление в голове разговора с ИИшкой и выглядит как какое-то невероятное изобретение.

1355

Ответ на пост «Звонок с налоговой»4

Ой, за 2025 год задолбали уже.

Эпизод 1.
- Здравствуйте, это налоговая. У вас несоответствие реальных и задекларированных доходов в 2025 году.
- Так 2025 еще не кончился. Какие ошибки в отсутствующей декларации?
- Ну там январь-февраль что-то как-то. Вам удобно будет подойти в налоговую в Сызрани?
- А почему в Сызрани?
- Пук-среньк, передам информацию другому специалисту, всего доброго.

Эпизод 2.
- Добрый день, налоговая беспокоит. У вас нестыковка в декларации за 2024.
- О, уже 2024...
- Что?
- Да ничего. Чего там?
- У вас нестыковка в доходах за май 2024 года. Нужно подойти для уточнений. Кто у вас подавал декларацию за 2024 год? Работодатель?
- А я безработный. Я не подаю деклараций.
- Вы должны были тогда подать нулевую декларацию.
- А вы на налоговый кодекс какой страны ориентируетесь? (Нулевую подают если налогооблагаемая база нулевая, то есть был доход, но со всеми вычетами платить не за что. У кого-нибудь студенты или безработные подают нулевую декларацию? Вот и у меня таких знакомых нет)
- Нашей страны...
- А Крым чей?
- Ну что за глупые вопросы вы задаете?..
- Нет, ты мне четко скажи: ЧЕЙ? КРЫМ?
*бросил трубку*

Эпизод 3:
- Здравствуйте, налоговая беспокоит. У вас ошибки в декларации за 2024 год. Кто подавал декларацию за вас? Работодатель? (Вот очень уж они хотят узнать где же я работаю)
- Вы видите мою декларацию и не знаете где я работаю?
- Ну да...
- Ладно, я сам на себя работаю. Вчерную. Оплату беру наличными.
- Хорошо, в отделение какого города вам будет удобно подойти для уточнения.
- Что значит "хорошо"? То есть вас не смущает, что я от налогов уклоняюсь?
- Ну, эээ...

Эпизод 4:
*звонит номер с кодом страны - Перу*
- Такой Такойтович, здравствуйте...
- Привет, как у вас в Перу погодка сейчас?
- Эээ... Такой Такойтович, добрый день, я...
- Какой день? У нас уже вечер. У вас еще день что ли?
- Да пошел ты...
*бросает трубку*

А ведь кто-то наверное ведется на эту лабуду, раз они продолжают такую схему использовать...

Показать полностью
4

Приложение трудовой инспекции работает только через VPN

Это нормально?

iOS, приложение обновлено, МТС, VPN сервер (прокси) в США.

4

Бросаю сахар

...в чай

История такая: решил я сократить потребление сахара на удельную чашку чая/кофе. Бросить одномоментно силы воли не хватает. Поэтому решено было сокращать постепенно. С трех ложек (грамм 18 где-то) до нуля. На работе ровно не отмерить граммы, чтобы понемногу снижать дозу, поэтому внимание было обращено на рафинад. А какой заказать? В одном кубики одного размера, у другого - другого и вес же разный будет. В интернете информации найти не удалось (может не умею искать, хз), так что я взял обошел всех коллег по работе и посчитал кол-во кубиков в каждой килограммовой (и не только) упаковке.

Теперь думаю, пусть эта информация будет в интернете. Может кому-то пригодится :)

Утруска не учитывается, само собой

Утруска не учитывается, само собой

P.S.: если у вас есть дома рафинад - поделитесь, пожалуйста, подсчетами! Буду очень признателен!

877

Ответ на пост «Anydesk vs Роскомнадзор»11

Недавно мы узнали, что сосед может пырнуть нас ножом и нам придется экстренно вызывать скорую помощь, чтобы не умереть. Поэтому было решено самостоятельно пырнуть себя ножом, чтобы лишить соседа возможности застать нас врасплох. При вызове скорой оказалось, что телефонная линия к ним не проведена. Мы отправили голубя. Истекаем кровью ждем ответного гонца.

10

Ответ на пост «Вот бы»1

Игры научили меня тому, что если выбирать более сложный путь, то получишь больше опыта, качаешься быстрее и сюжет будет даваться проще (если нет богомерзкого автолевелинга, конечно).

Отличная работа, все прочитано!

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества