yt-dlp 2026.10.26 + Egea YouTube checker
Минимальный образ: официальный zipimport-бинарник yt-dlp 2026.10.26, Python 3.11 (slim), ffmpeg/ffprobe, Deno 2.9.8, mysql-client и скрипт проверки ссылок из базы Эгеи.
Официальный репозиторий: https://github.com/yt-dlp/yt-dlp
Файлы
yt-dlp-docker/
Dockerfile
docker-compose.yml
.env.example
egea-youtube-check.sh
downloads/ # монтируется в /downloads
output/ # монтируется в /output (результаты проверки)
Параметры (.env)
| Переменная | По умолчанию | Назначение |
|---|---|---|
| YTDLP_URL | https://github.com/yt-dlp/yt-dlp/releases/download/2026.10.26/yt-dlp | URL бинарника (build arg) |
| DENO_VERSION | 2.9.8 | Версия Deno (build arg) |
| SOCKS5_PROXY | пусто | SOCKS5 для yt-dlp (host:port или socks5h://…) |
| ALL_PROXY | = SOCKS5_PROXY | Альтернативный способ задать прокси |
| DOWNLOAD_DIR | ./downloads | Каталог загрузок на хосте |
| OUTPUT_DIR | ./output | Каталог отчётов проверки |
| UID / GID | 1000 | Пользователь контейнера |
| DB_HOST | host.docker.internal | Хост MariaDB/MySQL с базой Эгеи |
| DB_PORT | 3306 | Порт БД |
| DB_NAME | — | Имя базы |
| DB_USER | — | Пользователь |
| DB_PASS | — | Пароль |
| DB_PREFIX | e2Blog | Префикс таблиц |
| DB_SUBSET | 1 | SubsetID блога |
| SITE_BASE | пусто | Базовый URL сайта (для href в map.tsv / report). Эгея кладёт заметки в /all/<alias>/, скрипт сам добавит префикс. |
| SLEEP_SEC | 1 | Пауза между проверками |
Использование
cd yt-dlp-docker
cp .env.example .env
# отредактировать .env (прокси, при необходимости параметры БД)
docker compose build
Просто yt-dlp
docker compose run --rm yt-dlp --version
docker compose run --rm yt-dlp --skip-download "https://www.youtube.com/watch?v=jNQXAC9IVRw"
docker compose run --rm yt-dlp -o "%(title)s.%(ext)s" "URL"
Проверка YouTube-ссылок из базы Эгеи
- Заполнить в
.envDB_NAME,DB_USER,DB_PASSи при необходимостиDB_HOST. - Если база на хосте — убедиться, что MariaDB/MySQL слушает не только 127.0.0.1 (или использовать network_mode: host).
- Запуск:
docker compose --profile check run --rm egea-check
Теперь скрипт печатает прогресс в реальном времени (в stderr):
[1/40] dQw4w9WgXcQ ... ok Never Gonna Give You Up
[2/40] xxxxxxxx ... unavailable ERROR: Video unavailable
[3/40] yyyyyyyy ... timeout timeout after 45s (proxy/network?)
Каждая строка появляется сразу после проверки ролика. Таймаут на один ролик — 45 секунд.
Результаты в ./output/:
urls.txt— уникальные ссылкиmap.tsv— соответствие video_id → посты/ответыreport.tsv— полный отчёт. Статусы:ok,unavailable,private,copyright,timeout,network,errorfailed.tsv— всё, что неok(с тем же статусом)err-*.txt— сырые ошибки для мёртвых роликов
В обоих отчётах колонка notes содержит href заметки (если задан SITE_BASE) или alias / note:ID. Если ролик в нескольких заметках — они перечислены через ; .
Пример failed.tsv:
video_id status detail notes
dQw4w9... unavailable ERROR: Video unavailable https://blog.m9k.space/all/tema-vechera-7/
Deno включён по умолчанию, yt-dlp-ejs встроен в официальный бинарник.