yt-dlp и ffmpeg: зачем он нужен, как установить и какие команды его используют
Автор Команда TunelioОпубликовано
Без ffmpeg yt-dlp может сохранить только то, что YouTube отдаёт одним файлом — обычно 360p или 720p со встроенным звуком. Всё выше приходит отдельными видео- и аудиопотоками, которые ffmpeg должен слить, а каждая конвертация в MP3 — работа ffmpeg. Установите его один раз, добавьте в PATH (или укажите --ffmpeg-location), и предупреждение «ffmpeg not found», пропавшее 1080p и неудачные -x исчезнут.
Что ffmpeg делает для yt-dlp
- Слияние: YouTube отдаёт 1080p, 1440p и 4K отдельными DASH-потоками (только видео и только аудио). yt-dlp скачивает оба и просит ffmpeg собрать их в один MP4 или MKV.
- Извлечение аудио: -x --audio-format mp3 (или m4a, opus, flac, wav) — это транскодирование или ремукс силами ffmpeg.
- Постобработка: встраивание обложек и метаданных, нарезка по главам, ремукс WebM в MP4, исправление контейнера, загрузка HLS/m3u8 для некоторых сайтов.
Если yt-dlp пишет «WARNING: ffmpeg not found» или «You have requested merging of multiple formats but ffmpeg is not installed», он тихо откатывается на лучший однофайловый формат — поэтому столько людей «получают только 720p».
Установка ffmpeg
Linux
sudo apt install ffmpeg # Debian / Ubuntu
sudo dnf install ffmpeg # Fedora (сначала включите RPM Fusion)
sudo pacman -S ffmpeg # Arch
ffmpeg -versionmacOS
brew install ffmpegWindows
winget install Gyan.FFmpeg # или: choco install ffmpeg / scoop install ffmpeg
# затем откройте НОВЫЙ терминал, чтобы PATH обновился, и проверьте:
ffmpeg -versionПроект yt-dlp публикует и собственные сборки ffmpeg (yt-dlp/FFmpeg-Builds на GitHub) с патчами для редких случаев; большинству хватает пакета дистрибутива. yt-dlp нужны исполняемые файлы ffmpeg и ffprobe — оба есть в каждом пакете выше.
Укажите yt-dlp, где ffmpeg
# если ffmpeg не в PATH (портативные сборки Windows, свои пути):
yt-dlp --ffmpeg-location "C:\ffmpeg\bin" "URL"
yt-dlp --ffmpeg-location /opt/ffmpeg/bin/ffmpeg "URL"
# навсегда — в конфиге yt-dlp (~/.config/yt-dlp/config или %APPDATA%\yt-dlp\config.txt):
--ffmpeg-location /opt/ffmpeg/bin--ffmpeg-location принимает либо каталог с ffmpeg/ffprobe, либо путь к самому бинарнику ffmpeg. Проверьте через yt-dlp -v: отладочный заголовок печатает найденную версию ffmpeg или «ffmpeg: none».
Команды, использующие ffmpeg
MP4 лучшего качества (видео + аудио слиты)
# лучшее видео + лучшее аудио, слитые в MP4
yt-dlp -f "bv*+ba/b" --merge-output-format mp4 "https://youtu.be/dQw4w9WgXcQ"
# предпочесть H.264 + AAC, чтобы файл играл везде без перекодирования
yt-dlp -S "res:1080,vcodec:h264,acodec:m4a" --merge-output-format mp4 "URL"Слияние — это ремукс, а не перекодирование: секунды и без потери качества. Перекодирование происходит только по запросу через --recode-video или если кодеки не умещаются в выбранный контейнер (VP9 в MP4 — нормально; Opus в MP4 — нет, тогда yt-dlp откатывается на MKV).
Извлечь аудио
yt-dlp -x --audio-format mp3 --audio-quality 0 "URL" # MP3, лучший VBR
yt-dlp -x --audio-format best "URL" # оставить исходный Opus/AAC без транскодированияВстроить обложку и метаданные
yt-dlp -x --audio-format mp3 --embed-thumbnail --embed-metadata "URL"Вырезать фрагмент
yt-dlp --download-sections "*00:01:00-00:02:30" -f "bv*+ba/b" "URL"Частые ошибки ffmpeg с yt-dlp
- «ffmpeg not found» после установки → откройте новый терминал (Windows читает PATH при запуске) или передайте --ffmpeg-location.
- «Postprocessing: Conversion failed!» → обычно повреждённая частичная загрузка; удалите .part и повторите либо обновите yt-dlp — старые сборки отдают ffmpeg битые фрагменты.
- «ffmpeg exited with code 1» при слиянии → проверьте место на диске и права на каталог вывода; запустите с -v, чтобы увидеть stderr самого ffmpeg.
- 1080p всё ещё нет при установленном ffmpeg → YouTube не предложил его вашему клиенту; попробуйте другой клиент плеера или проверьте предупреждение о PO-токене (см. руководство по 403).
- Очень старый ffmpeg (до 4.x) → часть опций и кодеков не работает; обновите — yt-dlp рассчитывает на относительно свежую сборку.
Docker
FROM python:3.12-slim
RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg curl unzip \
&& pip install --no-cache-dir "yt-dlp[default]" \
&& curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh
ENTRYPOINT ["yt-dlp"]Контейнеру для полной поддержки YouTube сегодня нужны три вещи: yt-dlp, ffmpeg и JavaScript-рантайм (Deno). Пересобирайте образ регулярно — см. руководство по обновлению.
Когда ffmpeg вообще не хочется запускать
Слияние и транскодирование — это CPU, за который вы платите на каждой загрузке; на сервере, обслуживающем пользователей, это быстро накапливается, плюс ещё один бинарник, который надо патчить. Хостинговый API возвращает уже собранный MP4 или готовый MP3 одной подписанной ссылкой, так что с вашей стороны остаётся один HTTP-запрос. Tunelio — наш сервис, учитывайте это; для локального использования ffmpeg плюс yt-dlp — правильный инструмент. Новые аккаунты получают 100 бесплатных кредитов.
Источники
- README yt-dlp — Dependencies (ffmpeg/ffprobe), опции постобработки, --ffmpeg-location.
- yt-dlp/FFmpeg-Builds — патченные сборки ffmpeg от проекта.
- ffmpeg.org — официальная загрузка и документация.
Частые вопросы
ffmpeg обязателен для yt-dlp?
Для запуска — нет, но для YouTube фактически да: всё выше 720p и любая конвертация аудио требуют его. Без ffmpeg вы получаете только лучший однофайловый формат.
Слияние снижает качество?
Нет. Слияние — это ремукс: потоки копируются в новый контейнер без перекодирования. Качество теряется только при транскодировании, например в MP3.
yt-dlp говорит, что ffmpeg не найден, хотя он установлен — почему?
Он не в том PATH, который видит yt-dlp (типично на Windows сразу после установки, а также в cron/Docker). Откройте новый терминал или передайте --ffmpeg-location с папкой, где лежит ffmpeg.exe.
Нужен ли ещё ffprobe?
Да, yt-dlp использует ffprobe в некоторых постпроцессорах. Он входит в любой стандартный пакет ffmpeg.