Вадим Стеркин

  • Главная
  • Windows
  • SSD
  • Программы
  • Разное
  • Об авторе
Вы тут: Главная → Popular → Как скачать видео с YouTube с помощью youtube-dl и PowerShell

Как скачать видео с YouTube с помощью youtube-dl и PowerShell

Рубрики: Popular, Windows, Вопрос - Ответ, Программы Обновлено: 03.12.2020 комментариев 29

Меня тут попросили помочь скачать несколько видео с YouTube. То ли онлайн-сервисы не справлялись, то ли еще что — не суть важно. Усложнять процесс дальше копирования ссылки на видео в буфер обмена было нежелательно, но в выборе инструментов меня ничто не ограничивало.

Я не раздумывая выбрал youtube-dl и PowerShell:

youtube-dl.exe $(Get-Clipboard)

PowerShell подставляет URL из буфера обмена в качестве параметра youtube-dl (о прочих параметрах чуть ниже). Путь к утилите нужно указать полностью или прописать в PATH. Команду я поместил в CMD-файл, чтобы не менять политики скриптов, а закачку можно было запускать одним щелчком.

powershell -ExecutionPolicy Bypass -noprofile -command  youtube-dl.exe $(Get-Clipboard)

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

https://www.youtube.com/watch?v=asdf&list=asdf

Можно разбить строку с помощью оператора -Split, используя в качестве разделителя амперсанд.

youtube-dl.exe $(Get-Clipboard).split('&')[0]

Теперь в качестве параметра утилите передается только та часть URL, которая предваряет амперсанд. На этот вариант жалоб не поступало, и я счел задачу решенной.

Здесь я хочу передать привет Василию Гусеву. Еще в 2008 году он опубликовал в своем блоге запись про Join и Split, и она идеально подходит к этому посту в качестве дополнительного материала.


Запись не столько про скачивание видео с YouTube, сколько про PowerShell — работу с буфером обмена, разделение строки и выполнение отдельных команд PowerShell без ограничений политик. Обособленный вызов команд требуется достаточно часто, и вот недавний пример из форума в контексте запуска из планировщка.

В youtube-dl лучшее качество видео и аудио достигается раздельной загрузкой потоков и объединением их в файл, например, с помощью утилиты ffmpeg, помещенной в PATH. Это стандартное поведение youtube-dl, т.е. достаточно только указать URL.

youtube-dl URL

Читайте также комментарии — там много полезных советов.

Метки: PowerShell, ускорение Информация в статье применима к Windows 10

Об авторе

Вадим - владелец этого блога, и почти все записи здесь вышли из-под его пера. Подробности о блоге и авторе здесь.

Вас также может заинтересовать:

  • PowerShell: как извлечь список уникальных ссылок с веб-страницы
  • sudo и resudo в PowerShell
  • PowerShell: парсинг веб-страниц и загрузка файлов с Invoke-WebRequest
  • В каких случаях при запуске программы не надо указывать полный путь к ней
← Windows Terminal - основы настройки и первые впечатления
Нюансы отключения службы SysMain в Windows 10 →
Telegram logo

Я в Telegram

Подпишитесь на канал и читайте интересные записи чаще! Есть вопросы? Задайте их в чате.

комментариев 29

↓
  1. nett00n

    10.06.2019 в 09:21

    К опенсорсному youtube-dl есть не менее опенсорсная обертка на питоне youtube-dl-gui
    Сам пользуюсь терминальным вариантам, но родетелям и нормальным людям — рекомендую стовить гуи.
    Но решение на поше красивое, да.

    Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      10.06.2019 в 11:54

      Да, я видел обертку, но решил отложить ее на случай, если мое решение не сработает или нужно будет больше опций загрузки.

      А ты не смотрел, как она разруливает вопрос с URL из плейлиста? Целиком плейлист качает?

      Ваша оценка: Thumb up Thumb down 0
  2. Вячеслав Шиваров

    10.06.2019 в 12:54

    Есть вот такой параметр —no-playlist
    —no-playlist Download only the video, if the URL refers to a video and a playlist.

    Ваша оценка: Thumb up Thumb down +1
    • Vadim Sterkin

      10.06.2019 в 13:07

      Отлично, спасибо! Я решал задачу с PowerShell, ключи утилиты не копал :)

      Ваша оценка: Thumb up Thumb down 0
  3. mrFiX

    10.06.2019 в 14:22

    Проблема чаще не скачать — а получить этот прямой URL на единый видеофайл. Но это больше не к Ютубу а к vimeo и другие сервисы

    Иногда стоят плееры на сайтах у которых на входе берется playlist в котором 200-600 мелких файликов которые показываются этим плеером как одно видео.
    Пока такие вещи хорошо цепляет Internet Download Manager — но он платный, но работает

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

    Ваша оценка: Thumb up Thumb down +1
    • BuSH

      10.06.2019 в 14:54

      Ютьюб также отдельно вещает видео и аудио начиная с FHD. А мелкие файлы часть стандарта dash.
      Всё это стандартно лет 6+ и любая софта для скачки имеет при себе ffmpeg для смешивания аудио и видео.

      В хром маркете есть много расширений для скачки dash потоков. Уверен на 99.9%, что они отлично скачают Ваши курсы.

      Ваша оценка: Thumb up Thumb down 0
  4. Artem Selifontov

    10.06.2019 в 14:43

    Команда -f best неправильная, загружает 480p, вместо 4к.
    https://www.youtube.com/watch?v=3I1chwxGDDo&list=FLBdrsYCD2WrDUhVsEen9NYw

    By default youtube-dl tries to download the best available quality, i.e. if you want the best quality you don’t need to pass any special options, youtube-dl will guess it for you by default.

    Как правильно выбирать формат https://github.com/ytdl-org/youtube-dl#format-selection

    # Download best mp4 format available or any other best if no mp4 available
    $ youtube-dl -f 'bestvideo[ext=mp4]+bestaudio[ext=m4a]/best[ext=mp4]/best'
    
    # Download best format available but no better than 480p
    $ youtube-dl -f 'bestvideo[height<=480]+bestaudio/best[height<=480]'
    
    # Download best video only format but no bigger than 50 MB
    $ youtube-dl -f 'best[filesize<50M]'
    
    # Download best format available via direct link over HTTP/HTTPS protocol
    $ youtube-dl -f '(bestvideo+bestaudio/best)[protocol^=http]'
    
    # Download the best video format and the best audio format without merging them
    $ youtube-dl -f 'bestvideo,bestaudio' -o '%(title)s.f%(format_id)s.%(ext)s'
    Ваша оценка: Thumb up Thumb down +2
    • Vadim Sterkin

      10.06.2019 в 15:26

      Что значит неправильная? Для моей задачи -best подходил. Для своих выбирайте сами.

      Ваша оценка: Thumb up Thumb down 0
  5. BuSH

    10.06.2019 в 14:44

    Вчера я встретил комментарий к одной качалке «HDR с ютутба не качает». Уже хотел искать где у меня завалялся youtube-dl, но ещё быстрее решил вопрос с изъятием темпа у обычного проигрывателя умеющего выбирать поток.
    Что если для некоторых видео не нужен «best»? Сейчас и 8к можно встретить а потом думать как его воспроизвести :)

    З.Ы. Интересно что выберет best в этих hdr видео :)

    Ваша оценка: Thumb up Thumb down 0
    • BuSH

      10.06.2019 в 15:05

      аааа… best загружает эту 720-ку где аудио и видео ещё не разделено на отдельные потоки.

      best: Select the best quality format represented by a single file with video and audio.

      Тогда обычный JS скрипт от savefrom прямо под видео в один клик скачивает эту 720-ку. Для пользователя это гораздо проще.

      Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      10.06.2019 в 15:32

      BuSH: Что если для некоторых видео не нужен «best»?

      Не указывать этот ключ или указывать тот, который нужен, создавать разные команды и тд.

      BuSH: Тогда обычный JS скрипт от savefrom прямо под видео

      Подробнее?

      Ваша оценка: Thumb up Thumb down 0
      • BuSH

        10.06.2019 в 16:03

        Скрипт для браузеров от портала savefrom.net. Ставится через Tampermonkey/Greasemonkey/Violentmonkey. Поддерживает огромное количество всяких хостингов. В браузере появляется кнопка скачки под видео или как поп-ап. До даша на ютьюбе был самой популярной качалкой а в вк музыку и по сей день этой штукой качают.
        Сейчас в нем можно напрямую скачать только отдельные потоки: по 720 с аудио+видео, выше только поток видео без звука или отдельно звук в ac3/ogg. Так же этот скрипт запускает свою отдельную софту качалку Ummy, которая ffmpeg’ом миксует хоть FHD, хоть UHD, хоть ogg в mp3.
        Но для этой 720-ки достаточно только скрипта https://i.imgur.com/3ggHRKU.png
        Этих потоков там сейчас ужас сколько, вот пример с UHD HDR HFR видео https://i.imgur.com/4zyxCOr.png

        Ваша оценка: Thumb up Thumb down +1
        • Vadim Sterkin

          10.06.2019 в 16:39

          Спасибо, возьму на заметку. Пригодится, если хотелки вылезут за пределы моего решения.

          Ваша оценка: Thumb up Thumb down 0
      • Lecron

        10.06.2019 в 17:11

        Vadim Sterkin: создавать разные команды и тд.

        C этого обычно и начинается бардак в скриптах. И это повод при случае показать, как в PS удобно реализовать запрос вариантов.

        Vadim Sterkin: Для моей задачи -best подходил.

        Полностью уверены?
        Весь список потоков можно увидеть youtube-dl -F (ключ регистрозависимый).

        Ваша оценка: Thumb up Thumb down 0
        • Vadim Sterkin

          10.06.2019 в 18:03

          1. Меню в пошике делается несложно. Решение зависит от задачи и/или заказчика. Как-нибудь покажу, если практическая задача возникнет.

          2. Уверен. Там не нужно было макс. качество, но нужно было видео+аудио.

          Можно было экспериментировать дальше, ffmpeg и тд. В любом случае, это уже вопрос ключей утилит. Я лишь показал простой прием пошика — решил задачу за 5 минут и дальше пошел.

          Ваша оценка: Thumb up Thumb down 0
  6. Сергей Миннигалиев

    10.06.2019 в 15:49

    Подскажите, а как можно скачать видео с ok.ru с докачкой? Браузер с расширением savefromnet прекрасно качает, но, если закачка прерывается, то сами понимаете, приходиться качать сначала. А с помошью какой качалки/метода можно качать с докачкой? Спасибо.

    Ваша оценка: Thumb up Thumb down 0
  7. Wlad Wlad

    10.06.2019 в 17:24

    Я тоже про powershell — записал в виде скрипта установку локального сервера (Apacne+MySQL+PHP+phpMyAdmin)/
    Споткнулся на продолжении после перезагрузки.
    Единственный вариант который нашел — перед перезагрузкой создать еще один скрипт разовую задачу для его запуска и после выполнения удалить.
    Умнее ничего не бывает?

    Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      10.06.2019 в 18:05

      Нормальный вариант. Я бы создавал задание планировщика.

      Ваша оценка: Thumb up Thumb down 0
  8. Леонид Сохарев

    10.06.2019 в 21:22

    Я по поводу как скачать видео с You Tube. Пользуюсь программой Download Master. Интегрируется с браузером(устанавливается расширение), поддерживает докачку, из плей- листа можно скачать любой файл. Скачать можно в любом качестве, а также только аудио без видео.

    Ваша оценка: Thumb up Thumb down +1
  9. Рустам Шарафутдинов

    10.06.2019 в 21:42

    Так и не получилось скачать видео с ютубе в максимальном качестве через связку youtube-dl и PowerShell 720p качает, при том что 1080 есть.

    Ваша оценка: Thumb up Thumb down 0
    • Vadim Sterkin

      10.06.2019 в 23:21

      А при чем тут PowerShell? Даже выше написали, что для максимального качества нужно тянуть отдельно лучшее видео и лучшее аудио и смешивать с помощью ffmpeg или аналога.
      youtube-dl --ffmpeg-location D:\ffmpeg URL
      Я дополнил статью, а то многих мой ключ смутил, я смотрю :)

      Ваша оценка: Thumb up Thumb down 0
      • Artem Selifontov

        11.06.2019 в 08:44

        ffmpeg не нужен, youtube-dl сам всё склеивает,

        Vadim Sterkin: Для моей задачи -best подходил. Для своих выбирайте сами.

        с этой командой берётся лучший из готовых файлов, если нужно сразу в плеер отправлять не сохраняя, чего вы не делали.
        Просто не нужно изобретать велосипед, если остальные будут за вами потом повторять.

        Ваша оценка: Thumb up Thumb down 0
        • Vadim Sterkin

          11.06.2019 в 09:06

          Artem Selifontov: Просто не нужно изобретать велосипед, если остальные будут за вами потом повторять.

          Спасибо за наставления. Пожалуй, я недооценил тот момент, что мне интереснее PowerShell, а читателям — youtube-dl :) Я убрал упоминание ключа-f best из статьи.

          Artem Selifontov: ffmpeg не нужен, youtube-dl сам всё склеивает,

          Да, но есть нюанс. Если не указывать ключи:
          • без ffmpeg свалится к лучшему готовому файлу
          • с ffmpeg достигается наилучшее качество

          youtube-dl uses -f bestvideo+bestaudio/best as the default format selection (see #5447, #5456). If ffmpeg or avconv are installed this results in downloading bestvideo and bestaudio separately and muxing them together into a single file giving the best overall quality available. Otherwise it falls back to best and results in downloading the best available quality served as a single file

          Ваша оценка: Thumb up Thumb down +2
    • BuSH

      11.06.2019 в 00:57

      best замените на:

      -f bestvideo+bestaudio

      + значит, что софта будет тянуть отдельно потоки и смешивать сторонней утилитой ffmpeg. Путь к ней обязательно добавить в PATH винды. Или путь указать как писал Вадим, но проще один раз в path добавить.

      параметром

      -F url

      можно вывести весь список доступных потоков и использовать код потока

      -f 137+bestaudio

      это будет самый стандартный 1080 в h264 кодеке и контейнер mp4

      для смены контейнера на матроску нужен параметр

      --merge-output-format mkv

      В итоге получаем оптимальный набор для 1080:

      youtube-dl.exe -f 137+bestaudio --merge-output-format mkv -o %(title)s.%(ext)s URL
      Ваша оценка: Thumb up Thumb down 0
      • Vladimir Molodnyakov

        11.06.2019 в 05:33

        Тема про ключи этого универсального любимого многими комбайна youtube-dl сама по себе – отличная тема для обсуждения. Сколько-то лет назад узнал о данном Python-решении на Reddit и, как и многие, использую по мере необходимости.

        Например, вот потребовалось скачать сессии WWDC в наибольшем возможном качестве – хотя бы 1080p и битрейтом и видео, и звука побольше. Да вот незадача: на странице сессий доступен файл для скачивания в максимум 720p@5M и звуком 128k, а HLS-поток на той же странице каждой из сессий уже выдает 1080p@8.5M и звуком 99k. То есть, нужно записать видео из потока, а потом из предлагаемого Apple готового файла уже вытащить звук и его добавить в запись потока.

        Здесь задача простая и набор ключей небольшой:

        youtube-dl --download-archive .archive --add-metadata -f 'bestvideo[ext=mp4]+bestaudio[ext=mp4]/bestvideo+bestaudio' -i --merge-output-format mp4 --external-downloader ffmpeg --external-downloader-args "-loglevel verbose" -o "%(id)s - %(title)s.%(ext)s" https://developer.apple.com/videos/play/wwdc2019/714/

        Это выше у меня немного кривое, примитивное и поверхностное, хотя работающее решение части задачи, а именно: собрать с CDN в mp4-контейнер два HLS-потока для видео и аудио только одной конкретной записи, найдя в master их наилучшие версии, причем чтобы именно mp4 изначально (Apple в данном случае m4a решила обернуть в mp4, хотя это и не важно, ведь в контейнере может быть много чего и тот же Google предпочитает opus), использовать обычный ffmpeg (хотя можно и aria2c, нативный hls и что угодно еще другое) с опцией видеть лог, включенным игнорированием ошибок, именованием файла по нужному шаблону с номером сессии и ее названием.
        Когда оба плейлиста (в контексте HLS, то есть про небольшие mpeg-ts, которыми поток отдается) видео и аудио скачиваются, они совмещаются по таймкодам все тем же обычным ffmpeg (для ts обычно ничего иного и не нужно, да и тем более, что мы и так им уже достаем поток в нашем теоретическом примере) в более web-дружелюбный контейнер mp4 (mkv много чем лучше и универсальнее, хотя не для web optimized, если есть теоретическое желание потом такой контент стримить для личного пользования через, допустим, Plex – mp4 объективно лучше здесь).

        А и да, опция с архивом. По указанному пути создает файл с заданным именем и при будущих попытках скачивания того же самого, вежливо сообщит, что ранее уже качали это (валидация по имени и ID, файл парсится при будущей попытке и должен быть в явном виде точно так же указан).

        [b]NB. Качать со всяких разнообразных сайтов (включая и Apple) теоретически можно, но только для собственного ознакомления. Шэрить скачанное обычно настоятельно и в явном виде запрещено.
        Советов нарушения разнообразных ToC не даю и все описанное не более, чем заметки по теме, а не руководство к действию (кто знает, что и откуда кто станет качать, начитавшись готовых решений – это уже ответственность качающих, а не людей, делящихся на форуме публично доступными настройками менеджеров закачек вроде youtube-dl)[b]

        Про Youtube.

        Здесь я бы уже не general extractor вроде ffmpeg использовал в примере, а тот же aria2c – и в почти любом случае.
        Aria2c позволяет использовать нужное количество потоков, буфер можно настроить (хотя есть и стандартная опция для этого тоже).

        Тоже прямолинейный однострочный без скриптов пример на просто опциях (я к тому, что многие используют youtube-dl в более сложных решениях или обычных скриптах на любом подходящем под задачу языке):

        youtube-dl --download-archive .archive --add-metadata -f bestvideo[ext=vp9]+bestaudio[ext=opus]/bestvideo+bestaudio --external-downloader-args "-x 16 -s 16 -k 5M" --merge-output-format mkv --all-subs --embed-subs -i --external-downloader aria2c -o "%(title)s.%(ext)s" https://PLAYLIST-URL-HERE/

        Здесь покороче напишу, и так все видно и понятно. Формат mkv на выходе (потому что много в mp4 без извращений не влезет столько субтитров, а мы в данном примере хватаем все доступные), задаем конкретные настройки производительности для aria2c, форматы аудио и видео нативные для Google, а больше тут и нет ничего в примере.

        Аналогично можно хоть весь канал Youtube скачать.
        Для georestricted можно использовать прокси. Например, скачать пару записей передач с BBC iPlayer или записей спортивных соревнований с сайта телеканала, который позволяет только для своей страны качать (отдельная тема про всячину вроде HMAC, ну да ладно)
        Можно и несколько дорожек сразу качать (несколько видео и несколько аудио для возможного fallback или выбора языка, допустим).

        Раньше здесь не писал сообщений (читаю Вадима давно, много ценного материала), а тут просто поделиться полезным решил, чем смог

        Ваша оценка: Thumb up Thumb down +2
        • Vadim Sterkin

          11.06.2019 в 07:52

          Спасибо, Владимир, отлично! Никогда не знаешь, какая запись раскачает молчуна :)

          Ваша оценка: Thumb up Thumb down 0
        • Lecron

          11.06.2019 в 09:46

          При таком количестве опций, лучше указать —config-location youtube_default.cfg, куда с комментариями положить все дополнительные настройки.

          Ваша оценка: Thumb up Thumb down 0
      • Lecron

        11.06.2019 в 09:42

        BuSH: В итоге получаем оптимальный набор для 1080

        Или ничего не получаем. Необходимо указывать макро-значение (best, bestvideo, worstvideo)))) по умолчанию, если целевой поток отсутствует.

        Ваша оценка: Thumb up Thumb down 0
        • BuSH

          11.06.2019 в 12:55

          Как это ничего не получаем если мы выбрали поток из списка доступных параметром -F?
          Целью было объяснить где брать а не построить идеальный вариант на все случаи жизни!

          Ваша оценка: Thumb up Thumb down 0

Обсуждение завершено.

Subscribers

Популярные записи

  • Как работает быстрый запуск в Windows (115)
  • Как не заблудиться в SLC, MLC и TLC при выборе SSD (210)
  • Как свободное место на SSD влияет на его производительность и срок службы (194)
  • 10 причин, по которым я не могу работать в Windows XP (362)
  • Создание загрузочного диска Windows PE с .NET Framework и PowerShell (119)
  • Все подробности о восстановлении Windows 8 и 8.1 без удаления файлов (Refresh Your PC) (223)
  • Серия пенальти: Opera 11 vs. IE9 (71)
  • Еще →

Свежие комментарии

  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Stanislav Vershinin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Diogen к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Alexander Kuzin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки
  • Vadim Sterkin к записи diskusage vs. dfp: анализ занятого места на диске из командной строки

Рекомендую ресурсы

  • Windows 10, etc — канал этого блога в Telegram
  • Инсайдеры Windows 10 — чат блога в Telegram
  • Community — новости предварительных сборок
  • Николай Павлов — тайны планеты Excel
  • Вадимс Поданс — PKI, PowerShell и Тера Патрик
  • Василий Гусев — PowerShell и другие скрипты
  • Kazun — PowerShell для взрослых

Реклама

Измененная тема eleven40 Pro на платформе Genesis · Архивы и метки · Правила (16+) · О рекламе · Обратная связь · Вход

Допускается копирование материалов без изменений, с указанием имени автора и гиперссылки на сайт.