Вводная:
Есть у меня небольшой чатик в телеграмме, куда я скидываю всякое музыкальное с ютуба, которое понравилось. В связи с разными обстоятельствами решил сохранить это локально.
Решение:
Но делать всё самому лениво поэтому немного помучил нейросети. Использовал:
- LM Studio с запущенной в ней локально LLM Google Gemma 4 26B (да, чисто для API и в качестве бекенда — можно было бы напрямую llama-server использовать, но в моём случае непринципиально) https://lmstudio.ai
- В качестве интерфейса для общения Crush https://github.com/charmbracelet/crush (опенсорс, бесплатный и есть весь нужный мне функционал). Можно было бы всё делать в LM Studio, но там бы пришлось и самому создавать файлы, копировать-вставлять (ну или подключать MCP). Но зачем когда в краше это всё нативно уже реализовано и есть готовые агенты?
- Для скачивания с ютуба использовался https://github.com/yt-dlp/yt-dlp как наиболее продвинутый (по словам локальной LLM Qwen 3.6)
- C# для автоматизации в лице Visual Studio 2022
- Сам телеграмм :) Чтобы в чатике выбрать Export chat (так как меня интересуют только ссылки, то убираем всё лишнее и скачиваем только текст)
Теперь с LLM автоматизируем скучный процесс:
- Вначале обработаем экспортированный файл, чтобы получить просто список ссылок
Возьми файл по пути «X:\Telegram Desktop\ChatExport_2026-04-21\messages.html», вытащи все ссылки на ютуб и создай txt файл где будут только ссылки на ютуб (одна ссылка на строку)
Проверяем и всё отлично.
- Теперь попросим прочитать огромный README yt-dlp чтобы он сказал как нам скачивать
Прочитай инструкцию к приложению yt-dlp по адресу https://github.com/yt-dlp/yt-dlp и напиши команду для скачивания файла
Вывод конечно дал результат, но при проверке выяснилось, что не работает. Файл не скачивался, а сыпал целую кучу ошибок. Ошибки по одной загружались в LLM и просил найти решение в том же гитхабе (запросом вида: Посмотри README, WIKI в гитхабе проекта yt-dlp и найди решение по ошибке %ОШИБКА%)
- ● Ошибка первая: ffmpeg который был установлен с официального сайта не подходит, надо скачать именно ffmpeg из репы yt-dlp https://github.com/yt-dlp/FFmpeg-Builds и прописать путь к скачанному
--ffmpeg-location "X:\Downloads\yt-dlp\ffmpeg\bin\ffmpeg.exe"- ● Ошибка вторая: Надо было экспортировать куки из браузера https://github.com/yt-dlp/yt-dlp/wiki/FAQ#how-do-i-pass-cookies-to-yt-dlp
--cookies cookies.txtИспользование куки (cookies) от основного аккаунта YouTube — это риск бана. Лучше использовать отдельный аккаунт («пустышку») (вообще я за более 200 скаченных не столкнулся, но в README yt-dlp пишут такое предупреждение, поэтому дублирую)
- ● Ошибка третья: Конкретно в моём случае весь ютуб идёт через IPv6 поэтому надо добавить
--force-ipv6- ● Ошибка четвёртая: Скачивание пошло но крайне и крайне медленно. Решение использовать aria2 https://github.com/aria2/aria2
--external-downloader aria2c- ● Ошибка пятая: В консоли были кракозяблы для видео с неанглийскими языками
--encoding utf-8- Теперь нужно попросить написать само приложение которое будет скачивать всё :)
Напиши минимальное консольное приложение на C# которое прочитает сгенерированный ранее файл с ссылками на ютюб и в цикле будет вызывать yt-dlp и скачивать файлы. В отдельный файл приложение должно записать ссылки которые не получилось скачать. Также создай файл проекта для запуска и компиляции. Запиши всё в папку X:\Downloads\youtube-downloader\
Тут сразу всё заработало, кроме путей — их прописал вручную где лежат (с комментариями где скачивать). Добавил ручками паузу между попытками на 30 секунд, чтобы уменьшить вероятность бана. Причесал вывод в консоль сообщений разными цветами. Кроме того добавил «текущая позиция/всего» для лучшего понимания прогресса.
- Далее делаем тестовый файл на 5 ссылок и запускаем :)
- Поругать сгенерированный ИИ код (и немного правленный мной) можно на гитхабе https://github.com/psionika/YoutubeDownloader/blob/main/Program.cs