{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "arxont blog: заметки с тегом программирование",
    "_rss_description": "Разное о компьютерном и около",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/arxont.ru\/tags\/programmirovanie\/",
    "feed_url": "https:\/\/arxont.ru\/tags\/programmirovanie\/json\/",
    "icon": "https:\/\/arxont.ru\/pictures\/userpic\/userpic@2x.jpg?1559018223",
    "authors": [
        {
            "name": "arxont",
            "url": "https:\/\/arxont.ru\/",
            "avatar": "https:\/\/arxont.ru\/pictures\/userpic\/userpic@2x.jpg?1559018223"
        }
    ],
    "items": [
        {
            "id": "16",
            "url": "https:\/\/arxont.ru\/all\/eksperimenty-s-neyrosetyami-zagruzka-video\/",
            "title": "Эксперименты с нейросетями — загрузка видео",
            "content_html": "<h2>Вводная:<\/h2>\n<p>Есть у меня небольшой чатик в телеграмме, куда я скидываю всякое музыкальное с ютуба, которое понравилось. В связи с <i>разными обстоятельствами<\/i> решил сохранить это локально.<\/p>\n<h2>Решение:<\/h2>\n<p>Но делать всё самому лениво поэтому немного помучил нейросети. Использовал:<\/p>\n<ol start=\"1\">\n<li>LM Studio с запущенной в ней локально LLM Google Gemma 4 26B (да, чисто для API и в качестве бекенда — можно было бы напрямую llama-server использовать, но в моём случае непринципиально) <a href=\"https:\/\/lmstudio.ai\">https:\/\/lmstudio.ai<\/a><\/li>\n<li>В качестве интерфейса для общения Crush <a href=\"https:\/\/github.com\/charmbracelet\/crush\">https:\/\/github.com\/charmbracelet\/crush<\/a> (опенсорс, бесплатный и есть весь нужный мне функционал). Можно было бы всё делать в LM Studio, но там бы пришлось и самому создавать файлы, копировать-вставлять (ну или подключать MCP). Но зачем когда в краше это всё нативно уже реализовано и есть готовые агенты?<\/li>\n<li>Для скачивания с ютуба использовался <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\">https:\/\/github.com\/yt-dlp\/yt-dlp<\/a> как наиболее продвинутый (<i>по словам локальной LLM Qwen 3.6<\/i>)<\/li>\n<li>C# для автоматизации в лице Visual Studio 2022<\/li>\n<li>Сам телеграмм :) Чтобы в чатике выбрать Export chat (так как меня интересуют только ссылки, то убираем всё лишнее и скачиваем только текст)<\/li>\n<\/ol>\n<h2>Теперь с LLM автоматизируем скучный процесс:<\/h2>\n<ol start=\"1\">\n<li>Вначале обработаем экспортированный файл, чтобы получить просто список ссылок<\/li>\n<\/ol>\n<blockquote>\n<p class=\"foot\"><b>Возьми файл по пути «X:\\Telegram Desktop\\ChatExport_2026-04-21\\messages.html», вытащи все ссылки на ютуб и создай txt файл где будут только ссылки на ютуб (одна ссылка на строку)<\/b><\/p>\n<p>Проверяем и всё отлично.<\/p>\n<\/blockquote>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/arxont.ru\/pictures\/1-crash.png.jpg\" width=\"2560\" height=\"1376\" alt=\"\" \/>\n<\/div>\n<ol start=\"2\">\n<li>Теперь попросим прочитать огромный README yt-dlp чтобы он сказал как нам скачивать<\/li>\n<\/ol>\n<blockquote>\n<p class=\"foot\"><b>Прочитай инструкцию к приложению yt-dlp по адресу <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\">https:\/\/github.com\/yt-dlp\/yt-dlp<\/a> и напиши команду для скачивания файла<\/b><\/p>\n<p>Вывод конечно дал результат, но при проверке выяснилось, что не работает. Файл не скачивался, а сыпал целую кучу ошибок. Ошибки по одной загружались в LLM и просил найти решение в том же гитхабе (запросом вида: <i>Посмотри README, WIKI в гитхабе проекта yt-dlp и найди решение по ошибке %ОШИБКА%<\/i>)<\/p>\n<\/blockquote>\n<ul>\n<li>● Ошибка первая: ffmpeg который был установлен с официального сайта не подходит, надо скачать именно ffmpeg из репы yt-dlp <a href=\"https:\/\/github.com\/yt-dlp\/FFmpeg-Builds\">https:\/\/github.com\/yt-dlp\/FFmpeg-Builds<\/a> и прописать путь к скачанному<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"DOS\">--ffmpeg-location &quot;X:\\Downloads\\yt-dlp\\ffmpeg\\bin\\ffmpeg.exe&quot;<\/code><\/pre><ul>\n<li>● Ошибка вторая: Надо было экспортировать куки из браузера <a href=\"https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/FAQ#how-do-i-pass-cookies-to-yt-dlp\">https:\/\/github.com\/yt-dlp\/yt-dlp\/wiki\/FAQ#how-do-i-pass-cookies-to-yt-dlp<\/a><\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"DOS\">--cookies cookies.txt<\/code><\/pre><blockquote>\n<p><b>Использование куки (cookies) от основного аккаунта YouTube — это риск бана. Лучше использовать отдельный аккаунт («пустышку») (вообще я за более 200 скаченных не столкнулся, но в README yt-dlp пишут такое предупреждение, поэтому дублирую)<\/b><\/p>\n<\/blockquote>\n<ul>\n<li>● Ошибка третья: Конкретно в моём случае весь ютуб идёт через IPv6 поэтому надо добавить<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"DOS\">--force-ipv6<\/code><\/pre><ul>\n<li>● Ошибка четвёртая: Скачивание пошло но крайне и крайне медленно. Решение использовать aria2 <a href=\"https:\/\/github.com\/aria2\/aria2\">https:\/\/github.com\/aria2\/aria2<\/a><\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"DOS\">--external-downloader aria2c<\/code><\/pre><ul>\n<li>● Ошибка пятая: В консоли были кракозяблы для видео с неанглийскими языками<\/li>\n<\/ul>\n<pre class=\"e2-text-code\"><code class=\"DOS\">--encoding utf-8<\/code><\/pre><ol start=\"3\">\n<li>Теперь нужно попросить написать само приложение которое будет скачивать всё :)<\/li>\n<\/ol>\n<blockquote>\n<p class=\"foot\"><b>Напиши минимальное консольное приложение на C# которое прочитает сгенерированный ранее файл с ссылками на ютюб и в цикле будет вызывать yt-dlp и скачивать файлы. В отдельный файл приложение должно записать ссылки которые не получилось скачать. Также создай файл проекта для запуска и компиляции. Запиши всё в папку X:\\Downloads\\youtube-downloader\\<\/b><\/p>\n<p>Тут сразу всё заработало, кроме путей — их прописал вручную где лежат (с комментариями где скачивать). Добавил ручками паузу между попытками на 30 секунд, чтобы уменьшить вероятность бана. Причесал вывод в консоль сообщений разными цветами. Кроме того добавил «текущая позиция\/всего» для лучшего понимания прогресса.<\/p>\n<\/blockquote>\n<ol start=\"4\">\n<li>Далее делаем тестовый файл на 5 ссылок и запускаем :)<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/arxont.ru\/pictures\/2-finish-color.png.jpg\" width=\"2560\" height=\"1365\" alt=\"\" \/>\n<\/div>\n<ol start=\"5\">\n<li>Поругать сгенерированный ИИ код (и немного правленный мной) можно на гитхабе <a href=\"https:\/\/github.com\/psionika\/YoutubeDownloader\/blob\/main\/Program.cs\">https:\/\/github.com\/psionika\/YoutubeDownloader\/blob\/main\/Program.cs<\/a><\/li>\n<\/ol>\n",
            "summary": "Есть у меня небольшой чатик в телеграмме, куда я скидываю всякое музыкальное с ютуба, которое понравилось",
            "date_published": "2026-04-21T23:46:30+09:00",
            "date_modified": "2026-04-22T17:33:13+09:00",
            "tags": [
                "LLM",
                "программирование"
            ],
            "image": "https:\/\/arxont.ru\/pictures\/1-crash.png.jpg",
            "_date_published_rfc2822": "Tue, 21 Apr 2026 23:46:30 +0900",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "16",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/arxont.ru\/pictures\/1-crash.png.jpg",
                    "https:\/\/arxont.ru\/pictures\/2-finish-color.png.jpg"
                ]
            }
        }
    ],
    "_e2_version": 4199,
    "_e2_ua_string": "Aegea 11.5 (v4199)"
}