Перейти к содержимому

yt-dlp «HTTP Error 404: Not Found» — что это значит и как исправить каждую причину

Автор Команда TunelioОпубликовано

404 от yt-dlp означает, что запрошенного больше нет по этому адресу. Обычно это само видео: удалено, сделано приватным или опечатка в ID. Иногда — медиафрагмент, чья подписанная ссылка истекла, удалённый элемент плейлиста или устаревший yt-dlp, стучащийся в перенесённый YouTube endpoint. Проверьте ссылку в браузере, обновите yt-dlp и прочитайте вывод -v — раздел ниже подскажет, какой у вас случай.

Сначала две команды

yt-dlp -U                       # устаревшая сборка даёт 404 на endpoint'ах, которые YouTube перенёс
yt-dlp -vU --rm-cache-dir "URL"  # подробно: ГДЕ случился 404 — страница, API-вызов или медиафрагмент?

Затем откройте ту же ссылку в браузере. Если браузер тоже показывает «Видео недоступно», никакая опция yt-dlp не поможет; если браузер играет — причина одна из технических ниже.

Причина 1: видео удалено, приватно или неверный ID

Самый частый 404. Видео удаляют авторы, снимают за нарушения, переводят в приватные или ограниченные. ID видео — ровно 11 символов (буквы, цифры, - и _); скопированная ссылка с лишним символом, пропущенным символом или мусором трекинга внутри ID даёт чистый 404. Обычно yt-dlp сообщает это как «Video unavailable», «This video has been removed» или «Private video», а не как голый 404, но некоторые пути выводят HTTP-статус напрямую.

# нормализуйте ссылку сами: watch?v=ID, youtu.be/ID, shorts/ID — все работают
yt-dlp "https://www.youtube.com/watch?v=dQw4w9WgXcQ"

Приватным видео, открытым вашему аккаунту, нужны cookies этого аккаунта (см. руководство по cookies); видео с возрастным ограничением дают другую ошибку и тоже хотят cookies или другой клиент.

Причина 2: медиа-ссылка истекла (404 посреди загрузки или на фрагментах)

Ссылки googlevideo, которые получает yt-dlp, подписаны и действуют около шести часов. Если загрузку поставили на паузу и возобновили много позже, или скрипт извлёк ссылку и использовал её через часы, медиасервер отвечает 404 (или 403). Фрагментированные форматы показывают это как «fragment N not found». Перезапустите извлечение — yt-dlp -c докачает файл со свежими ссылками.

yt-dlp -c --fragment-retries 10 --retries 5 "URL"

Причина 3: в плейлисте или канале есть удалённые элементы

yt-dlp --ignore-errors --download-archive done.txt "PLAYLIST_URL"

Плейлисты хранят ссылки на видео, которых уже нет. Без --ignore-errors (-i) yt-dlp прерывает весь запуск на первом мёртвом элементе; с ним элемент пропускается и логируется. --download-archive делает повторные запуски инкрементальными, чтобы не биться в те же мёртвые элементы каждый раз.

Причина 4: устаревший yt-dlp стучится в перенесённый endpoint

YouTube меняет внутренние пути API и расположение файлов плеера. yt-dlp многомесячной давности может запросить JS плеера или маршрут API, которых больше нет, и сообщить полученный 404 как ошибку извлечения. Лечится только обновлением (см. руководство по обновлению) — и проверьте, что копия в PATH именно та, что вы обновили.

Причина 5: региональные и аккаунтные ограничения, выглядящие как 404

Некоторые гео-заблокированные и «только для участников» видео отдают страницы «недоступно», которые отдельные ветки кода выводят как 404. При гео-блокировке попробуйте другую сеть или прокси (руководство по прокси); контенту для участников нужны cookies подписанного аккаунта.

Симптом → причина

  • Браузер тоже говорит «недоступно» → удалено/приватно/неверный ID (причина 1). С вашей стороны исправлять нечего.
  • Браузер играет; -v показывает 404 на URL плеера/API → устаревший yt-dlp (причина 4).
  • Загрузка начинается, потом 404 на фрагментах или после возобновления → истёкшая подписанная ссылка (причина 2); переизвлеките с -c.
  • Падают только некоторые элементы плейлиста → удалённые записи (причина 3); добавьте --ignore-errors.
  • Падает только с сервера, дома работает → регион/IP (причина 5) — или это на самом деле 403; см. руководство по 403.

В скрипте или боте

Считайте 404 постоянной ошибкой для этого видео (не повторяйте в цикле — повторы ничего не дают для удалённого видео и сжигают репутацию IP), логируйте ID видео и точное сообщение и идите дальше. Если вы разрешаете ссылки заранее, всегда разрешайте заново перед загрузкой, а не кешируйте подписанные ссылки.

Хостинговый API делает эту классификацию за вас: Tunelio (наш сервис) возвращает понятный 404 с сообщением для приватных или удалённых видео и возвращает кредиты за запрос, так что бот может ответить пользователю без разбора вывода yt-dlp. Новые аккаунты получают 100 бесплатных кредитов.

Источники

  • README yt-dlp — опции загрузки (-c, --fragment-retries, --retries), --ignore-errors, --download-archive.
  • Wiki yt-dlp — FAQ о «Video unavailable» и устаревших версиях.
  • Трекер yt-dlp — сообщения о 404, связанные с истёкшими ссылками фрагментов и перенесёнными файлами плеера.

Частые вопросы

404 значит, что мой IP заблокирован?

Нет — блокировки выглядят как 403 или сообщение бот-проверки. 404 означает, что ресурса нет по этой ссылке: обычно удалённое/приватное видео, истёкшая медиа-ссылка или устаревший yt-dlp, запрашивающий перенесённый endpoint.

Как скачать приватное видео через yt-dlp?

Только если ваш аккаунт его видит: передайте cookies этого аккаунта (--cookies cookies.txt, экспортированные из приватного окна). Иначе останется 404/недоступно.

Почему плейлист останавливается на 404?

По умолчанию yt-dlp прерывается на первой ошибке. Добавьте --ignore-errors, чтобы пропускать мёртвые элементы, и --download-archive для инкрементальных перезапусков.

Вчера видео играло, сегодня 404 — что изменилось?

Либо автор удалил или закрыл его, либо вы переиспользовали подписанную медиа-ссылку, которая истекла (~6 ч). Перезапустите извлечение; если и браузер не играет — видео исчезло.

Похожие руководства