[Разбор] Полный Разбор yt-dlp Web Downloader


Введение

Этот проект — веб-приложение для загрузки видео с YouTube и других поддерживаемых сайтов с помощью утилиты yt-dlp. На клиенте — удобная веб-панель, на сервере — FastAPI-приложение, которое запускает yt-dlp, передаёт логи и прогресс в реальном времени, управляет загрузками и отдаёт готовые файлы.

1. Клиентская часть: index.html

1.1 Структура

1.2 Стили

1.3 Скрипты

Асинхронная загрузка с отменой:

2. Серверная часть: main.py

2.1 Архитектура проекта и директории

2.2 Основные константы и пути

2.3 Утилиты

2.4 Формирование команды yt-dlp: build_cmd

2.5 Асинхронное управление yt-dlp: stream_yt_dlp

2.6 Эндпоинты

2.7 Безопасность

3. Взаимодействие клиента и сервера

4. Пример использования

  1. Вставьте ссылку YouTube (например, https://www.youtube.com/watch?v=...).
  2. По желанию добавьте cookies для приватного доступа.
  3. Введите опции yt-dlp (качество, преобразование аудио и т. д.).
  4. Нажмите «Начать загрузку».
  5. Следите за прогрессом и логами.
  6. После завершения скачайте файл.
  7. Просматривайте историю, копируйте ссылки, очищайте её по нужде.

5.Обоснование архитектурных решений

6. Возможные расширения

7. Как пользоваться окном «Показать форматы» и формировать команду загрузки

7.1 Зачем нужна функция «Показать форматы»

Видео, размещённые на YouTube и других платформах, обычно доступны в разных качествах и форматах: например, 1080p mp4, 720p webm, аудио отдельно и т.д. yt-dlp позволяет выбрать конкретный формат для загрузки.
В интерфейсе кнопка «Показать форматы» запрашивает у yt-dlp список доступных форматов для указанного видео и отображает его во втором текстовом окне. Это помогает понять, какие варианты есть, и подобрать нужные опции.

7.2 Как использовать окно «Показать форматы»

  1. Вставьте ссылку на видео в поле «Вставьте ссылку сюда».
  2. Нажмите кнопку «Показать форматы».
  3. В появившемся блоке снизу вы увидите примерно такой список (пример):
format code  extension  resolution note
249          webm       audio only tiny   53k , opus @ 50k, 1.45MiB
250          webm       audio only tiny   68k , opus @ 70k, 1.81MiB
140          m4a        audio only tiny  129k , m4a_dash container, mp4a.40.2@128k, 3.54MiB
137          mp4        1080p            4479k , avc1.640028, 30fps, video only, 114.64MiB
136          mp4        720p             1856k , avc1.4d401f, 30fps, video only, 45.84MiB
135          mp4        480p             966k , avc1.4d401e, 30fps, video only, 24.75MiB
...

7.3 Пример формирования команды для загрузки

По умолчанию в проекте используется такая команда для выбора форматов:

-S res:1080,vcodec:av1,vcodec:vp9 -f "bv*[height<=1080]+ba/best[height<=1080]/b" --merge-output-format mp4

Эта сложная строка с -S (сортировкой форматов) пытается выбрать лучшее качество до 1080p, предпочтительно с кодеком av1 или vp9, с объединением аудио+видео в MP4.

7.4 Как подставить конкретные форматы из списка

Если вы получили список форматов и хотите загрузить, например, видео 1080p и аудио 128k, то можно указать:

-f 137+140

где

В поле «Дополнительные опции yt-dlp» напишите:

-f 137+140 --merge-output-format mp4

Это загрузит указанное видео и аудио и объединит их в MP4.

7.5 Пример полного сценария

  1. Вставьте ссылку.
  2. Нажмите «Показать форматы» и выберите нужные коды.
  3. В «Дополнительные опции» введите строку с -f или любыми другими параметрами.
  4. Нажмите «Начать загрузку».

7.6 Полезные параметры

Этот механизм позволяет гибко управлять загрузками, используя мощь yt-dlp через простой веб-интерфейс.

7.7 Шаблоны команд yt-dlp для поля «Дополнительные опции»

1. Скачать лучшее видео с объединением аудио (до 1080p, MP4)

-f 137+140 --merge-output-format mp4 --no-playlist

2. Скачать видео в наилучшем качестве с объединением в MKV

-f bestvideo+bestaudio --merge-output-format mkv --no-playlist

3. Скачать только аудио с конвертацией в MP3 с качеством 320 kbps

--extract-audio --audio-format mp3 --audio-quality 320 --no-playlist

4. Скачать аудио с максимальным качеством (без конкретного битрейта)

--extract-audio --audio-format mp3 --audio-quality 0 --no-playlist

5. Скачать аудио без конвертации, в исходном формате

-f bestaudio --no-playlist --extract-audio

6. Скачать субтитры на русском и английском языках

--write-sub --sub-lang ru,en --skip-download

Как скачать определённый участок видео с точной обрезкой

Для загрузки только части видео (например, с 1-й по 2-ю минуту), при этом сохраняя обрезку максимально точно по ключевым кадрам, используйте опции:

--force-keyframes-at-cuts --download-sections "*00:01:00-00:02:00"

Эта команда скачает указанный промежуток без артефактов, делая резы именно там, где расположены ключевые кадры.

Пример полной команды:

yt-dlp --force-keyframes-at-cuts --download-sections "*00:01:00-00:02:00" <URL>

Если нужно скачать несколько секций подряд – указывай их через запятую:

--force-keyframes-at-cuts --download-sections "*00:01:00-00:02:00,*00:03:30-00:04:00"

Как пользоваться шаблонами

  1. Вставьте ссылку на видео.
  2. Нажмите «Показать форматы» и выберите нужные коды форматов.
  3. Вставьте выбранный шаблон в поле «Дополнительные опции yt-dlp». При необходимости замените коды форматов из шага 2.
  4. Нажмите «Начать загрузку».

Заключение

Этот проект — отличный пример современного веб-сервиса с обращением к CLI-инструментам, потоковой обработкой и удобным интерфейсом. Он собирает надёжные компоненты, делая сложную задачу загрузки видео доступной для обычных пользователей.