Search
Write a publication
Pull to refresh
-2
6

Пользователь

Send message

Спасибо, что отписались! И отдельное огромное спасибо за то, что проверили на yt-dlp и ботах - это суперценная информация, которая помогает найти причину.

Предположительно при скачивании видеопотока, кто-то принудительно оборвал соединение. Программа ожидала получить данные, а получила "конец файла".

Ты воспроизводишь схожую ошибку в нескольких инструментах, что вероятнее всего проблема не в коде, а в вашей сети. Скорее всего, это ваш интернет-провайдер (или, возможно, корпоративный файрвол, если вы в рабочей сети) блокирует прямые загрузки с YouTube.

Я написал вам в личные сообщения. Если у вас будет желание, давайте попробуем разобраться в ситуации вместе. Мне и самому очень интересно, в чем там дело.

Спасибо за хороший и очень важный вопрос. Самый простой и удобный путь для старта - это Visual Studio.

Скачайте Visual Studio Community с официального сайта Microsoft. Это полнофункциональная и, что важно, бесплатная версия. Самая последняя версия (на данный момент 2022) это то, что вам нужно.

При установке Visual Studio вам будет предложено выбрать так называемые «Рабочие нагрузки» (Workloads). Для нашего консольного проекта вам будет достаточно всего одной: «Разработка классических приложений .NET» (или .NET desktop development, если у вас английская версия). В нем будет всё необходимое: компилятор, библиотеки (.NET SDK) и шаблоны для создания консольных приложений. Больше ничего для этого проекта не понадобится.

После установки вы сможете либо создать свой проект с нуля (Файл -> Создать -> Проект -> Консольное приложение), либо, что еще проще, открыть мой готовый проект, скачанный GitHub.

Можно также запустить без редактора и отдельно установить .NET SDK. Шаги будут следующими.

  1. Установите .NET SDK (Software Development Kit). Это самое главное — сам движок .NET, который позволяет создавать и запускать код.

    • Перейдите на официальный сайт .NET.

    • На этой странице найдите и скачайте установщик для .NET SDK. Важно: скачивайте именно SDK, а не Runtime. Обычно это самая большая и заметная кнопка. (версия например, .NET 9).

    • Чтобы убедиться, что всё установилось, откройте терминал (на Windows это PowerShell или Командная строка, на macOS/Linux — Terminal) и введите команду:

      dotnet --version

      Должно отобразиться установленная версия. Если команда выполнилась успешно и вы увидели ту версию, которую скачивали, значит, всё прошло успешно! Дальше проще.

  2. Получение кода проекта

    • В открытом терминале перейдите в папку, где бы хотели что бы был данный проект. Команда например
      cd C:\github

    • Теперь выполните одну команду, которая скачает весь мой проект с GitHub в эту папку:

      git clone https://github.com/DNsam/YoutubeDownloader.git
      Эта команда создаст новую папку YoutubeDownloader со всем необходимым внутри.

      (Если у вас нет Git: просто зайдите на страницу https://github.com/DNsam/YoutubeDownloader, нажмите зеленую кнопку <> Code и выберите Download ZIP. Скачайте архив и обязательно распакуйте его в удобное для вас место.)

  3. Запуск программы! Это финальный шаг.

    1. В терминале перейдите в папку с проектом, которую вы только что скачали например:
      cd C:\github\YoutubeDownloader

    2. Теперь выполните команду:

      dotnet run

      Эта команда автоматически восстановит все зависимости (библиотеки), скомпилирует проект и запустит его.
      После выполнения команды вы увидите в консоли приглашение: 
      Enter a YouTube video URL:.
      Поздравляю, у вас всё получилось


Если возникнут еще трудности - смело спрашивайте

Ну всё, теперь я окончательно раскрыт :) Хорошо, признаю, с вежливостью местами был перебор. Шутка с промтом, большой палец вверх.

На тот момент, когда писал, я не знал, что это цитирование

Вы меня поймали! Это, пожалуй, самый проницательный комментарий из всех.

Буду честен: это моя первая статья, и я очень хотел, чтобы диалог с сообществом получился максимально уважительным и конструктивным. Поэтому я действительно старался отвечать по всем канонам "искусства общения".

Ваш комментарий - отличное напоминание, что когда слишком сильно стараешься следовать правилам, можно потерять в человечности и звучать немного... как вежливый робот :) Спасибо, что подметили. Буду работать над этим!

Огромное спасибо, что нашли время попробовать код из статьи и, что еще важнее, сообщили об этой проблеме. Вы абсолютно правы - код, скопированный прямо из статьи, не скомпилируется, и это мое упущение, что я не сделал на этом акцент.

В статьях для краткости часто опускают using директивы в начале файла. Чтобы все заработало, достаточно добавить в самое начало вашего файла Program.cs вот эти строки:

using Microsoft.Extensions.Configuration;
using Spectre.Console;
using YoutubeExplode;
using YoutubeExplode.Converter;
using YoutubeExplode.Videos.Streams;

Кстати, чтобы сэкономить ваше время на следующем шаге, хочу сразу подсказать еще один момент. Когда программа скомпилируется, для скачивания ей понадобится утилита ffmpeg.exe. Как я упоминал в статье, ее нужно скачать отдельно (например, с Release Zeranoe FFmpeg builds · tomaszzmuda/Xabe.FFmpeg ) и положить файл ffmpeg.exe в папку с вашей скомпилированной программой (обычно это bin/Debug/...). Без него программа запустится, но при попытке скачать видео выдаст ошибку.

Ваш комментарий очень помог мне увидеть это слабое место в статье. Я обязательно добавлю уточнения и про using-директивы, и про ffmpeg, чтобы у других читателей не возникло таких сложностей.

Вау, классный комментарии. Я понимаю ваши ожидания. Тема разбора внутреннего устройства YouTube, поиска ссылок на чанки и их сборки - невероятно интересная и сложная.

Честно говоря, такой глубокий анализ потянул бы на целую серию статей, а не на один гайд. Моей целью было показать, как можно быстро решить практическую задачу, используя современные инструменты в экосистеме .NET.

Но ваша обратная связь очень ценна. Она показывает, что есть интерес и к более "низкоуровневым" статьям. Возможно, в будущем я попробую разобрать какой-то из этих аспектов отдельно. Спасибо вам огромное за то, что поделились своим мнением и подтолкнули в этом направлении. Это ценно!

спасибо за поддержку! Вы идеально сформулировали мысль: Хабр - это место, где мы любим сам процесс создания чего-то нового своими руками. Рад, что здесь так много единомышленников =)

Спасибо, что поделились! Не знал про этот инструмент, выглядит интересно. Всегда полезно знать о хороших альтернативах.

огромное спасибо за такой глубокий технический комментарий! Это именно тот ценный инсайт, который обогащает статью и показывает, насколько сложнее всё устроено «под капотом».

Вы совершенно правы насчет троттлинга. То, что yt-dlp умеет обходить это с помощью эмуляции клиентских скриптов - это действительно высший пилотаж и одна из причин, почему он по праву считается лучшим инструментом в своем классе.

Я и сам, кстати, столкнулся с этим на практике, что только подтверждает ваши слова. Когда я тестировал утилиту и пытался скачать подряд несколько видео для отладки, YouTube действительно временно заблокировал доступ с ошибкой 403. Однако, ограничение проходит само собой через некоторое время.

Поэтому для моей цели -скачать для личных нужд пару роликов в день - это не стало критичной проблемой. Но ваше замечание абсолютно в точку: как только речь заходит о больших объемах, без продвинутых техник, которые использует yt-dlp, уже не обойтись.

Еще раз спасибо, что поделились своим опытом и знаниями. Такие комментарии делают Хабр лучше!

вы затронули самую главную "боль" всех подобных проектов! И вы совершенно правы: поддерживать такую утилиту в одиночку - это огромный труд.

Именно поэтому я и сделал ставку на библиотеку YoutubeExplode. Её автор и сообщество как раз и занимаются тем, что оперативно отслеживают изменения YouTube и выпускают обновления. Таким образом, "поддержка" моей утилиты сводится к простому обновлению NuGet-пакета. Это хороший пример того, как использование библиотек с активной поддержкой решает сложные проблемы.

спасибо за комментарий! Вы абсолютно правы, yt-dlp - это мощнейший и, пожалуй, лучший универсальный инструмент для этой задачи.

Цель моей статьи была скорее образовательная: показать, как с помощью C# и такой удобной библиотеки, как YoutubeExplode, можно собрать подобный инструмент самостоятельно, для души или для встраивания в свои .NET-проекты. Это больше про "как это сделать", а не про "какой готовый инструмент лучше".

И отдельное спасибо, что обратили внимание на "интересные" условия использования YoutubeExplode. Вы очень точно подметили их, скажем так, нетривиальность. Это довольно известная особенность библиотеки, и, насколько я знаю, именно она объясняет такое большое количество форков на GitHub. При желании этот специфичный код довольно легко найти и убрать из локальной копии.

Классное решение, но код писать тоже просто =)

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Date of birth
Registered
Activity