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

ReClip: yt-dlp с веб-интерфейсом

·432 слов·3 минут·
logo

В посте про yt-dlp я писал, что для скачивания видео хватает одной команды в терминале. Это правда, но только пока вы сидите за своим компьютером.

Как только нужно скачать что-то с телефона, планшета или с чужого ноутбука — открывается знакомая картина: ищем вкладку, копируем ссылку, возвращаемся в терминал. cobalt.tools и онлайн-сервисы решают эту проблему, но как-то через раз.

ReClip — это та же идея, только поднятая у себя.

Что это такое
#

Веб-интерфейс над yt-dlp. Вставляешь ссылку — получаешь превью, список доступных разрешений и кнопку «Скачать». MP4 или MP3, на выбор. Поддерживается всё, что умеет yt-dlp, то есть 1000+ сайтов.

Удивительно, что вся серверная часть — это один файл app.py на ~150 строк. Фронтенд — один HTML без фреймворков и без сборки. Никакого npm install.

Почему это не просто ещё одна обёртка
#

Три вещи, которые обычно и ломают такие самодельные обёртки, здесь продуманы:

  • Массовая загрузка. Можно вставить сразу несколько ссылок, каждая обработается отдельно.
  • Дедупликация URL. Один и тот же URL не скачается дважды.
  • Обновление yt-dlp при старте. И это важно: экстракторы yt-dlp ломаются постоянно, особенно на Instagram и Facebook. Обычно лечится обновлением, здесь это происходит само при каждом запуске. Отключается через RECLIP_NO_UPDATE=1.

Установка
#

Понадобится Python 3.8+, yt-dlp и ffmpeg.

apt install ffmpeg && pip install yt-dlp
git clone https://github.com/averygan/reclip.git
cd reclip
./reclip.sh

Скрипт сам создаст venv, доставит зависимости и поднимет сервер на http://localhost:8899. Порт меняется переменной PORT.

Через Docker
#

docker build -t reclip . && docker run -p 8899:8899 reclip

Или compose — он уже в репозитории, с именованным томом под загрузки:

services:
  reclip:
    build: .
    image: reclip:latest
    container_name: reclip
    ports:
      - "8899:8899"
    volumes:
      - reclip-downloads:/app/downloads
    restart: unless-stopped

volumes:
  reclip-downloads:

Внутри контейнера всё то же самое, но yt-dlp обновляется при старте, а отдаёт процесс уже gunicorn с одним воркером и четырьмя потоками. Запускается от непривилегированного пользователя, ffmpeg уже внутри.

Использование
#

Здесь всё интуитивно и объяснять нечего:

  1. Вставить одну или несколько ссылок — хоть через пробел, хоть через запятую
  2. Выбрать MP4 или MP3
  3. Нажать Fetch — подтянет превью и список разрешений
  4. Выбрать качество, если оно есть
  5. Скачать по одному или всё сразу кнопкой Download All
Две ссылки введены, видно карточку видео с выбором качества и кнопкой Download

Скачанное складывается в downloads/, а имя файла берётся из заголовка ролика. Плейлисты тоже обрабатываются — на отдельной вкладке появляется разбор ссылок из плейлиста.

Итог
#

Одна из тех вещей, которые проще один раз поставить, чем объяснять людям, зачем для скачивания видео нужен терминал.

У репозитория averygan/reclip уже больше десяти тысяч звёзд и полторы тысячи форков, лицензия MIT. Автор явно делал это для себя — на app.py смотреть одно удовольствие.

Один нюанс: помните про авторские права. Инструмент для личного использования, ответственность на том, кто качает.

Related