Почему скачивание с YouTube останавливается на 360p
YouTube отдаёт полный MP4 — картинку и звук в одном файле — только в скромных разрешениях. Всё выше хранится отдельными потоками, которые нужно объединять, а этот инструмент не объединяет.
Это самая частая неожиданность на странице YouTube, поэтому скажем сразу: потолок обычно 360p, иногда 240p, и это не настройка, которую можно поднять. Загрузчик предлагает прогрессивный MP4, который YouTube публикует как один файл. Версия 1080p на стороне YouTube существует, но не как единый файл.
Смикшированное и адаптивное — две разные вещи
YouTube хранит каждое видео в двух видах. Смикшированные форматы несут картинку и звук вместе в одном MP4 — файл, который можно сохранить и воспроизвести где угодно. Адаптивные форматы разделяют их: видеопоток отдельно и аудиопоток отдельно, каждый закодирован с тем битрейтом, который YouTube выбрал для этого разрешения.
Воспроизвести 1080p в браузере легко, потому что плеер забирает оба потока и соединяет их на лету. Сохранить 1080p одним файлом — другая задача: что-то должно слить дорожки. Этот загрузчик не несёт микшера, поэтому он перечисляет только смикшированные форматы — а YouTube всё чаще отдаёт их в 360p и ниже. Смикшированный формат 720p, который когда-то существовал, больше не отдаётся анонимным клиентам.
Что делает резолвер
- Он обращается к плеерному эндпоинту YouTube с лестницей официальных клиентских идентификаторов, от клиента Android до встроенного веб-плеера.
- Он оставляет только смикшированные записи MP4, дедуплицированные по их format id.
- Каждую строку он подписывает собственным ярлыком качества YouTube, откатываясь к высоте кадра.
- Если плеер отказывает, проба oEmbed всё равно подсказывает, существует ли видео, поэтому удалённое видео не путается с заблокированным.
Лестница клиентов — причина того, что видео, не удавшееся с одной попытки, может удаться со следующей: разным клиентам предлагаются разные форматы, и YouTube со временем меняет, какие из них доступны.
Почему ссылка открывается в новой вкладке
Байты видео приходят с googlevideo.com, который не отправляет заголовки CORS. Страница не может их прочитать, поэтому кнопка скачивания вместо этого ведёт по ссылке — ваш браузер сохраняет файл прямо с CDN Google. Две детали заставляют этот переход работать правильно: резолвер добавляет к URL параметр title, из-за чего сервер Google отвечает content-disposition: attachment, и файл сохраняется, а не воспроизводится во вкладке.
Почему ничего не кэшируется
Результат каждой другой платформы кэшируется на пару минут или дольше. Результат YouTube не кэшируется никогда, намеренно: ссылки googlevideo.com привязаны к адресу, который их запросил, и быстро истекают. Кэшированная ссылка выглядела бы кнопкой скачивания, а падала бы как мёртвая ссылка, поэтому резолвер каждый раз спрашивает YouTube заново.
Что не поддерживается
| Случай | Результат |
|---|---|
| Публичное видео | Разрешается; смикшированные форматы MP4, которые предлагает YouTube. |
| Приватное, только для участников, с возрастным ограничением | private — резолвер никогда не входит в аккаунт. |
| Удалённое или снятое видео | not_found. |
| Прямой эфир в процессе | Пока эфир идёт, смикшированного файла не существует. |
| Shorts | Работают как любое другое видео, с тем же потолком разрешения. |
Коротко
- Предлагается только смикшированный MP4, обычно это 360p.
- Более высокие разрешения требуют слияния отдельных видеопотока и аудиопотока; этот инструмент их не сливает.
- Ничего не перекодируется, не помечается водяным знаком и не сохраняется.
- Ссылки никогда не кэшируются, потому что привязаны к вашему адресу и истекают.
- Только публичные видео — приватные и с возрастным ограничением остаются заблокированными.
Вопросы
Можно ли этим скачать 1080p с YouTube?
Нет. YouTube хранит 1080p как отдельные видеопоток и аудиопоток, а этот инструмент их не сливает. Он предлагает смикшированный MP4, который YouTube публикует одним файлом, обычно это 360p.
Почему видео открывается в новой вкладке, а не скачивается в странице?
Потому что `googlevideo.com` не отправляет заголовки CORS, и страница не может прочитать байты. Ссылка несёт параметр title, из-за которого Google отвечает `content-disposition: attachment`, и ваш браузер сохраняет файл, а не воспроизводит его.
Почему одна и та же ссылка иногда перечисляет разные качества?
Резолвер спрашивает YouTube через несколько официальных клиентских идентификаторов, и им предлагаются не одни и те же форматы. Повторное получение ссылки через момент может изменить список.