Skip to content

Instantly share code, notes, and snippets.

@if0rest
Last active March 10, 2026 11:25
Show Gist options
  • Select an option

  • Save if0rest/2a9bf4ea65248f06b9aa7b3015d76a59 to your computer and use it in GitHub Desktop.

Select an option

Save if0rest/2a9bf4ea65248f06b9aa7b3015d76a59 to your computer and use it in GitHub Desktop.
Как настроить yt-dlp и горя не знать.

Очередная инструкция на случай амнезии.


YT-DLP - БАЗИРОВАННАЯ тулза для скачивания контента с медиахостингов, и многие проги ей завидуют хранят под капотом именно её ядро. Оседлав этого жеребца, смотришь на других наездников, как на бедолаг с раздолбанным очком. Приступим.

  1. yt-dlp работает в связке с ffmpeg, поэтому скачиваем свежие релизы первого и второго и распаковываем исполняемые файлы в одну папку.

изображение

  1. Поскольку yt-dlp работает через CLI, чтобы вызывать его из любого места добавим путь к программе в переменную среды Windows PATH.

Note

Напомню: при вызове .EXE из командной строки без указания полного пути до него, Windows сначала шерстит каталоги, перечисленные в переменной среды PATH, и если ничего не находит, пишет:

изображение

Поэтому заходим в Пуск, начинаем печатать «перемен...», как нам уже предлагают пункт «Изменение системных переменных среды». Его и выбираем. Далее (можно сразу к картинке):

1) кликаем «Переменные среды...»;
2) в «Переменные среды пользователя...» дабл-клик по Path;
3) «Создать» и указываем путь к каталогу с yt-dlp.exe;

изображение

4) После перезагрузки или даже выхода из учётки (или сразу?) изменения вступят в силу, и можно будет обращаться из любого места по имени:

> yt-dlp <URL>

  1. А теперь самое главное — КОНФИГ. Он нужен, чтобы не указывать ключи всякий раз, когда хотим что-то скачать. У меня он лежит там же, где всё остальное, и называется yt-dlp.conf. >> САМ КОНФИГ <<.

Note

Поскольку я по-прежнему стою на том, что пишу ДЛЯ СЕБЯ, будет шизофренией объяснять значение всех команд себе же. Если что-то забыл, чекай документацию.

ИТОГО. Как же всё работает?

Где-то в системе лежит папка с содержимым:

изображение

Открываем командную строку и обращаемся к yt-dlp, добавляя в конце URL нужного видоса/плейлиста/канала. Делаем это по имени, т.к. уже добавили путь в PATH.

> yt-dlp https://www.youtube.com/watch?v=SSVybV2_cW8

Благодаря настроенному конфигу после инициализации запроса начнется скачивание видосов в нужном качестве с нужным обвесом в указанный каталог.

Voilà !

Note

Решил вычистить конфиг от большинства комментов и перенести сюда в виде заметок.

Нужно запомнить всего три команды:

-U - обновляет yt-dlp до актуальной версии. Если видео не хочет скачиваться или скачивается медленно.
-F - анализирует переданный URL и показывает доступные варианты скачивания.
-f - скачивает выбранный формат.

https://dtf.ru/howto/2026499-kak-polzovatsya-yt-dlp


СОКРАТИТЬ ИМЯ yt-dlp до yt С ПОМОЩЬЮ SYMLINK:

  1. В командной строке из под админа находим папку c yt-dlp.
  2. Пишем:
mklink yt.exe yt-dlp.exe
  1. В каталоге создается символьная ссылка на yt-dlp.exe. Теперь можем вызывать:
yt <URL>

explorer_KChtYiWa6p


КОНВЕРТАЦИЯ КЛИПА В AUDIO-ONLY

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

-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

yt-dlp/yt-dlp#10128 (comment)


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)

  1. 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)


FORMAT SELECTION

Формат Потоки
b* ?ВИДЕО ?АУДИО
b ВИДЕО+АУДИО
bv ВИДЕО
bv* ВИДЕО ?АУДИО
ba АУДИО
ba* АУДИО ?ВИДЕО

Полезно к ознакомлению:

--no-playlist --no-mtime --no-check-certificates --embed-metadata --embed-chapters --embed-thumbnail --merge-output-format mp4 -N 3
-f 'ba[abr<70][ext=m4a]/ba[ext=m4a]/ba[abr<70]' -o 'E:\m4a\%(title)+.200s [%(abr).2dkbs].%(ext)s'
--alias "dest" "-o 'D:\[%(uploader)s] %(title)+.200s (%(height)sp%(fps)d_%(vcodec).4s.%(acodec).4s).%(ext)s'"
--alias "vk" "-f 720p/url720/url480/url360 -o 'E:\%(title)+.200s (%(height)sp_%(format_id).15s).%(ext)s'"
--alias "ams" "--audio-multistreams -f url720+ba[abr<136][more~=eng]"
--alias "rudub" "-f b[language="ru"][height=480]"
--alias "yt" "-f bv*[height<=720][fps<=30]+ba/bv*[height<=720]+ba --dest"
--alias "ytvp" "-f bv*[height<=720][vcodec^=vp9][protocol=https]+ba --dest"
--alias "shorts" "-f bv*[height<=1290][protocol=https]+ba --dest"
--alias "avc" "-f bv*[height<=720][vcodec^=avc][protocol=https]+ba[ext=m4a] --dest"
--alias "1080" "-f 1080p/url1080/bv*[height<=1080][protocol=https]+ba --dest --thumb"
--alias "1080vp" "-f bv*[height<=1080][vcodec^=vp9][protocol=https]+ba --dest --thumb"
--alias "480" "-f bv*[height<=480][protocol=https]+ba[abr<70]"
--alias "360" "-f bv*[height<=360]+ba"
--alias "subs" "--write-auto-sub --sub-langs ru,en --embed-subs --write-subs" #--sub-format srt/best --sub-langs "en.*"
--alias "thumb" "--write-thumbnail --convert-thumbnails jpg" # Download nothing, only thumbnails and convert it to JPG
--alias "q" "-a 'C:\OffProgramFiles\yt-dlp\queue.txt'" # Скачать все видео из списка URL-ов
--alias "cooks" "--cookies-from-browser firefox"
--alias "noem" "--no-embed-metadata --no-embed-chapters --no-embed-thumbnail"
--alias "skip" "--skip-download"
--alias "ds" "--download-sections"
--alias "chnl" "--1080 --thumb --playlist-reverse --sleep-requests 0 --min-sleep-interval 5 --max-sleep-interval 10 --download-archive 'C:\archive_%(uploader)s.txt' -o 'D:\YT\[%(uploader_id)s]\%(playlist_autonumber)s. %(title)+.200s (%(height)sp%(fps)d_%(vcodec).4s.%(acodec).4s).%(ext)s'"
# PLAYLIST
#--------------------------
#--max-downloads N # для больших плейлистов; ограничить кол-во скачиваемого
#-I, --playlist-items 1:20 # скачать диапазон с 1 по 20 видео в плейлисте
#-a, --batch-file list.txt # скачать список видео из файла.txt (1 строчка - 1 url)
#--playlist-reverse # скачивать плейлист с конца
#--date today-2weeks # скачать видосы 2-х недельной давности
#--match-filter "duration > 600" <URL> # скачать видео продолжительности более 600 сек
#--download-archive "C:\archive.txt" # ведет учёт скаченного, игнорируя ранее скаченное
# INTERESTING
#--------------------------
#-g, --get-url # получить прямую ссылку на файл, чтобы скормить плееру
#-s, --simulate # просмотреть, какие видео будут загружены, без их скачивания
#--download-sections "*1:00-1:20" # скачать фрагмент по таймкоду с 1:00 по 1:20
#--no-mtime # дата изменения файла = дате скачивания
#--mtime (default) # дата изменения файла = дате публикации на YouTube
#--replace-in-metadata # заменяет недопустимые символы в названиях на альтернативные
#--downloader aria2c # для многопоточной загрузки (нужно предварительно скачать)
#--sponsorblock-mark all
#--sponsorblock-remove "sponsor, selfpromo"
#--extractor-args "youtube:player_client=default,ios" -S hdr:dv,res,vcodec:av1,acodec:opus,br
#-S +size,+br,+res,+fps equivalent to -f worst
#-S +size # скачать видео наименьшего размера
#-f bestvideo+best+bestaudio --video-multistreams --audio-multistreams # download and merge all 3 given format: 2 video and 2 audio streams in result.
#-f bestvideo+best+bestaudio --no-video-multistreams # download and merge only bestvideo and bestaudio, best is ignored since another format containing a video stream (bestvideo) has already been selected. The order of the formats is therefore important.
#-f best+bestaudio --no-audio-multistreams # will download only best.
#-f bestaudio+best --no-audio-multistreams # will ignore best and download only bestaudio.
# b*, best*: Select the best quality format that contains either a video or an audio or both (i.e.; vcodec!=none or acodec!=none)
# b, best: Select the best quality format that contains both video and audio. Equivalent to best*[vcodec!=none][acodec!=none]
# Получить список видео. 2 варианта: --print > list.txt || -s --print-to-file
#--print "%(id)s;%(title)s" <URL> > file.csv
#--print "[%(uploader)s] %(title)s |> %(webpage_url)s" <URL> >> "C:\list.txt"
#-s --print-to-file "Название: %(title)s|Дата публикации: %(upload_date>%Y-%m-%d)s|Ссылка: %(webpage_url)s" "C:\list.txt" <URL>
# CONNECTION
#--------------------------
#--cookies-from-browser firefox
#--print http_headers
#--no-check-certificates
#--sleep-interval SECONDS # минимальная задержка в сек перед стартом следующей загрузки
#--max-sleep-interval SECONDS # максимальная задержка. Min и Max используются СОВМЕСТНО!!
# Задавая минимальный и максимальный интервалы, фактический интервал выбирается случайным образом. Рассмотрите также возможность добавления --sleep-requests.
#--sleep-requests 1.5 --min-sleep-interval 60 --max-sleep-interval 90
#--user-agent "Mozilla/5.0 (Android 14; Mobile; rv:125.0) Gecko/125.0 Firefox/125.0" # всё равно не работает((
# OUTPUT TEMPLATE
#--------------------------
#--output "E:\YouTube\%(uploader)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
# %(uploader)s
# %(playlist)s
# %(epoch>%Y-%m-%d)s
# %(video_autonumber)d
# %(playlist_index)s
# %(title)+.200s
# %(height)sp
# %(fps).0d
# %(vcodec).4s
# %(format_id)s # Format Code - column ID in formats table
# %(ext)s
@9564519
Copy link

9564519 commented Feb 19, 2026

А как выполнить скачивание с видео возрастным ограничением 18+ ?
Когда включаю --cookies-from-browser firefox - оно работает:
Extracting cookies from firefox
Extracted 1294 cookies from firefox
но доступны только форматы изображения...
(на примере публичный ролик без ограничения, но у меня есть и те что имеют такое ограничение, поведение такое, что просто он вообще не доступен, а с куками только изображения, и их никак не удаётся скачать(((

изображение

@if0rest
Copy link
Author

if0rest commented Feb 19, 2026

  1. Читай WARNING и следуй ссылкам, если те прилагаются: это самый верный способ решить проблемы, которые будут преследовать в процессе пользования. Разраб очень быстро реагирует на изменения со стороны YouTube, информирует, и если нет надежного решения, предлагает временные фиксы.
  2. В данном предупреждении тебя посылают на https://github.com/yt-dlp/yt-dlp/wiki/EJS, где сообщают, что для работы yt-dlp нужна внешняя среда выполнения JavaScript и предлагают несколько на выбор. Я устанавливал Deno (её реккал сам разраб) через команду в PowerShell. Советую ознакомиться с инструкцией по ссылке, но в принципе можешь сразу перейти СЮДА, выбрать свою ОС, агента для установки и скормить ему команду. Кажется, этого будет достаточно.
  3. Видео с ограничением (по возрасту или доступу) будет требовать куки для верификации.
  4. Если прога перестала работать или тупит - обнови: yt-dlp -U.
  5. Вместо --list-formats пиши -F.
изображение

@9564519
Copy link

9564519 commented Feb 24, 2026

@if0rest ДА Спасибо.
Установка deno, и добавление его в PATH - решило задачу:
изображение

@9564519
Copy link

9564519 commented Feb 27, 2026

Подскажите @if0rest , я не разбирался, сори, возможно ли изменить ключи для yt-dlp.exe? К примеру вместо -F использовать -q (от логического query), а -f заменить на -d ? Или это следует писать разработчику yt-dlp.exe ? И таких опций настройки "из коробки" нету?


Up:
Проверил yt --help, и -q занят на Activate quiet mode. If used with --verbose, print the log to stderr
Предполагаю, рас всё это указано в хелпе, это к разработчику yt-dlp.exe.

@if0rest
Copy link
Author

if0rest commented Mar 2, 2026

@9564519, насколько могу судить - нет. Однако разработчик предусмотрел возможность алиасов (псевдонимов), которые можно использовать вместо нативных команд или для их комбинации. Для этого:

# пишем в конфиге отдельной строкой
--alias "ТВОЙ_ПСЕВДОНИМ" "НАТИВНАЯ_КОМАНДА"

# а после вызываем псевдоним из консоли, добавляя перед ним двойной дефис:
 > yt-dlp --ТВОЙ_ПСЕВДОНИМ ...

Как выглядит на практике:

# в конфиге:
--alias "q" "-F"

# в консоли (`--q` вместо `-F`):
> yt-dlp ... --q URL

Но думаю, мы оба согласимся, что это какая-то ерунда: -F - это Formats, -f - это конкретный формат - всё логично.
Вообще, yt-dlp заслуживает того, чтобы ознакомиться с её документацией. Гугли интересующие тебя вопросы, и если выдаст ссылку на Reddit, с 95% вероятностью ты найдешь решение: там отличный тред r/youtubedl с модератором werid, который шарит за всё. Также можешь подрочить языковые модели: Deepseek меня очень выручал поначалу.

P.S. К моей инструкции приложен конфиг, который с тех пор немного изменился. Поизучай ключи и команды в нем. Для меня особым открытием стала --download-sections "*hh:mm:ss-hh:mm:ss", который позволяет скачать по таймкоду нужный отрывок, не скачивая видео целиком.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment