habrahabr

Скачиваем и смотрим YouTube на своём хостинге

  • пятница, 15 ноября 2024 г. в 00:00:10
https://habr.com/ru/articles/857964/

У пользователей в РФ возникли затруднения с доступом к YouTube. Причины известны, как и варианты решения. Однако это битва кота и мыши: ТСПУ эволюционируют, и популярные инструменты часто перестают работать.

Чуть надёжнее использовать свою инфраструктуру в зарубежном дата-центре. Так можно скачать контент с YouTube на свой сервер, а оттуда раздать трафик внутри РФ любым удобным способом без всяких «замедлений».

Получается что-то вроде зарубежного прокси для YouTube. И это совершенно легально (пока).

Система простая: поднимаем дешёвый сервер в любом зарубежном дата-центре. Например, двухъядерный сервер от RUVDS в немецком ДЦ под Ubuntu 22.04 (2 ГБ RAM, 20 ГБ HDD, выделенный IP-адрес) обошелся мне в 1358 рублей в месяц. Аналогичные варианты есть у FirstVDS и Timeweb, например в Нидерландах (вот тут можете найти мой недавний обзор на эти серверы). 

Получив сервер за рубежом, скачиваем туда любые видеоролики YouTube без всяких «замедлений».

yt-dlp

Первый вариант получить «запретный» контент — поставить простую скачивалку файлов. Например, утилиту yt-dlp.

Установка под Ubuntu из официального репозитория:

$ sudo apt install yt-dlp

Напрямую с GitHub:

$ sudo wget https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -O /usr/local/bin/yt-dlp

$ sudo chmod a+rx /usr/local/bin/yt-dlp

Через питоновский пакетный менеджер Pip:

$ python3 -m pip install -U yt-dlp

Минималистичная установка без необязательных зависимостей:

$ python3 -m pip install --no-deps -U yt-dlp

Вместе с yt-dlp желательно поставить ещё ffmpeg для постпроцессинга (транскодирование, редактирование). Две утилиты командной строки хорошо работают в связке.

$ sudo apt-get install ffmpeg

Для удобства использования можно установить также ytdl-webserver, веб-сервер для yt-dlp. Просто заходим на свой VPS по выделенному IP-адресу, вводим URL видеоролика на YouTube — и спокойно скачиваем его.

NewPipe под Linux

NewPipe — известный опенсорсный клиент для YouTube под Android, который позволяет просматривать YouTube без рекламы и удобно скачивать видео/аудио из любого канала — вышел под Linux. Это не отдельная версия клиента, а оригинальная Android-версия, которая работает через Android Translation Layer (ATL).

Кстати, недавно вышел NewPipeX — форк NewPipe, написанный на старой оригинальной кодовой базе до массивной переделки старого NewPipe с интегрированной функциональностью SponsorBlock и Return YouTube Dislike, которых нет в NewPipe. То есть NewPipeX — это в своём роде «классическая» версия NewPipe. Возможно, она тоже заработает под Linux через слой ATL, как и другие Android-приложения:

Разумеется, есть и нативные десктопные YouTube-клиенты, такие как FreeTube:

Форки и альтернативы

Консольные инструменты для скачивания контента с YouTube берут своё начало с питоновской утилиты youtube-dl, которую написал испанский разработчик Рикардо Гарсия Гонсалес в 2006 году. Этот проект поставил абсолютный рекорд GitHub по количеству звёзд, сейчас у самого популярного форка более 132 тыс. звёзд.

После длительного преследования со стороны правообладателей из RIAA разработку утилиты пришлось прекратить в 2021 году. Проект по запросу DMCA был удалён с GitHub (как известно, этот хостинг кода принадлежит корпорации Microsoft). В августе 2023 года немецкий хостер Uberspace конфисковал веб-домен, на котором размещался сайт.

Популярный опенсорсный проект не умер: были сделаны сотни форков, написаны десятки альтернативных инструментов, а исходный код сохранён на сотнях зеркал. Самый популярный форк назывался youtube-dlc (от слова «community»). С января 2021-го программу переименовали в yt-dlp, она и получила максимальную известность. Её даже включили в дистрибутив Ubuntu 22.04, а потом заменили пустым пакетом с зависимостью yt-dlp, чтобы у правообладателей не возникало претензий.

Вот некоторые другие альтернативы youtube-dl и yt-dlp (приводим здесь только опенсорсные бесплатные программы:

  • StreamRecorder.NET — риперер стримов, который производит запись и сохранение любых медиапотоков. Универсальный инструмент работает с разными сайтами, поддерживает постобработку с подключением сторонних программ. Полная автоматизация через утилиту командной строки, автоматический запуск окон для записи потоков по расписанию.

  • Invidious — альтернативный фронтенд для YouTube, можно установить на своём сервере. Отлично работает в связке с десктопным клиентом FreeTube, который устанавливается на персоналках — и загружает видео через Invidious-прокси, установленный на заграничном VPS:

  • JDownloader — менеджер загрузок, частично с открытым кодом. Это универсальный менеджер, где YouTube поддерживается как одна из многочисленных опций для скачивания файлов. Программа вышла в далёкие 2000-е годы, почти одновременно с оригинальной версией youtube-dl. Из особенностей: графический интерфейс, умеет автоматически решать некоторые капчи, работает под всеми ОС, автоматическое извлечение из RAR с вводом пароля, смена IP-адресов для хостеров с ограничением загрузки для IP, специфические плагины для конкретных файлохостингов, расшифровка контейнеров RSDF, CCF и DLC.

    Перехватывает ссылки из буфера обмена — и загружает весь доступный контент:

  • ClipGrab — ещё один древний менеджер загрузок видео с разных сайтов с графическим интерфейсом, умеет конвертировать видео в разные форматы при сохранении.

  • You-Get — очень простая консольная утилита для выкачивания медиафайлов с десятков разных сайтов, включая YouTube:

    $ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
    
    site:            	YouTube
    
    title:           	Me at the zoo
    
    stream:
    
    	- itag:      	43
    
      	container: 	webm
    
      	quality:   	medium
    
      	size:      	0.5 MiB (564215 bytes)
    
    	# download-with: you-get --itag=43 [URL]
    
    Downloading Me at the zoo.webm ...
    
     100% (  0.5/  0.5MB) ├██████████████████████████████████┤[1/1]	6 MB/s
    
    Saving Me at the zoo.en.srt ... Done.

You-Get принимает на вход любые URL. Может скрапить веб-страницы — и автоматически выкачивать весь медиаконтент, который найдёт. Более того, принимает поисковые запросы, ищет подходящее видео в интернете и выкачивает его:

$ you-get "Richard Stallman eats"

Во многом по синтаксису и функциям похож на yt-dlp. Перенаправление видеопотока в плеер VLC вместо скачивания в файл:

$ you-get -p vlc 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

Просмотр в браузере:

$ you-get -p chromium 'https://www.youtube.com/watch?v=jNQXAC9IVRw'

Есть клиенты YouTube с закрытым кодом, некоторые выпускают бесплатную версию с ограниченной скоростью скачивания, а полноценную программу продают за деньги.

Существуют также разные варианты графических интерфейсов для yt-dlp и других консольных инструментов: например, media-downloader, yt-dlg или ytdlp-gui:

Список команд yt-dlp

Полный список команд yt-dlp (для начинающих) включает десятки самых популярных команд. Вот некоторые из них, которые закрывают основные потребности большинства пользователей.

Скачать видео или плейлист

$ yt-dlp https://www.youtube.com/watch?v=t5b20oLaIaw

Скачать в конкретную папку:

$ yt-dlp -o '~/Downloads/Abdul Kalam Biography' https://www.youtube.com/watch?v=t5b20oLaIaw

Включить в имя файла дополнительные сведения, такие как заголовок, имя «автора» (который залил видео на хостинг), дата загрузки и название плейлиста:

$ yt-dlp -o '%(title)s by %(uploader)s on %(upload_date)s in %(playlist)s.%(ext)s' https://www.youtube.com/watch?v=t5b20oLaIaw

Параллельное скачивание нескольких видеофайлов

$ yt-dlp <url1> <url2>

или

$ yt-dlp -a url.txt

Скачать только аудиодорожку из видеофайла

$ yt-dlp -x https://www.youtube.com/watch?v=t5b20oLaIaw

Скачать аудио в лучшем доступном качестве:

$ yt-dlp -f bestaudio <URL>

Скачать видео и аудио в лучшем доступном качестве, а потом склеить их в один файл:

$ yt-dlp -f bestvideo+bestaudio <URL>

Отобразить список всех доступных форматов

$ yt-dlp -F https://www.youtube.com/watch?v=t5b20oLaIaw

Список содержит исчерпывающую информацию о файлах, включая названия кодеков, размеры файлов, разрешение и проч.

Транслировать видео напрямую в медиаплеер VLC

$ yt-dlp -o - "https://www.youtube.com/watch?v=t5b20oLaIaw" | vlc -

Шпаргалка:

Дополнительно:

Функциональность yt-dlp не ограничивается только YouTube. Программа умеет скачивать видео и аудио со всех популярных хостингов, поддерживает ffmpeg и т. д., позволяет указывать минимальный и максимальный размеры файлов для скачивания множественных видео из плейлистов, скачивать видеоролики в заданном диапазоне дат, возобновлять скачивание после остановки и многое другое.

Программа yt-dlp немножко отличается от оригинального youtube-dl и youtube-dlc. Например, она работает на новом Python 3.7+, а не на старых версиях. Немножко отличается формат некоторых опций и др.

Кроме простой скачивалки файлов, можно поставить в зарубежном дата-центре полноценный медиасервер, который будет раздавать контент на любые устройства, включая компьютеры, смартфоны и телевизоры. Вот некоторые примеры таких медиасерверов:

Но чисто технически удобнее скачать контент с VPS на сервер в локальной сети, и раздавать контент уже отсюда, чтобы не возникало узких мест в трансляции видео 4K на несколько устройств, например.

Для синхронизации файлов на VPS и домашнем сервере подойдёт любая утилита для синхронизации и резервного копирования, как Syncthing.

Как уже упоминалось выше, на своём сервере можно установить альтернативный фронтенд для YouTube, такой как Invidious, он успешно работает в качестве прокси (инструкция по установке).