yt-dlp: «Sign in to confirm you're not a bot» — что это значит и как исправить
Автор Команда TunelioОпубликовано Обновлено
Это бот-стена YouTube, а не ошибка yt-dlp: YouTube решил, что запрос выглядит автоматизированным, и требует проверенную сессию. Быстрое решение: обновить yt-dlp, поставить JavaScript-рантайм (Deno), повторить по IPv4. Если не помогло — ниже cookies, PO-токены и репутация IP в том порядке, который реально работает, и ошибки, которые всё портят.
Решение за 60 секунд (сначала это)
Большинство случаев решают три вещи: устаревший yt-dlp, отсутствие JavaScript-рантайма или IPv6-адрес, которому YouTube не доверяет. Выполните это до любых манипуляций с cookies:
# 1. обновление (для pip: pip install -U yt-dlp)
yt-dlp -U
# 2. JS-рантайм для решения челленджей YouTube — рекомендуется Deno
curl -fsSL https://deno.land/install.sh | sh
# 3. повтор по IPv4 с чистым кешем
yt-dlp -4 --rm-cache-dir "https://youtu.be/dQw4w9WgXcQ"Всё ещё блокирует? Читайте дальше. Порядок важен: каждый следующий шаг дороже и рискованнее предыдущего, а прыжок сразу к cookies — самый частый способ сделать проблему постоянной.
Что на самом деле означает ошибка
Когда yt-dlp запрашивает у YouTube данные плеера, YouTube оценивает запрос: IP-адрес и его историю, наличие валидного Proof-of-Origin (PO) токена, наличие сессионной cookie и количество недавних запросов с этого адреса. При плохой оценке вместо ответа плеера приходит стена входа, и yt-dlp печатает «Sign in to confirm you’re not a bot». Команда верная — YouTube просто не доверяет источнику.
Почему это происходит — четыре реальные причины
- Репутация IP. Диапазоны дата-центров (любой VPS, облако, CI-раннер) оцениваются намного ниже домашних подключений. На нашем парке экстракторов в августе 2026 примерно каждый четвёртый свежий выходной IP упирался в бот-стену с первого запроса, а с IPv6 хуже: YouTube оценивает весь /64 как единое целое, и один шумный сосед помечает весь блок.
- Нет PO-токена. С 2024 года YouTube ждёт Proof-of-Origin токен, который выдаёт его скрипт BotGuard. yt-dlp может получить его только через внешний JS-рантайм (Deno, Node, Bun) или плагин-провайдер; без него часть клиентов отклоняется сразу.
- Нет сессии. Анонимный запрос с помеченного IP выглядит ровно как скрейпер. Cookies из настоящей браузерной сессии поднимают оценку — поэтому они «работают» и поэтому перестают работать, когда IP слишком плох.
- Объём. Десятки запросов в минуту с одного адреса, особенно плейлисты и циклы повторов, срабатывают даже на чистом IP.
Исправляйте в этом порядке
1. Обновитесь до последнего релиза (или nightly)
YouTube меняет код плеера и подписей каждые несколько недель, yt-dlp выпускает исправления за дни. Сборка старше месяца ломается так, что это похоже на бот-проверку. Пакеты дистрибутивов сильно отстают — ставьте через pip или официальный бинарник и запускайте yt-dlp -U.
2. Установите JavaScript-рантайм
Актуальному yt-dlp нужен внешний JS-рантайм для решения челленджей YouTube и получения PO-токенов. Рекомендуется Deno; Node.js и Bun тоже подходят. Без него yt-dlp предупреждает об отсутствующих форматах и часто сразу упирается в стену. Проверьте через yt-dlp -v — строка про рантайм есть в отладочном заголовке.
3. Принудительно IPv4
yt-dlp -4 "https://youtu.be/dQw4w9WgXcQ" # или: --force-ipv4Если у сервера есть оба семейства адресов, yt-dlp может уйти по IPv6, где оценка YouTube жёстче (весь /64 судится как один адрес). Один этот флаг закрывает удивительно много случаев «на ноутбуке работает, на VPS нет» — ноутбуки обычно сидят на IPv4 за домашним роутером.
4. Cookies — из одноразовой сессии, никогда из основного аккаунта
Cookies говорят YouTube, что запрос принадлежит реальной сессии. Экспортируйте их из приватного окна браузера, где выполнен вход в запасной Google-аккаунт, и закройте окно, чтобы браузер не сменил сессию за вашей спиной. Не экспортируйте cookies своего повседневного аккаунта: автоматизированное использование с помеченного IP может привести к ограничению или блокировке аккаунта.
# экспортируйте cookies.txt расширением из приватного окна, затем:
yt-dlp --cookies cookies.txt -4 "https://youtu.be/dQw4w9WgXcQ"
# или читайте прямо из профиля браузера (для разового локального использования):
yt-dlp --cookies-from-browser chrome "https://youtu.be/dQw4w9WgXcQ"Cookies — заплатка, а не лечение: они истекают, а когда помечен сам IP, сессия уже не помогает. Если cookies работают день-два и перестают, проблема в адресе, а не в файле cookies.
5. Добавьте провайдер PO-токенов
Если отладочный вывод говорит, что клиенту нужен PO-токен, который yt-dlp не смог получить, поставьте плагин-провайдер, например bgutil-ytdlp-pot-provider. Он запускает небольшой сервис BotGuard, который автоматически выдаёт токены для yt-dlp. Это самое надёжное из решений «остаться на своём IP» — и его чаще всего пропускают.
6. Попробуйте другой клиент плеера
yt-dlp --extractor-args "youtube:player_client=tv" "https://youtu.be/dQw4w9WgXcQ"
# также стоит попробовать: android, mweb, web_embedded (у каждого свой набор форматов)YouTube оценивает каждый клиент по-своему, и список доверенных клиентов меняется каждые несколько недель — это обходной путь, а не решение. Некоторые клиенты не отдают 1080p+ или требуют собственных cookies.
7. Смените IP: резидентный прокси или другая сеть
Если чистый ноутбук на домашнем подключении скачивает то же видео без cookies, проблема в IP сервера, и никакой флаг её не решит. Пустите yt-dlp через резидентный или мобильный прокси (--proxy) или перенесите извлечение на машину с более чистым адресом. Ротация дешёвых дата-центровых прокси почти не помогает — их оценивают так же, как ваш VPS.
8. Сбавьте темп
yt-dlp --sleep-requests 2 --sleep-interval 5 --max-sleep-interval 15 --limit-rate 2M ...Циклы повторов — самый быстрый способ превратить временный челлендж в постоянно помеченный адрес. Делайте паузы, ограничьте параллельность одной-двумя загрузками и никогда не повторяйте запрос после бот-стены в тесном цикле.
Симптом → наиболее вероятная причина
- На ноутбуке работает, на VPS нет → репутация IP (шаг 3, затем 7).
- Ломается на всех видео после того, как вчера работало → YouTube что-то изменил; обновите (шаг 1) и проверьте JS-рантайм (шаг 2).
- С cookies работает день, потом снова нет → IP помечен; cookies не спасут (шаг 7).
- Падают только некоторые видео или форматы; -v упоминает PO token → провайдер PO-токенов (шаг 5) или другой клиент (шаг 6).
- Падает только на массовых запусках или плейлистах → оценка по объёму (шаг 8).
Ошибки, которые всё ухудшают
- Cookies личного Google-аккаунта на сервере — ограничить могут аккаунт, а не только IP.
- Запуск yt-dlp от root с общим замусоренным кешем; используйте --rm-cache-dir и кеш на пользователя.
- Смешивание файла cookies с клиентами, которые не должны использовать cookies (yt-dlp предупреждает об этом) — получаете худшее из обоих вариантов.
- Повтор каждые несколько секунд после челленджа; ждите минуты, а не секунды, и меняйте что-то между попытками.
Когда заплатки перестают окупаться
Если yt-dlp стоит под ботом, приложением или пайплайном, а не разовой загрузкой, стена превращается в эксплуатационную работу: ротация cookies, сервисы PO-токенов, резидентные выходы, ночные обновления. Хостинговый API держит всё это на своей стороне и отдаёт вашему коду ссылку:
curl "https://tunelio.dev/create?url=https://youtu.be/dQw4w9WgXcQ&quality=720p" \
-H "Authorization: Bearer tnl_your_api_key"
# → { "url": "https://…/tunnel?id=…&sig=…", "file_size_str": "28.52 MB", "status": "ok" }Tunelio — наш сервис, учитывайте это. Честная версия: если вы качаете несколько видео в неделю с домашнего подключения, оставайтесь на yt-dlp — шагов 1–3 хватит. Если вы воюете со стеной каждую неделю на серверах, дешевле перестать владеть этой проблемой. Новые аккаунты получают 100 бесплатных кредитов, карта не нужна.
Источники
- Wiki yt-dlp — «How do I pass cookies to yt-dlp?» и руководство по PO-токенам (github.com/yt-dlp/yt-dlp/wiki).
- README yt-dlp — требование JavaScript-рантайма для YouTube (рекомендуется Deno).
- bgutil-ytdlp-pot-provider — плагин-провайдер PO-токенов.
- Наши измерения (парк экстракторов Tunelio, август 2026): доля свежих выходов, попадающих на бот-стену; поведение оценки IPv6 /64.
Частые вопросы
Cookies всегда помогают?
Часто, но ненадолго. Cookies повышают доверие к запросу, но истекают, а сильно помеченный IP всё равно получает проверку. Если cookies перестают работать через день-два, реальная проблема — IP.
Безопасно ли использовать cookies своего Google-аккаунта?
На сервере — нет. Автоматизированное использование с помеченного адреса может привести к ограничению или блокировке аккаунта. Возьмите запасной аккаунт в приватном окне, экспортируйте один раз и закройте окно.
Почему на ноутбуке работает, а на сервере нет?
Ноутбук сидит на домашнем IPv4 с хорошей репутацией; сервер — в диапазоне дата-центра (часто по IPv6), который YouTube считает вероятным ботом. Сначала принудительный IPv4, затем резидентный выход.
Что такое PO-токен и нужен ли он мне?
Proof-of-Origin токен, который выдаёт скрипт BotGuard YouTube, чтобы подтвердить, что клиент — настоящий браузер. Часть клиентов без него отклоняется. yt-dlp получает его через JS-рантайм или плагин-провайдер.
Хостинговый API упрётся в ту же стену?
Он упирается в неё за вас и решает на своей стороне — свежие сессии, PO-токены и резидентные IP, — так что ваш код видит только ссылку на скачивание.