async-yt-dlp
Высокопроизводительная, строго типизированная асинхронная Python-библиотека обёртка над yt-dlp.
Возможности • Установка • Быстрый старт • Архитектура • Документация • Лицензия
async-yt-dlp — это универсальный асинхронный SDK / adapter layer над мощным синхронным ядром yt-dlp. Библиотека спроектирована для использования в любых современных async-приложениях:
- Telegram-ботах (aiogram, telethon, pyrogram)
- Discord-ботах (discord.py)
- Веб-сервисах и API (FastAPI, Litestar, Aiohttp)
- Фоновых воркерах и очередях (Celery, ARQ, Taskiq)
Библиотека не зависит от Telegram или каких-либо веб-фреймворков и является полностью самостоятельным проектом.
Возможности
- 100% Async Native: Все блокирующие операции сети, диска и ffmpeg вынесены в системные потоки через
asyncio.to_thread. Event loop никогда не блокируется. - Строгая типизация: Модели
MediaInfo,FormatInfo,DownloadResult,ProgressEvent(PEP 561py.typed, совместимо со строгим режимомmypy). - Потокобезопасность: Изолированный экземпляр
YoutubeDLна каждую операцию исключает состояние гонки и порчу сессий. - Плавный стриминг прогресса: Асинхронный генератор
download_with_progressс адаптивным троттлингом (защита от перегрузки интерфейса и спама). - Контроль параллельности: Встроенный
DownloadManagerна базеasyncio.Semaphoreс ограничением емкости очереди (backpressure). - Структурированная конкурентность: Поддержка
asyncio.TaskGroupв пакетной загрузкеdownload_many. - Честная модель отмены: Корректная обработка
task.cancel(), таймаутовasyncio.timeoutи graceful shutdown. - Безопасность данных: Автоматическая маскировка паролей, токенов, cookies и прокси в логах; защита от SSRF и протокола
file://. - Проверка зависимостей: Встроенная диагностика окружения (
check_dependencies) для проверкиyt-dlp,ffmpeg,ffprobeи JS-движков.
Установка
Требуется Python 3.11+.
# Базовая установка:
pip install async-yt-dlp
# С опциональной интеграцией с async-ffmpeg:
pip install "async-yt-dlp[ffmpeg]"
# Полный набор (async-ffmpeg + сетевые акселераторы curl-cffi, websockets и др.):
pip install "async-yt-dlp[full]"
Или с использованием uv:
uv add async-yt-dlp
Быстрый старт
1. Извлечение метаданных видео или плейлиста
import asyncio
from async_yt_dlp import AsyncYTDLP
async def main():
async with AsyncYTDLP() as ytdlp:
info = await ytdlp.extract_info("https://www.youtube.com/watch?v=BaW_jenozKc")
print(f"🎬 {info.title}")
print(f"👤 Автор: {info.uploader}")
print(f"⏱ Длительность: {info.duration_seconds} сек.")
if __name__ == "__main__":
asyncio.run(main())
2. Скачивание видео с настройками качества
import asyncio
from pathlib import Path
from async_yt_dlp import AsyncYTDLP, YTDLPOptions
async def main():
options = YTDLPOptions(
format="bestvideo[height<=720]+bestaudio/best[height<=720]",
output_path=Path("./downloads"),
output_template="%(title)s.%(ext)s",
)
async with AsyncYTDLP(default_options=options) as ytdlp:
result = await ytdlp.download("https://www.youtube.com/watch?v=BaW_jenozKc")
print(f"✅ Файл сохранен: {result.filepath} ({result.file_size} байт)")
if __name__ == "__main__":
asyncio.run(main())
3. Стриминг прогресса загрузки в реальном времени
import asyncio
from async_yt_dlp import AsyncYTDLP, DownloadStatus
async def main():
async with AsyncYTDLP() as ytdlp:
url = "https://www.youtube.com/watch?v=BaW_jenozKc"
async for event in ytdlp.download_with_progress(url, throttle_interval=0.5):
if event.status == DownloadStatus.DOWNLOADING:
print(
f"\rЗагрузка: {event.percent:.1f}% | {event.speed_str} | ETA: {event.eta_str}",
end="",
)
elif event.status == DownloadStatus.COMPLETE:
print("\nГотово!")
if __name__ == "__main__":
asyncio.run(main())
Архитектура
┌───────────────────────────────────────────────┐
│ Приложение (Telegram, Web, CLI, Bot) │
└───────────────────────┬───────────────────────┘
│
┌───────────▼───────────┐
│ AsyncYTDLP │ ← Фасад, API, Lifecycle
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ DownloadManager │ ← Semaphore, Backpressure, Shutdown
└───────────┬───────────┘
│
┌───────────▼───────────┐
│ ThreadBackend │ ← asyncio.to_thread, изолированный
└───────────┬───────────┘ экземпляр YoutubeDL на операцию
│
┌───────────▼───────────┐
│ yt_dlp.YoutubeDL │ ← Синхронный движок yt-dlp
└───────────────────────┘
Подробное описание архитектуры доступно в документе docs/architecture.md.
Документация
Подробные руководства на русском языке находятся в каталоге docs/:
- Быстрый старт
- Архитектура и дизайн
- Справочник публичного API
- Конфигурация YTDLPOptions
- Управление параллельностью
- Модель отмены и таймауты
- Отслеживание прогресса
- Иерархия исключений
- Безопасность и санитизация
- Производительность и оптимизация
- Развертывание и Docker
- Руководство для разработчиков
- Тестирование
- Устранение неполадок
- Миграция с синхронного yt-dlp
Примеры использования
В каталоге examples/ представлены готовые примеры кода:
- Простое извлечение информации
- Скачивание файла
- Отображение прогресса
- Работа с плейлистами
- Извлечение аудио и MP3 конвертация
- Продвинутые параметры
- Отмена задач и таймауты
- Пакетная параллельная загрузка
- Интеграция с Telegram-ботом на aiogram 3.x
Лицензия
Проект распространяется под лицензией MIT. Подробнее см. в файле LICENSE.
Release files for async-yt-dlp 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| async_yt_dlp-0.1.1.tar.gz | 330.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| async_yt_dlp-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 390.5 kB
Release files / async_yt_dlp-0.1.1.tar.gz
| Download URL | async_yt_dlp-0.1.1.tar.gz |
|---|---|
| Size | 330.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ef2f8c7adb64c52b0156ab2e28951809bdda15d2eec36cab3a56b496b7a315dd
|
|
BLAKE2b-256 checksum How to use checksums |
576ff871ef25a65024b5ae598c08896e03728498ce5b64c956b700aaed9f6876
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / async_yt_dlp-0.1.1-py3-none-any.whl
| Download URL | async_yt_dlp-0.1.1-py3-none-any.whl |
|---|---|
| Size | 59.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1c5e89f119b87cb9de2d9717b12227a4628ed7c161ffe2b17d9190a1d9fe7d69
|
|
BLAKE2b-256 checksum How to use checksums |
ca9ba3933131139f91181f73c66bc207ba18b06ed1524a656c5c8e2966b451d4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|