Ошибка Unknown encoder 'libx264' при запуске FFmpeg означает, что сборка скомпилирована без поддержки нужного кодировщика — проверить список доступных энкодеров можно командой ffmpeg -encoders до того, как начинать конвертацию. Именно с такой диагностики стоит начинать любую работу с FFmpeg Media Encoder: сначала убедиться, что нужный кодек и обёртка присутствуют в вашей сборке, и только потом строить команду кодирования.
FFmpeg — это кроссплатформенный набор библиотек и консольная утилита для записи, конвертации и потоковой передачи аудио и видео. Термином «media encoder» в контексте FFmpeg обычно называют связку из энкодера (кодека, сжимающего поток) и муксера (контейнера, упаковывающего результат). Ниже разберём, как выбрать энкодер, задать качество, использовать аппаратное ускорение и что делать при типичных сбоях.
Что такое энкодер в FFmpeg и как он устроен
При кодировании FFmpeg выполняет три логических шага: демуксирование исходного файла, декодирование потоков в «сырые» кадры и кодирование их выбранным энкодером с последующей упаковкой в контейнер. Понимание этой цепочки помогает правильно читать ошибки: сбой на этапе декодирования и сбой энкодера — разные проблемы с разными решениями.
Энкодеры в FFmpeg делятся на две группы: встроенные (native), например aac или mpeg4, и обёртки над внешними библиотеками — libx264, libx265, libvpx-vp9, libopus. Внешние библиотеки должны быть подключены при компиляции, поэтому их наличие зависит от конкретной сборки. Проверить конфигурацию можно командой:
ffmpeg -hide_banner -encoders | findstr "264 265 vpx opus"
На Linux вместо findstr используется grep. Если нужного энкодера в списке нет, понадобится другая сборка FFmpeg — например, полная статическая сборка с официального сайта проекта.
Базовая команда кодирования
Минимальная команда перекодирования видео в H.264 с аудио AAC выглядит так:
ffmpeg -i input.mov -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4
Разберём параметры. Флаг -i задаёт входной файл. Опция -c:v libx264 выбирает видеоэнкодер, -crf управляет качеством (меньше значение — выше качество и больше размер; типичный рабочий диапазон для x264 — примерно от 18 до 28), -preset регулирует баланс скорости и степени сжатия. Аудиодорожка кодируется в AAC с битрейтом 128 кбит/с.
Если перекодировать видео не нужно, а требуется только сменить контейнер, используйте копирование потока — это выполняется почти мгновенно и без потери качества:
ffmpeg -i input.mkv -c copy output.mp4
- 🎬 -c:v — выбор видеоэнкодера (libx264, libx265, libvpx-vp9)
- 🎧 -c:a — выбор аудиоэнкодера (aac, libopus, libmp3lame)
- ⚙️ -crf — режим постоянного качества для видео
- 📦 -c copy — копирование потоков без перекодирования
Выбор кодека: H.264, H.265, VP9 и AV1
Выбор энкодера зависит от того, где будет воспроизводиться результат. H.264 (libx264) — самый совместимый вариант: его аппаратно декодирует практически любое устройство. H.265/HEVC (libx265) при том же качестве даёт файл заметно меньшего размера, но кодируется медленнее и поддерживается не всюду. VP9 и AV1 (libvpx-vp9, libaom-av1, libsvtav1) ориентированы на веб и открытые платформы.
| Кодек | Энкодер FFmpeg | Совместимость | Эффективность сжатия |
|---|---|---|---|
| H.264 | libx264 | Максимальная | Базовая |
| H.265 (HEVC) | libx265 | Современные устройства | Выше H.264 |
| VP9 | libvpx-vp9 | Браузеры, Android | Сопоставима с HEVC |
| AV1 | libaom-av1 / libsvtav1 | Новые устройства и браузеры | Одна из самых высоких |
⚠️ Внимание: поддержка HEVC и AV1 зависит от устройства воспроизведения. Перед массовым перекодированием архива проверьте результат на целевом плеере или телевизоре — иначе можно получить файлы, которые не откроются.
Для аудио универсальный выбор — AAC для контейнера MP4 и Opus для MKV/WebM. Opus при низких битрейтах звучит заметно лучше MP3, но старая техника может его не воспроизводить.
Управление качеством и битрейтом
Существует два принципиальных подхода: режим постоянного качества (-crf) и режим заданного битрейта (-b:v). CRF удобен для архива и домашнего использования — энкодер сам распределяет биты между сценами. Жёсткий битрейт нужен, когда есть лимит канала или размера, например для стриминга или загрузки на площадку с ограничениями.
Двухпроходное кодирование (2-pass) даёт более точное попадание в целевой битрейт:
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 1 -an -f null NUL
ffmpeg -i input.mp4 -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 128k output.mp4
На Linux вместо NUL указывается /dev/null. Первый проход анализирует видео и пишет статистику в лог-файл, второй — кодирует с учётом этих данных.
Аппаратное ускорение кодирования
Программные энкодеры вроде libx264 полностью нагружают процессор. Если в системе есть совместимый GPU, можно использовать аппаратные энкодеры: h264_nvenc и hevc_nvenc для NVIDIA, h264_qsv для Intel Quick Sync, h264_amf для AMD, h264_videotoolbox на macOS. Наличие конкретного энкодера зависит от сборки FFmpeg и драйверов — проверяйте через ffmpeg -encoders.
ffmpeg -i input.mp4 -c:v h264_nvenc -preset p5 -cq 23 -c:a copy output.mp4
Аппаратное кодирование работает в разы быстрее, но при одинаковом битрейте качество обычно уступает программному x264/x265. Для быстрых задач — транскодирования «на лету», стриминга, черновых превью — это оправданный компромисс. Для финального архивного мастера программный энкодер предпочтительнее.
⚠️ Внимание: ошибка вида «Cannot load» или «No capable devices found» при вызове NVENC/AMF/QSV чаще всего означает устаревший драйвер GPU или отсутствие поддержки нужного кодека в самой видеокарте. Обновите драйвер с сайта производителя и сверьте возможности чипа с его официальной спецификацией.
☑️ Проверка перед аппаратным кодированием
Типичные ошибки и их решение
Разберём сбои, с которыми чаще всего сталкиваются при работе с FFmpeg Media Encoder. Важно читать полный текст ошибки в консоли — последние строки вывода обычно содержат конкретную причину.
- 🔍 Unknown encoder — энкодер отсутствует в сборке; установите полную версию FFmpeg или выберите доступный аналог
- 📉 Conversion failed без деталей — запустите команду с флагом
-v verboseдля расширенного лога - 🧩 Invalid argument — несовместимость кодека и контейнера, например VP9 нельзя упаковать в AVI
- ⏱️ Рассинхрон аудио и видео — попробуйте добавить
-async 1или перекодировать звук вместо копирования
Отдельный случай — повреждённые исходники. Если входной файл содержит битые кадры, FFmpeg может останавливаться посередине. Проверить целостность можно командой ffmpeg -v error -i input.mp4 -f null -: она декодирует файл и выводит только ошибки, не создавая результата.
Почему FFmpeg «не видит» файл по пути с кириллицей или пробелами
Заключайте путь в кавычки: ffmpeg -i "C:\Видео\мой файл.mp4" out.mp4. В некоторых окружениях также помогает запуск из терминала с корректной кодировкой (chcp 65001 в Windows) или переименование файла латиницей.
Практические сценарии: извлечение аудио, нарезка, изменение разрешения
Энкодер пригодится не только для полной конвертации. Вот несколько частых задач. Извлечение звуковой дорожки в MP3:
ffmpeg -i video.mp4 -vn -c:a libmp3lame -q:a 4 audio.mp3
Уменьшение разрешения до 1280 пикселей по ширине с сохранением пропорций (значение -2 подбирает чётную высоту автоматически):
ffmpeg -i input.mp4 -vf "scale=1280:-2" -c:v libx264 -crf 23 -c:a copy output.mp4
Вырезать фрагмент без перекодирования можно так: ffmpeg -ss 00:01:30 -to 00:02:45 -i input.mp4 -c copy clip.mp4. Учтите, что при копировании потока нарезка происходит по ключевым кадрам, поэтому границы фрагмента могут немного смещаться. Для покадровой точности уберите -c copy и перекодируйте фрагмент.
Часто задаваемые вопросы
Чем отличается кодек от контейнера?
Кодек (H.264, AAC, AV1) — это алгоритм сжатия потока, а контейнер (MP4, MKV, WebM) — обёртка, объединяющая видео, аудио и субтитры в один файл. Один и тот же кодек может находиться в разных контейнерах, и не каждый контейнер принимает любой кодек.
Какое значение CRF выбрать для libx264?
Диапазон 18–28 считается рабочим: 18 — почти без визуальных потерь, 23 — значение по умолчанию, 26–28 — заметное сжатие с умеренной потерей качества. Оптимум подбирается экспериментально на коротком тестовом фрагменте.
Почему аппаратный энкодер даёт файл хуже по качеству при том же битрейте?
Аппаратные энкодеры (NVENC, QSV, AMF) оптимизированы под скорость и используют упрощённые алгоритмы анализа кадра. При ограниченном битрейте это даёт менее эффективное сжатие, чем у программных x264/x265. Компенсировать можно повышением битрейта или выбором более качественного пресета энкодера.
Можно ли кодировать видео без потери качества?
Да, у libx264 есть режим -crf 0 (lossless), а также существуют специальные кодеки вроде FFV1. Однако размер таких файлов очень велик. На практике CRF 16–18 визуально неотличим от оригинала при существенно меньшем объёме.
FFmpeg выдаёт ошибку при упаковке HEVC в MP4 — что делать?
Проверьте, что используется актуальная версия FFmpeg, и при необходимости добавьте параметр -tag:v hvc1 — он повышает совместимость HEVC-видео в MP4 с рядом плееров и устройств Apple. Альтернатива — контейнер MKV, который принимает HEVC без дополнительных тегов.