7 лет назад я опубликовал в блоге простые инструкции по загрузке видео с YouTube при помощи PowerShell и youtube-dl. Те методы давно потеряли актуальность, но задача никуда не делась!
🎉 Встречайте скрипт на основе yt-dlp: https://github.com/niks255/Get-WebMedia (зеркало на GitFlic)
Разработчик — мой давний читатель Niks. Я же приложил руку к формированию набора фич и UX, а также к тестированию. Дальше подробности в формате «вопрос — ответ».
[+] Сегодня в программе
- Как работает скрипт PowerShell?
- Зачем скрипт, если есть графический интерфейс в [program name]?
- Чем этот скрипт лучше других?
- Зачем возиться с параметрами командной строки скрипта, если есть конфигурационные файлы yt-dlp?
- Есть ли ограничения в работе скрипта?
- Куда направлять предложения по улучшению и баги?
✔️ Как работает скрипт PowerShell?
Для начала скрипт PowerShell надо разблокировать, иначе он не запустится.
Параметром командной строки вы передаёте скрипту ссылки на медиа или текстовый файл с набором ссылок. Это минимум. Наряду с этим вы можете задать свойства выходного файла: аудио / видео, разрешение, формат.
👉 Загрузка медиа возможна через прокси: системный по умолчанию, либо указанный вами в командной строке.
При каждом скачивании медиа проверяется наличие в PATH или папке скрипта обязательных утилит: yt-dlp, deno, ffmpeg, ffprobe. Если не обнаружены, скрипт сам скачивает их с помощью winget и переходит к загрузке медиа.
Для медиафайлов при необходимости создаётся папка Downloads\yt-dlp. Разумеется, вы можете указать любую папку параметром скрипта.
🤔 Зачем скрипт, если есть графический интерфейс в [program name]?
Скрипт хорош уже тем, что работает в Windows из коробки, не тащит за собой браузер и не весит 300 Мб. Правда, скачивает 500+ Мб необходимых утилит, если у вас их нет. Но без этого сейчас никак.
Мы и сами хотели воспользоваться GUI! Честно перепробовали несколько программ. Но ничего даже отдалённо напоминающего YTDLnis для Android не нашлось.
Под Windows вас ждёт спорный UI, проблемный UX, каша из настроек с опциями, а также отсутствие автоматизации. Возможно, непритязательному человеку для разовой закачки подходит. Нам — нет.
Для опытных пользователей предпочтительнее:
- прозрачность скрипта, нежели чёрный ящик скомпилированной программы
- автоматизация задач вплоть до запуска по расписанию
- внятные логи ошибок
- возможность доработать скрипт под свои нужды
Для неопытных тоже есть плюсы↓
💪 Чем этот скрипт лучше других?
Хочешь сделать хорошо? Сделай сам! Поэтому у скрипта есть интересные особенности:
- поддержка системного прокси, либо заданного переменной среды или параметром скрипта
- гибкий и удобный выбор разрешений видео, выходных форматов медиа
- автоматическая загрузка и обновление yt-dlp и сопутствующих утилит
- обработка родных аргументов yt-dlp
- внятный вывод прогресса на экран и журналирование ошибок в файл
А ещё у нашего скрипта есть киллер-фича! 🔥 Он подходит для двух полярных категорий людей:
- Опытные пользователи. Для них скрипт
.ps1, доставляющий гибкие опции закачки и её автоматизацию. - Чайники. Для них файл
.cmdкоторый достаточно запустить двойным щелчком и вставить ссылку из буфера обмена. Вместо одной ссылки можно накидать целую пачку в файлlinks.txt.txtв Загрузках (Два.txt— не опечатка: кто в теме, тот поймёт :)
В CMD-файл внедрён тот же самый скрипт PowerShell. Он извлекается при запуске командного файла и получает аргументы в соответствии с выбором пользователя.
Демо процесса «для чайников»
📄 Зачем возиться с параметрами командной строки скрипта, если есть конфигурационные файлы yt-dlp?
Пожалуй, если вы активно пользуетесь конфигами, то не входите в нашу целевую аудиторию :)
Однако скрипт не отменяет конфигурационные файлы. Переданные в командной строке аргументы имеют наивысший приоритет. Поэтому, когда надо по-быстрому изменить настройки загрузки, может быть проще передать параметр скрипту, чем править конфиг.
Использование скрипта в сочетании с конфигурационными файлами дает дополнительные преимущества:
- простой, но информативный вывод прогресса загрузки
- журналирование ошибок
🤷♂️ Есть ли ограничения в работе скрипта?
Сам по себе скрипт не обходит блокировку YouTube или Twitter, однако он может задействовать ваш прокси для загрузки медиа.
Далее, для работы скрипту требуются утилиты yt-dlp, deno, ffmpeg. Если они не обнаружены в PATH, скрипт устанавливает с помощью winget пакет yt-dlp.yt-dlp, у которого остальные утилиты прописаны в зависимостях. Однако это не сработает, если:
- winget не установлен (например, в LTSC)
- недоступен GitHub, где находится репозиторий winget
В этом случае скрипт предложит вам прямые ссылки для самостоятельного скачивания утилит. Опытные пользователи могут настроить прокси в winget и/или допилить скрипт на своё усмотрение.
🐞 Куда направлять предложения по улучшению и баги?
В GitHub Issues, чат @winsiders, комментарии тут. При воспроизведении проблемы запускайте скрипт с параметром -Debug и выкладывайте результат на pastebin.com.
Тщательнее всего скрипт тестировался на YouTube. На других платформах возможны неполадки при указании разрешения видео и выходных форматов медиа, потому что их может не оказаться в источнике. Кроме того, параметр -ExtraArgs передаёт утилите yt-dlp аргументы «как есть», поэтому возможны сюрпризы.
При этом скрипт необязательно будет виновником проблемы! Базовая проверка — по аналогии с чистой загрузкой Windows — это передача URL и прочих параметров напрямую yt-dlp. Так, тестируя RuTube, мы обнаружили, что у скачанного видео нет изображения. Выяснилось, что проблема в новых версиях ffmpeg, а в старых всё ок.
Попробуйте скрипт и поделитесь впечатлениями ✌
А в целом зачем оно? Если человек понимает. что ему нужен скрипт — он «напишет» свой через любую нейронку за 5-10 минут. Как All-In-One решение — слабо, лимит в 1080, нет поддержки плейлистов.
Пастернака не читал, но осуждаю © Ограничения в 1080 нет, поддержка плейлистов есть. Читайте документацию, смотрите примеры команд.
Нет, за 5-10 минут вы такой скрипт не напишете. Вы даже ТЗ не сможете сформулировать такое, чтобы покрыть фичи этого скрипта. Не говоря уж о промпте.