Очередная инструкция на случай амнезии.
YT-DLP - БАЗИРОВАННАЯ тулза для скачивания контента с медиахостингов, и многие проги ей завидуют хранят под капотом именно её ядро. Оседлав этого жеребца, смотришь на других наездников, как на бедолаг с раздолбанным очком. Приступим.
yt-dlp
работает в связке сffmpeg
, поэтому скачиваем свежие релизы первого и второго и распаковываем исполняемые файлы в одну папку.
- Поскольку
yt-dlp
работает через терминал, чтобы вызывать его из любого места добавим путь к программе в переменную среды WindowsPATH
.
Note
Напомню: при вызове исполняемого файла в командной строке без указания полного пути до него, Windows сначала шерстит каталоги, перечисленные в переменной среды PATH
, и если ничего не находит, пишет:
Поэтому заходим в Пуск, начинаем печатать «перемен...», как нам уже предлагают пункт «Изменение системных переменных среды», его и выбираем. Далее (можно сразу к картинке):
1) кликаем «Переменные среды...»;
2) дабл-клик по «Path» в блоке «Переменные среды пользователя...»;
3) «Создать» и указываем путь к каталогу с yt-dlp.exe
;
4) После перезагрузки или даже выхода из учётки изменения вступят в силу, и можно будет обращаться по имени:
> yt-dlp <URL>
- А теперь самое главное - КОНФИГ. Он нужен, чтобы не указывать нужные ключи всякий раз, когда хотим что-то скачать. У меня он лежит там же, где всё остальное, и называется
yt-dlp.conf
.
Его содержимое:
--no-playlist
--no-mtime
--embed-thumbnail
--embed-metadata
--embed-chapters
--merge-output-format "mp4"
#--downloader "aria2c"
#--download-archive archive.txt PLAYLIST_URL
#-I 1:20
# AUDIO ONLY
#--------------------------
#-f "wa[abr<68]/ba[ext=m4a]"
#-o "E:\YouTube\[%(channel)s] %(title)+.200s [%(abr).2dkbs].%(ext)s"
# VIDEO ONLY
#--------------------------
-f "bestvideo*[height<=530][fps<=30]+bestaudio"
--output "E:\YouTube\[%(channel)s] %(title)+.200s (%(height)sp%(fps)d_%(vcodec).4s).%(ext)s"
# SUBS
#--------------------------
#--embed-subs
#--sub-langs "ru, en"
#--sub-format "srt/best"
#--write-subs
# THUMBNAIL ONLY
#--------------------------
#--write-thumbnail
#--convert-thumbnails "jpg"
#--skip-download
# CONNECTION
#--------------------------
#--cookies-from-browser firefox
--no-check-certificates
# INTERESTING
#--------------------------
#-g, --get-url / получить прямую ссылку на файл, чтобы скормить плееру
#--download-sections "*1:00-1:20" / скачать фрагмент по таймкоду с 1:00 по 1:20 (внимание на *)
#-I, --playlist-items 1:20 / скачать диапазон с 1 по 20 видео в плейлисте
#--playlist-reverse / скачивать плейлист с конца
#--download-archive / ведет учёт скачанных файлов и избегает загрузку ранее скаченного
#--date today-2weeks / скачать видосы 2-х недельной давности
#-s, --simulate / просмотреть, какие видео будут загружены, без их скачивания
#--no-mtime / дата изменения файла = дате скачивания
#--mtime (default) / дата изменения файла = дате публикации на YouTube
#--replace-in-metadata / заменяет недопустимые символы в названиях на альтернативные
#--sleep-interval SECONDS / минимальная задержка в сек перед стартом следующей загрузки
#--max-sleep-interval SECONDS / максимальная задержка. Min и Max используются СОВМЕСТНО!!
#--sleep-requests 1.5 --min-sleep-interval 60 --max-sleep-interval 90
#--playlist-reverse
#--sponsorblock-mark all
#--sponsorblock-remove "sponsor, selfpromo"
#--extractor-args "youtube:player_client=default,ios" -S hdr:dv,res,vcodec:av1,acodec:opus,br
# OUTPUT TEMPLATE
#--------------------------
#--output "E:\YouTube\%(channel)s\%(playlist)s\[%(epoch>%Y-%m-%d)s] %(video_autonumber)d. %(playlist_index)s. %(title)+.200s-(%(height)sp%(fps).0d_%(vcodec).4s).%(ext)s"
# %(channel)s
# %(playlist)s
# %(epoch>%Y-%m-%d)s
# %(video_autonumber)d
# %(playlist_index)s
# %(title)+.200s
# %(height)sp
# %(fps).0d
# %(vcodec).4s
# %(ext)s
Note
Поскольку я по-прежнему стою на том, что пишу ДЛЯ СЕБЯ, будет шизофренией объяснять значение всех команд себе же. Если что-то забыл, чекай документацию.
Где-то в системе лежит папка с содержимым:
Открываем командную строку и обращаемся к yt-dlp
, добавляя URL нужного видоса/плейлиста/канала. Делаем это по имени, т.к. уже добавили путь в PATH
.
yt-dlp https://www.youtube.com/watch?v=SSVybV2_cW8
Благодаря настроенному конфигу после инициализации запроса начнется скачивание видосов в нужном качестве с нужным обвесом в указанный каталог.
Note
Решил вычистить конфиг от большинства комментов и перенести сюда в виде заметок.
Нужно запомнить всего три команды:
-U - обновляет yt-dlp до актуальной версии. Если видео не хочет скачиваться или скачивается медленно.
-F - анализирует переданный URL и показывает доступные варианты скачивания.
-f - скачивает выбранный формат.
https://dtf.ru/howto/2026499-kak-polzovatsya-yt-dlp
- В командной строке из под админа находим папку c yt-dlp.
- Пишем:
mklink yt.exe yt-dlp.exe
- В каталоге создается символьная ссылка на
yt-dlp.exe
. Теперь можем вызывать:
yt <URL>
Пытаюсь вспомнить, что же меня так зацепило в идиотской идее автора скачать видеоклип, а затем извлечь из него аудиодорожку с последующей её конвертацией. Вероятно, сама возможность так сделать. Наверняка этому есть обоснованное применение, которое я пока не догнал.
-x, --extract-audio Convert video files to audio-only files
-c, --continue Resume partially downloaded files/fragments (default)
-i, --ignore-errors Ignore download & postprocessing errors. Download will be considered successful
-w, --no-overwrites Do not overwrite any files
--audio-quality Specify quality when converting audio with -x. Insert value between 0 (best) and 10
(worst) or specific bitrate like 128K (default 5)
The result:
yt-dlp <URL> -xciw -f "bestaudio/best" --audio-quality 0 --audio-format mp3 --embed-thumbnail --embed-metadata -o "%(title)s.%(ext)s"
If video doesn’t have artist in the title, use following output template instead:
-o "%(creator,uploader,channel)s - %(title)s.%(ext)s"
https://blog.elijahlopez.ca/posts/yt-dlp-audio-download/
--sleep-interval SECONDS минимальная задержка в сек перед стартом следующей загрузки
--max-sleep-interval SECONDS максимальная задержка. Min и Max используются СОВМЕСТНО!!
Задавая минимальный и максимальный интервалы, фактический выбирается случайным образом. Рассмотрите также возможность добавления --sleep-requests:
--sleep-requests 1.5 --min-sleep-interval 60 --max-sleep-interval 90
Or, are you asking to convert unicode characters to their "equivalent" ASCII counterparts when using --restrict-filenames
?
yt-dlp/yt-dlp#1330 (comment)
Unicode already has the concept of "equivalent" characters; and you can tell yt-dlp to replace them using NFKC normalization (We could consider using this as default when --restrict-filenames
is given)
- Unicode normalization: The format type U can be used for NFC unicode normalization. The alternate form flag (#) changes the normalization to NFD and the conversion flag + can be used for NFKC/NFKD compatibility equivalence normalization. Eg:
%(title)+.100U
is NFKC
If you want more characters to be replaced, use --replace-in-metadata
.
yt-dlp/yt-dlp#1330 (comment)
Use the 02d
flags instead of the s
conversion type (string).
The d
signifies that it is an integer decimal type, the 0
that it should be padded with 0's, and the 2
that it should be 2 digits in length.
yt-dlp -o "S%(season_number)02d - E%(episode_number)02d - %(episode)s - %(id)s.%(ext)s" <URL>
https://askubuntu.com/a/1305098
There's no way to easily rename previously renamed files. If you grabbed the metadata with --write-info-json
then you have the a file with most of the variables available at least.
--extractor-args "youtube:player_client=ios;player_skip=webpage"
yt-dlp/yt-dlp#10085 (comment)
Формат | Потоки |
---|---|
b* | ?ВИДЕО ?АУДИО |
b | ВИДЕО+АУДИО |
bv | ВИДЕО |
bv* | ВИДЕО ?АУДИО |
ba | АУДИО |
ba* | АУДИО ?ВИДЕО |
Полезно к ознакомлению: