Меня тут попросили помочь скачать несколько видео с 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
Можно разбить строку с помощью метода .NET 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
Читайте также комментарии — там много полезных советов.
nett00n
К опенсорсному youtube-dl есть не менее опенсорсная обертка на питоне youtube-dl-gui
Сам пользуюсь терминальным вариантам, но родетелям и нормальным людям — рекомендую стовить гуи.
Но решение на поше красивое, да.
Vadim Sterkin
Да, я видел обертку, но решил отложить ее на случай, если мое решение не сработает или нужно будет больше опций загрузки.
А ты не смотрел, как она разруливает вопрос с URL из плейлиста? Целиком плейлист качает?
Вячеслав Шиваров
Есть вот такой параметр —no-playlist
—no-playlist Download only the video, if the URL refers to a video and a playlist.
Vadim Sterkin
Отлично, спасибо! Я решал задачу с PowerShell, ключи утилиты не копал :)
mrFiX
Проблема чаще не скачать — а получить этот прямой URL на единый видеофайл. Но это больше не к Ютубу а к vimeo и другие сервисы
Иногда стоят плееры на сайтах у которых на входе берется playlist в котором 200-600 мелких файликов которые показываются этим плеером как одно видео.
Пока такие вещи хорошо цепляет Internet Download Manager — но он платный, но работает
А на сайте foxford купленные курсы для детей вообще извращенно представлены. Видео идет без звука, а звук встроенный на сайте плеер отдельным потоком подмешивает.
Поэтому покупаешь не дешевые курсы и посмотреть их нигде кроме онлайна не можешь.
Так как скачивается только молчаливое видео.
BuSH
Ютьюб также отдельно вещает видео и аудио начиная с FHD. А мелкие файлы часть стандарта dash.
Всё это стандартно лет 6+ и любая софта для скачки имеет при себе ffmpeg для смешивания аудио и видео.
В хром маркете есть много расширений для скачки dash потоков. Уверен на 99.9%, что они отлично скачают Ваши курсы.
Artem Selifontov
Команда -f best неправильная, загружает 480p, вместо 4к.
https://www.youtube.com/watch?v=3I1chwxGDDo&list=FLBdrsYCD2WrDUhVsEen9NYw
Как правильно выбирать формат https://github.com/ytdl-org/youtube-dl#format-selection
Vadim Sterkin
Что значит неправильная? Для моей задачи -best подходил. Для своих выбирайте сами.
BuSH
Вчера я встретил комментарий к одной качалке «HDR с ютутба не качает». Уже хотел искать где у меня завалялся youtube-dl, но ещё быстрее решил вопрос с изъятием темпа у обычного проигрывателя умеющего выбирать поток.
Что если для некоторых видео не нужен «best»? Сейчас и 8к можно встретить а потом думать как его воспроизвести :)
З.Ы. Интересно что выберет best в этих hdr видео :)
BuSH
аааа… best загружает эту 720-ку где аудио и видео ещё не разделено на отдельные потоки.
best: Select the best quality format represented by a single file with video and audio.
Тогда обычный JS скрипт от savefrom прямо под видео в один клик скачивает эту 720-ку. Для пользователя это гораздо проще.
Vadim Sterkin
Не указывать этот ключ или указывать тот, который нужен, создавать разные команды и тд.
Подробнее?
BuSH
Скрипт для браузеров от портала 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
Vadim Sterkin
Спасибо, возьму на заметку. Пригодится, если хотелки вылезут за пределы моего решения.
Lecron
C этого обычно и начинается бардак в скриптах. И это повод при случае показать, как в PS удобно реализовать запрос вариантов.
Полностью уверены?
Весь список потоков можно увидеть youtube-dl -F (ключ регистрозависимый).
Vadim Sterkin
1. Меню в пошике делается несложно. Решение зависит от задачи и/или заказчика. Как-нибудь покажу, если практическая задача возникнет.
2. Уверен. Там не нужно было макс. качество, но нужно было видео+аудио.
Можно было экспериментировать дальше, ffmpeg и тд. В любом случае, это уже вопрос ключей утилит. Я лишь показал простой прием пошика — решил задачу за 5 минут и дальше пошел.
Сергей Миннигалиев
Подскажите, а как можно скачать видео с ok.ru с докачкой? Браузер с расширением savefromnet прекрасно качает, но, если закачка прерывается, то сами понимаете, приходиться качать сначала. А с помошью какой качалки/метода можно качать с докачкой? Спасибо.
Wlad Wlad
Я тоже про powershell — записал в виде скрипта установку локального сервера (Apacne+MySQL+PHP+phpMyAdmin)/
Споткнулся на продолжении после перезагрузки.
Единственный вариант который нашел — перед перезагрузкой создать еще один скрипт разовую задачу для его запуска и после выполнения удалить.
Умнее ничего не бывает?
Vadim Sterkin
Нормальный вариант. Я бы создавал задание планировщика.
Леонид Сохарев
Я по поводу как скачать видео с You Tube. Пользуюсь программой Download Master. Интегрируется с браузером(устанавливается расширение), поддерживает докачку, из плей- листа можно скачать любой файл. Скачать можно в любом качестве, а также только аудио без видео.
Рустам Шарафутдинов
Так и не получилось скачать видео с ютубе в максимальном качестве через связку youtube-dl и PowerShell 720p качает, при том что 1080 есть.
Vadim Sterkin
А при чем тут PowerShell? Даже выше написали, что для максимального качества нужно тянуть отдельно лучшее видео и лучшее аудио и смешивать с помощью ffmpeg или аналога.
youtube-dl --ffmpeg-location D:\ffmpeg URL
Я дополнил статью, а то многих мой ключ смутил, я смотрю :)
Artem Selifontov
ffmpeg не нужен, youtube-dl сам всё склеивает,
с этой командой берётся лучший из готовых файлов, если нужно сразу в плеер отправлять не сохраняя, чего вы не делали.
Просто не нужно изобретать велосипед, если остальные будут за вами потом повторять.
Vadim Sterkin
Спасибо за наставления. Пожалуй, я недооценил тот момент, что мне интереснее PowerShell, а читателям — youtube-dl :) Я убрал упоминание ключа
-f best
из статьи.Да, но есть нюанс. Если не указывать ключи:
• без ffmpeg свалится к лучшему готовому файлу
• с ffmpeg достигается наилучшее качество
BuSH
best замените на:
+ значит, что софта будет тянуть отдельно потоки и смешивать сторонней утилитой ffmpeg. Путь к ней обязательно добавить в PATH винды. Или путь указать как писал Вадим, но проще один раз в path добавить.
параметром
можно вывести весь список доступных потоков и использовать код потока
это будет самый стандартный 1080 в h264 кодеке и контейнер mp4
для смены контейнера на матроску нужен параметр
В итоге получаем оптимальный набор для 1080:
Vladimir Molodnyakov
Тема про ключи этого универсального любимого многими комбайна youtube-dl сама по себе – отличная тема для обсуждения. Сколько-то лет назад узнал о данном Python-решении на Reddit и, как и многие, использую по мере необходимости.
Например, вот потребовалось скачать сессии WWDC в наибольшем возможном качестве – хотя бы 1080p и битрейтом и видео, и звука побольше. Да вот незадача: на странице сессий доступен файл для скачивания в максимум 720p@5M и звуком 128k, а HLS-поток на той же странице каждой из сессий уже выдает 1080p@8.5M и звуком 99k. То есть, нужно записать видео из потока, а потом из предлагаемого Apple готового файла уже вытащить звук и его добавить в запись потока.
Здесь задача простая и набор ключей небольшой:
Это выше у меня немного кривое, примитивное и поверхностное, хотя работающее решение части задачи, а именно: собрать с 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 в более сложных решениях или обычных скриптах на любом подходящем под задачу языке):
Здесь покороче напишу, и так все видно и понятно. Формат mkv на выходе (потому что много в mp4 без извращений не влезет столько субтитров, а мы в данном примере хватаем все доступные), задаем конкретные настройки производительности для aria2c, форматы аудио и видео нативные для Google, а больше тут и нет ничего в примере.
Аналогично можно хоть весь канал Youtube скачать.
Для georestricted можно использовать прокси. Например, скачать пару записей передач с BBC iPlayer или записей спортивных соревнований с сайта телеканала, который позволяет только для своей страны качать (отдельная тема про всячину вроде HMAC, ну да ладно)
Можно и несколько дорожек сразу качать (несколько видео и несколько аудио для возможного fallback или выбора языка, допустим).
Раньше здесь не писал сообщений (читаю Вадима давно, много ценного материала), а тут просто поделиться полезным решил, чем смог
Vadim Sterkin
Спасибо, Владимир, отлично! Никогда не знаешь, какая запись раскачает молчуна :)
Lecron
При таком количестве опций, лучше указать —config-location youtube_default.cfg, куда с комментариями положить все дополнительные настройки.
Lecron
Или ничего не получаем. Необходимо указывать макро-значение (best, bestvideo, worstvideo)))) по умолчанию, если целевой поток отсутствует.
BuSH
Как это ничего не получаем если мы выбрали поток из списка доступных параметром -F?
Целью было объяснить где брать а не построить идеальный вариант на все случаи жизни!