yt-dlp и ffmpeg, 1–2 ГБ свободного места на дискеyt-dlp — консольная программа для скачивания видео и аудио с сайтов; работает из командной строки, без окна и кнопок. ffmpeg — консольный конвертер медиа, нужен, чтобы склеить видео- и аудиодорожку в один файл и перегнать звук в mp3. Ниже — установка, рабочие команды, файл настроек и простая оболочка с интерфейсом (bat-файл с перетаскиванием ссылки и PowerShell-окно с кнопкой).

Win + R → winver → в окне «Windows: сведения» смотрите строку «Версия».C: → «Свойства» → строка «Свободно».Если вы раньше не работали в командной строке и не понимаете, почему команда «не найдена» или «не является внутренней или внешней командой», разбор базовых сценариев терминала есть в гайде Как подключить Android к Windows через ADB: команды, список устройств и ошибки — логика с PATH и вызовом exe там та же.
Что сделать: установите обе утилиты одной командой каждая и убедитесь, что они вызываются по имени из любой папки.
Зачем: yt-dlp скачивает, ffmpeg склеивает дорожки. Без второго программа скачает видео и звук отдельными файлами и не соберёт их в один.
Как проверить: команды --version печатают версию, а не ошибку.
winget install --id yt-dlp.yt-dlp -e
winget install --id Gyan.FFmpeg -e
Закройте и заново откройте терминал — winget дописывает путь к программам в переменную окружения PATH (список папок, где Windows ищет exe по имени), и старый терминал этого изменения не увидит. Затем проверка:
yt-dlp --version
ffmpeg -version
Пример ожидаемого вывода: yt-dlp --version печатает одну строку вида 2025.01.15 (у вас будет своя дата — это дата релиза), ffmpeg -version — несколько строк, первая начинается с ffmpeg version.
Альтернативы, если winget недоступен:
python -m pip install -U yt-dlp
yt-dlp, но обновлять его нужно этой же командой, а не ключом -U самой программы.yt-dlp.exe со страницы релизов проекта на GitHub кладут в папку, которая уже есть в PATH (например, C:\Users\<ваш-пользователь>\bin). Точный адрес страницы релизов сверьте с официальной документацией проекта — он может меняться.Почему это работает: Windows ищет программу по имени в папках из PATH. Установщик winget регистрирует эти папки сам, поэтому после перезапуска терминала имя yt-dlp доступно из любого каталога.

Что сделать: освоите 6 флагов, которые закрывают почти все задачи, и вынесете постоянные параметры в конфиг.
Зачем: без конфига вы каждый раз печатаете один и тот же длинный набор флагов; с конфигом достаточно yt-dlp "<ссылка>".
Как проверить: тестовая команда без скачивания печатает название ролика.
yt-dlp --simulate --get-title "https://www.youtube.com/watch?v=<ID>"
Пример ожидаемого вывода: одна строка с названием видео. <ID> — 11-символьный идентификатор из адреса, например в https://www.youtube.com/watch?v=dQw4w9WgXcQ это dQw4w9WgXcQ. --simulate означает «показать, но не качать».
Основные флаги:
| Флаг | Что делает | Пример |
|---|---|---|
| `-f` | выбор формата (качество, кодек) | `-f "bv*+ba/b"` — лучшее видео + лучшее аудио, иначе лучший единый файл |
| `-x` | извлечь только аудио | `yt-dlp -x --audio-format mp3 "<url>"` |
| `-P` | папка назначения | `-P "C:\Users\<ваш-пользователь>\Downloads\yt-dlp"` |
| `-o` | шаблон имени файла | `-o "%(title)s [%(id)s].%(ext)s"` |
| `--playlist-items` | выбрать элементы плейлиста | `--playlist-items 1-5` |
| `--write-subs --sub-langs` | скачать субтитры | `--write-subs --sub-langs "ru,en"` |
| `--cookies-from-browser` | взять cookies из браузера | `--cookies-from-browser chrome` |
| `-U` | обновить yt-dlp | `yt-dlp -U` |
Конфиг на Windows лежит в %APPDATA%\yt-dlp\config.txt. Создайте папку и файл:
New-Item -ItemType Directory -Force -Path "$env:APPDATA\yt-dlp" | Out-Null
notepad "$env:APPDATA\yt-dlp\config.txt"
Содержимое файла (путь подставьте свой, с вашим именем пользователя):
-P "C:\Users\<ваш-пользователь>\Downloads\yt-dlp"
-o "%(title)s [%(id)s].%(ext)s"
-f "bv*+ba/b"
--merge-output-format mp4
--write-subs
--sub-langs "ru,en"
--no-overwrites
%(title)s, %(id)s, %(ext)s — переменные шаблона: название, идентификатор и расширение подставляются автоматически. --no-overwrites не даёт качать один и тот же файл дважды.
Почему это работает: параметры из config.txt подставляются к каждой команде как аргументы по умолчанию, а флаги в командной строке их перекрывают. Поэтому разовое yt-dlp -x --audio-format mp3 "<url>" всё равно скачает только звук.
Пример полного вызова — первые 5 роликов плейлиста в mp4 в свою папку:
yt-dlp --playlist-items 1-5 -f "bv*+ba/b" --merge-output-format mp4 "https://www.youtube.com/playlist?list=<ID>"
Проверить, что конфиг подхватился: yt-dlp -v --simulate "<url>" — в начале вывода будет блок отладочной информации, где указан путь к пользовательскому конфигу (формулировка строки зависит от версии; если строки нет — сверьтесь с документацией по флагу --config-locations).

Что сделать: положите рядом с yt-dlp два файла — bat-скрипт для перетаскивания ссылки и PowerShell-окно с кнопкой и логом.
Зачем: bat-файл избавляет от набора команд, PowerShell-окно показывает ход скачивания и ошибки, не закрываясь после запуска.
Как проверить: ссылка, перетащенная на bat-файл, приводит к появлению mp4 в папке загрузки.
Файл download.bat (кодировка UTF-8):
@echo off
chcp 65001 >nul
if "%~1"=="" (
set /p "URL=Вставьте ссылку и нажмите Enter: "
) else (
set "URL=%~1"
)
yt-dlp "%URL%"
echo.
echo Готово. Файлы в папке из config.txt
pause
%~1 — первый аргумент, то есть путь или ссылка, перетащенная на файл. Если аргумента нет, скрипт спросит ссылку вручную. pause оставляет окно открытым, чтобы вы прочитали ошибку.
Файл yt-dlp-gui.ps1 — минимальное окно на WinForms (штатная библиотека Windows Forms для окон):
Add-Type -AssemblyName System.Windows.Forms
Add-Type -AssemblyName System.Drawing
$form = New-Object System.Windows.Forms.Form
$form.Text = 'yt-dlp'
$form.Size = New-Object System.Drawing.Size(720, 440)
$txtUrl = New-Object System.Windows.Forms.TextBox
$txtUrl.Location = New-Object System.Drawing.Point(12, 12)
$txtUrl.Size = New-Object System.Drawing.Size(560, 24)
$txtUrl.Text = 'https://www.youtube.com/watch?v=<ID>'
$btn = New-Object System.Windows.Forms.Button
$btn.Text = 'Скачать'
$btn.Location = New-Object System.Drawing.Point(584, 10)
$btn.Size = New-Object System.Drawing.Size(110, 28)
$log = New-Object System.Windows.Forms.TextBox
$log.Location = New-Object System.Drawing.Point(12, 50)
$log.Size = New-Object System.Drawing.Size(682, 340)
$log.Multiline = $true
$log.ScrollBars = 'Vertical'
$log.ReadOnly = $true
$btn.Add_Click({
$log.Text = "Запуск: yt-dlp $($txtUrl.Text)`r`n"
$psi = New-Object System.Diagnostics.ProcessStartInfo
$psi.FileName = 'yt-dlp'
$psi.Arguments = "`"$($txtUrl.Text)`""
$psi.RedirectStandardOutput = $true
$psi.RedirectStandardError = $true
$psi.UseShellExecute = $false
$psi.CreateNoWindow = $true
$p = [System.Diagnostics.Process]::Start($psi)
$log.AppendText($p.StandardOutput.ReadToEnd())
$log.AppendText($p.StandardError.ReadToEnd())
$p.WaitForExit()
})
$form.Controls.AddRange(@($txtUrl, $btn, $log))
[void]$form.ShowDialog()
Запуск (обход политики выполнения скриптов, иначе файл не выполнится):
powershell -ExecutionPolicy Bypass -File .\yt-dlp-gui.ps1
Почему это работает: скрипт запускает yt-dlp как отдельный процесс, перехватывает его стандартный вывод и вывод ошибок и печатает в текстовое поле. Конфиг при этом применяется автоматически — GUI не дублирует настройки.
Чек-лист приёмки:
yt-dlp --version и ffmpeg -version печатают версии--simulate --get-title возвращает название ролика%APPDATA%\yt-dlp\config.txt лежит ваш путь загрузкиdownload.bat создаёт файл в папке загрузкиyt-dlp-gui.ps1 показывает строки прогресса и не закрывается самоПроблема. Команда не находится после установки
'yt-dlp' is not recognized as an internal or external command, operable program or batch file.yt-dlp --version. Если ошибка осталась — проверьте PATH: $env:PATH -split ';' и найдите папку, куда установился exe; при необходимости запустите winget install --id yt-dlp.yt-dlp -e ещё раз от администратора. Быстро найти точный текст ошибки и разбор помогает ИИ-поиск в системе — см. Как использовать ИИ-поиск в Windows 11: команды и настройка.Проблема. Не собирается файл из видео и аудио
ERROR: You have requested merging of multiple formats but ffmpeg is not installed (текст может немного отличаться в зависимости от версии).-f "bv*+ba/b"), а ffmpeg не установлен или не виден в PATH.winget install --id Gyan.FFmpeg -e, перезапустить терминал, проверить ffmpeg -version. Как временный обход — скачать единый файл: yt-dlp -f "b" "<url>".Проблема. Скачивание обрывается на 403
ERROR: unable to download video data: HTTP Error 403: Forbiddenyt-dlp -U (для установки через pip: python -m pip install -U yt-dlp), затем повторить. Если 403 остаётся, добавить cookies браузера: yt-dlp --cookies-from-browser chrome "<url>" (браузер должен быть закрыт).Вы установили yt-dlp и ffmpeg, вынесли постоянные параметры в %APPDATA%\yt-dlp\config.txt и получили две оболочки: bat-файл для перетаскивания ссылок и PowerShell-окно с кнопкой и логом. Дальше имеет смысл добавить в конфиг --download-archive archive.txt, чтобы уже скачанные ролики не качались повторно, и закрепить download.bat на панели задач.
Нужен ли ffmpeg, если я качаю видео в одном файле?
Для форматов, где видео и звук лежат отдельными дорожками, — да, без него сборка невозможна и появится ошибка про merging. Если принудительно указать единый формат (-f "b"), можно обойтись, но качество обычно ниже.
Как скачать только звук в mp3?
Команда yt-dlp -x --audio-format mp3 "<url>". Флаг -x означает «извлечь аудио», --audio-format mp3 задаёт формат; конвертацию выполняет ffmpeg.
Где yt-dlp хранит настройки на Windows?
В файле %APPDATA%\yt-dlp\config.txt, то есть в C:\Users\<ваш-пользователь>\AppData\Roaming\yt-dlp\config.txt. Параметры из него применяются к каждому запуску и перекрываются флагами в командной строке.
Как обновить yt-dlp и почему это важно?
yt-dlp -U — для установки через winget или отдельным exe. Для установки через pip ключ -U не работает: обновляйте командой python -m pip install -U yt-dlp. Обновление нужно, потому что площадки меняют защиту, и старые версии начинают отдавать ошибки вроде 403.