Files
2026-11-13 23:37:32 +07:00
..
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00
2026-11-13 23:37:32 +07:00

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-ссылок из базы Эгеи

  1. Заполнить в .env DB_NAME, DB_USER, DB_PASS и при необходимости DB_HOST.
  2. Если база на хосте — убедиться, что MariaDB/MySQL слушает не только 127.0.0.1 (или использовать network_mode: host).
  3. Запуск:
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, error
  • failed.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 встроен в официальный бинарник.