Шесть лет назад включить фильм в HEVC означало гарантированно поломать воспроизведение на половине устройств в доме. Сегодня ситуация перевернулась: ноутбук, телевизор и даже смартфон тянут H.265 без единого тика, а на горизонте уже маячит AV1, который Netflix и YouTube гонят в браузеры по умолчанию. И всё бы хорошо, если бы не одно "но". Стоит заглянуть под капот любого десктопного плеера, как обнаруживается зоопарк декодеров, библиотек и драйверов, в котором легко запутаться. Один и тот же файл AV1 может играть с загрузкой процессора 2% или 80% в зависимости от пары галочек в конфиге. Этот материал - попытка разобрать связку ffmpeg плюс VLC плюс mpv так, чтобы воспроизведение работало предсказуемо, а не случайным образом.

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

Прежде чем лезть в команды, стоит разобраться с архитектурой. Когда плеер открывает файл MKV или MP4 с дорожкой H.265 или AV1, происходит цепочка из четырёх шагов. Демультиплексор разбирает контейнер на потоки видео, аудио и субтитров. Парсер видео вытаскивает из потока отдельные кадры в сжатом виде. Декодер превращает сжатые кадры в массив пикселей. Рендерер отправляет эти пиксели на экран, попутно делая преобразование цветовых пространств, ресайз и постобработку.

Самое тяжёлое здесь - декодирование. Современный H.265 в 4K жрёт примерно вдвое больше CPU, чем H.264 при той же картинке, AV1 - ещё в полтора раза больше. На слабом процессоре софтверное декодирование 4K AV1 с 10-битным цветом превращается в слайдшоу. Поэтому индустрия движется в сторону аппаратного декодирования, когда работу берёт на себя специальный блок в видеокарте, а CPU остаётся почти свободным.

Есть два пути использовать аппаратный декодер. Первый - через универсальные API: VA-API на Intel и AMD под Linux, NVDEC на NVIDIA, DXVA2 и D3D11VA под Windows, VideoToolbox на macOS. Второй, более новый - через Vulkan Video, который появился в стабильном виде в последние пару лет и постепенно становится унифицированным интерфейсом для всех вендоров. Ниже о том, как это всё подключить к ffmpeg, mpv и VLC так, чтобы оно действительно работало.

Ffmpeg как единый бэкенд для всего видеософта в системе

И VLC, и mpv внутри используют libav-семейство библиотек из проекта ffmpeg для большинства операций. mpv делает это явно: дав1д, libde265 и аппаратные декодеры подключаются исключительно через libavcodec. VLC может работать как через libav, так и напрямую с библиотеками типа dav1d, но в большинстве дистрибутивов всё равно собран с зависимостью на ffmpeg. Поэтому разговор о настройке кодеков начинается с ffmpeg, а уже потом распространяется на плееры.

В подавляющем большинстве случаев ffmpeg из репозиториев дистрибутива справляется со всем нужным. Проблемы начинаются, когда дистрибутив старый или собран без поддержки нужных декодеров. Базовая проверка того, что у установленного ffmpeg есть поддержка H.265 и AV1:

# Проверка наличия декодеров H.265 и AV1
ffmpeg -decoders 2>/dev/null | grep -E "hevc|av1"

# Должно быть что-то вроде:
# V..... hevc                 HEVC (High Efficiency Video Coding)
# V..... av1                  Alliance for Open Media AV1
# V..... libdav1d             dav1d AV1 decoder by VideoLAN
# V..... libaom_av1           libaom AV1 decoder

# Список аппаратных ускорителей в системе
ffmpeg -hwaccels 2>/dev/null

Если в выводе нет libdav1d, это серьёзная причина для замены пакета. Встроенный в ffmpeg AV1-декодер существует, но работает в разы медленнее, чем dav1d - оптимизированная библиотека от VideoLAN, написанная с массой ассемблерных вставок под x86 и ARM. На современном Linux пакет ffmpeg почти всегда собирается с поддержкой dav1d, проверить это можно одной командой:

# Список всех библиотек, с которыми скомпилирован ffmpeg
ffmpeg -version | grep -oE -- "--enable-[a-z0-9_]+" | sort

# Должны быть видны ключи вроде --enable-libdav1d, --enable-libsvtav1

На дистрибутивах вроде Debian stable или CentOS Stream версия ffmpeg часто отстаёт на год-полтора, и dav1d там либо устаревший, либо отсутствует. В таких случаях проще всего добавить репозиторий RPM Fusion, deb-multimedia или собрать ffmpeg из исходников.

Установка свежего ffmpeg на Ubuntu и Debian с полным набором декодеров:

# Обновление пакетного индекса и установка готовых сборок
sudo apt update
sudo apt install ffmpeg libavcodec-extra

# libavcodec-extra включает дополнительные кодеки, не входящие в основной пакет
# из соображений лицензирования

# Проверка версии после установки
ffmpeg -version | head -1

Если хочется максимально свежую сборку без ожидания обновлений дистрибутива, есть готовые статические бинарники с сайта проекта. Они компилируются с включёнными dav1d, libde265, libsvtav1 и большинством аппаратных ускорителей:

# Скачивание статической сборки для x86_64
cd /tmp
wget https://johnvansickle.com/ffmpeg/builds/ffmpeg-git-amd64-static.tar.xz
tar xf ffmpeg-git-amd64-static.tar.xz
cd ffmpeg-git-*-amd64-static

# Установка в /usr/local/bin (требует sudo)
sudo cp ffmpeg ffprobe /usr/local/bin/
sudo chmod +x /usr/local/bin/ffmpeg /usr/local/bin/ffprobe

# Проверка приоритета пути
which ffmpeg
ffmpeg -version | head -1

Сборка из исходников нужна редко, в основном для тестов экспериментальных возможностей или специфических аппаратных платформ. Для типичного домашнего использования готовых пакетов хватает.

Аппаратное декодирование на Intel и AMD через VA-API

VA-API остаётся основным интерфейсом для аппаратного декодирования на встроенной графике Intel и видеокартах AMD под Linux. Поддержка H.265 в Intel iGPU есть начиная с Skylake, AV1 - с Tiger Lake (11-е поколение Core) на декодирование и с Arc Alchemist на кодирование. У AMD аппаратное декодирование AV1 появилось в Navi 21 и более новых картах серий RX 6000 и RX 7000.

Базовая установка драйверов и утилит проверки:

# Установка VA-API инфраструктуры на Debian/Ubuntu
sudo apt install vainfo intel-media-va-driver-non-free mesa-va-drivers

# Для Intel современных поколений нужен intel-media-driver
# Для старых Intel и для AMD используется Mesa-драйвер

# Проверка работы VA-API
vainfo

Вывод vainfo должен содержать список профилей вроде VAProfileHEVCMain, VAProfileHEVCMain10, VAProfileAV1Profile0. Если этих строк нет - драйвер не установлен или видеокарта их не поддерживает. Для новых поколений Intel может понадобиться переменная окружения с указанием конкретного драйвера:

# Для процессоров Intel начиная с 11-го поколения
export LIBVA_DRIVER_NAME=iHD

# Для старых Intel (5-7 поколение)
export LIBVA_DRIVER_NAME=i965

# Постоянная установка через /etc/environment
echo "LIBVA_DRIVER_NAME=iHD" | sudo tee -a /etc/environment

После настройки VA-API его сразу могут использовать ffmpeg и плееры. Тестовое декодирование H.265 файла через ffmpeg с аппаратным ускорением:

# Декодирование с использованием VA-API и сброс в /dev/null для замера
ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \
       -i input_hevc.mkv -f null - 2>&1 | grep -E "frame=|speed="

# То же самое с указанием скорости в реальном времени
# speed=N.Nx показывает, во сколько раз быстрее реалтайма работает декодер

Если speed заметно больше 1.0x - аппаратное декодирование работает. Если близко к 1.0 или меньше - скорее всего, файл декодируется на CPU, и нужно искать причину. Чаще всего это либо отсутствие нужного профиля в драйвере, либо файл с параметрами, которые конкретное железо не поддерживает (например, 12-битный HEVC на видеокарте с поддержкой только 10-бит).

Настройка mpv для гарантированно правильного декодирования AV1 и HEVC

mpv по умолчанию декодирует видео на CPU через dav1d для AV1 и встроенный декодер ffmpeg для HEVC. Это сделано осознанно: разработчики считают, что софтверное декодирование даёт более предсказуемое качество картинки и меньше артефактов в редких пограничных случаях. Но на слабых процессорах это упирается в производительность, поэтому аппаратное ускорение всё-таки часто включают руками.

Конфигурация лежит в файле ~/.config/mpv/mpv.conf. Минимальный рабочий конфиг для современной системы с аппаратным декодером:

# ~/.config/mpv/mpv.conf

# Автоматический выбор аппаратного декодера
# auto-safe пробует только проверенные API и откатывается на CPU при ошибке
hwdec=auto-safe

# Явное предпочтение конкретного API
# Варианты: vaapi, nvdec, vulkan, vdpau, videotoolbox (macOS), d3d11va (Windows)
# hwdec=vaapi

# Видеовыход через GPU - универсальный современный рендерер
vo=gpu-next

# Профиль высокого качества для апскейлинга и постобработки
profile=high-quality

# Кеш для плавного воспроизведения
cache=yes
demuxer-max-bytes=400M
demuxer-max-back-bytes=200M

Вариант hwdec=auto-safe важен. Просто auto иногда выбирает декодеры, которые работают нестабильно или дают визуальные глитчи на конкретной комбинации файла и драйвера. auto-safe проверяет известный белый список и при сбое тихо переключается на софт. Для большинства пользователей это правильный компромисс между производительностью и надёжностью.

Проверить, какой декодер реально используется при воспроизведении, можно прямо из mpv нажатием клавиши i во время проигрывания. На экране появится оверлей со списком текущих параметров, в котором строка Hardware decoder покажет либо имя активного аппаратного API, либо no - то есть программное декодирование.

Альтернативный способ - запуск mpv с включённым логированием и анализ вывода:

# Запуск с подробным логом, видна работа декодера
mpv --msg-level=ffmpeg=v,vd=v,vo=v test.mkv 2>&1 | grep -iE "hwdec|decoder|using"

# Сброс лога в файл для разбора
mpv --log-file=/tmp/mpv.log test.mkv
grep -iE "hwdec|decoder" /tmp/mpv.log

Для AV1 на старых машинах, где нет аппаратного декодера, спасает буферизация декодированных кадров. Если CPU не успевает в момент пиковой сложности сцены, заранее декодированные кадры помогают пережить просадку. В mpv это включается так:

# Дополнения к ~/.config/mpv/mpv.conf для слабого железа

# Очередь декодированных кадров на 15 секунд вперёд
vd-queue-enable=yes
ad-queue-enable=yes
vd-queue-max-bytes=2000MiB
vd-queue-max-secs=15

# Увеличенный кеш демуксера
cache=yes
demuxer-max-bytes=650M
demuxer-max-back-bytes=1000M

Этот конфиг съест больше оперативной памяти (до 2-3 ГБ на крупных файлах), но позволит смотреть AV1 без рывков даже на ноутбуке без аппаратного ускорения. Особенно заметна разница на 4K AV1 с 10-битным цветом и эмуляцией зерна плёнки - в этих сценах нагрузка на CPU скачет в разы.

Vulkan Video как новое поколение аппаратного декодирования

Vulkan Video - относительно новый интерфейс для аппаратного декодирования через тот же API, что используется для графики. Преимуществ несколько: единый код для всех вендоров (Intel, AMD, NVIDIA), отсутствие копирования кадров между GPU и CPU при выводе на экран, лучшая интеграция с современными рендерерами. Минус один - технология ещё молодая, и драйверы до сих пор иногда падают на отдельных файлах.

В mpv Vulkan-декодирование включается одной строкой, но требует свежих версий ffmpeg, libplacebo, mpv и драйвера Mesa для AMD/Intel или 580+ драйвера для NVIDIA:

# ~/.config/mpv/mpv.conf

# Включение Vulkan для декодирования и рендеринга
hwdec=vulkan
vo=gpu-next
gpu-api=vulkan

# Альтернатива - только декодирование через Vulkan, рендер через OpenGL
# hwdec=vulkan-copy

Проверка списка кодеков, которые поддерживает текущий Vulkan-драйвер:

# Утилита из пакета vulkan-tools
vulkaninfo --summary | grep -A2 "Video"

# Более детальный вывод по конкретному устройству
vulkaninfo | grep -E "videoCodec|VK_KHR_video"

На AMD картах серии RX 6000+ и Intel начиная с Tiger Lake Vulkan-декодер уже стабилен для H.265 и неплохо работает с AV1. На NVIDIA полная поддержка появилась с драйвером 580.76 в 2024 году. Если на конкретном файле Vulkan начинает выдавать артефакты или падать - стоит просто откатиться на VA-API или NVDEC, разница в производительности обычно невелика.

Настройка VLC для AV1 и HEVC с правильным выбором декодера

VLC устроен иначе, чем mpv. Это полноценный плеер с GUI, в котором большая часть настроек кодеков прячется за вкладками. Базовая поддержка AV1 через dav1d появилась в VLC 3.0.8, в текущей ветке 4.0 эта поддержка существенно расширена и подключено аппаратное декодирование AV1 через VA-API и NVDEC.

Включение аппаратного ускорения через GUI:

Tools -> Preferences -> Input/Codecs
В разделе Hardware-accelerated decoding выбрать:
- Automatic (рекомендуется)
- VA-API (для Intel и AMD под Linux)
- NVDEC (для NVIDIA)
- DXVA 2.0 (для Windows)
- VideoToolbox (для macOS)

Те же настройки через командную строку, что удобно для скриптов и тестов:

# Запуск с явным указанием VA-API
vlc --avcodec-hw=vaapi /path/to/video.mkv

# Запуск с проверкой статистики декодирования
vlc -vvv --avcodec-hw=vaapi /path/to/video.mkv 2>&1 | grep -iE "hwaccel|using"

# Проверка списка поддерживаемых кодеков и модулей
vlc --list 2>&1 | grep -iE "av1|hevc|h265"

VLC отображает информацию об активном декодере во вкладке Tools -> Codec Information во время воспроизведения. В строке Decoder будет либо имя аппаратного декодера, либо имя софтверного типа dav1d или hevc. Если ожидался аппаратный декодер, а отображается софтверный, причины обычно три. Первая - включён режим Automatic, и VLC по какой-то причине не смог инициализировать аппаратный декодер. Вторая - файл использует профиль, не поддерживаемый железом (10/12 бит, специфические уровни). Третья - драйвер не установлен или сломан.

Конфигурационный файл VLC лежит в ~/.config/vlc/vlcrc, и в нём те же опции можно задать вручную:

# ~/.config/vlc/vlcrc

# Аппаратное декодирование
avcodec-hw=vaapi

# Принудительное использование dav1d для AV1 (по умолчанию активно)
codec=dav1d

# Уровень потоков для софтверного декодирования (0 = автоматически)
avcodec-threads=0

Известная боль VLC - сообщение "Your platform doesn't support hardware accelerated AV1 decoding" даже на железе, которое формально AV1 декодировать умеет. Чаще всего это означает либо устаревший драйвер VA-API, либо отсутствие конкретно AV1-профилей в установленной версии libva-driver. Решение - обновить пакет intel-media-va-driver-non-free или mesa-va-drivers до последней версии и проверить вывод vainfo на наличие VAProfileAV1Profile0.

Где какие кодеки работают лучше и какой плеер выбирать под задачу

mpv и VLC решают разные задачи и имеют разные сильные стороны, хотя оба отлично играют и H.265, и AV1. mpv ориентирован на качество картинки и тонкую настройку: продвинутые алгоритмы апскейлинга, поддержка libplacebo, GPU-ускоренная синтеза зерна для AV1, гибкая система фильтров. Минус - порог вхождения, всё настраивается через конфиги, GUI почти отсутствует.

VLC - универсальный плеер для всего на свете с понятным интерфейсом, поддержкой огромного количества контейнеров и сетевых протоколов. Качество картинки чуть проще из коробки (хотя для большинства людей разница незаметна), зато из коробки работает потоковое вещание, конвертация, захват с камеры и десятки других сценариев. Для медиацентра типа Kodi или просто двойного клика на файле - почти всегда правильный выбор.

По кодекам разница в производительности декодирования между плеерами минимальна, потому что оба в итоге дёргают одни и те же библиотеки из ffmpeg. Реальная разница возникает в постобработке: mpv с профилем high-quality и шейдерами выдаёт картинку, которую VLC из коробки не повторит. Зато VLC из коробки обработает кривой MKV с битыми timestamps и сломанным index, на котором mpv просто упадёт.

Для AV1 в 2026 году картина такая. На Intel начиная с 11-го поколения, AMD начиная с RX 6000 и NVIDIA начиная с RTX 30xx аппаратное декодирование работает стабильно через VA-API, NVDEC или Vulkan Video. На остальном железе спасает dav1d, который на любом современном четырёхъядернике уверенно тянет 1080p AV1 и большую часть 4K30. Для 4K60 или 4K HDR без аппаратного декодера лучше обновить железо или подключить очередь декодированных кадров в mpv.

Для H.265 ситуация ещё проще. Аппаратный декодер этого кодека есть в любой видеокарте моложе 2016 года, включая встроенную графику Intel и AMD. Софтверное декодирование через libde265 или встроенный декодер ffmpeg тоже работает быстро благодаря зрелости кодека и оптимизированному коду.

Универсальный совет на одну строку: поставить свежий ffmpeg с dav1d, mpv с hwdec=auto-safe и VLC с автоматическим аппаратным ускорением, после чего проверить через i в mpv или Codec Information в VLC, что декодер на горячих файлах действительно аппаратный. Этого хватает для 95% сценариев домашнего просмотра, а оставшиеся 5% - всегда специфические случаи с экзотическим контентом, для которых придётся читать логи и смотреть в выводы vainfo и vulkaninfo.

Главная мысль здесь даже не в конкретных командах, а в понимании, что вся современная экосистема видеокодеков под десктопом - это прослойка ffmpeg плюс плеер сверху плюс драйвер снизу. Когда что-то ломается, всегда есть три уровня, на которых может быть проблема, и диагностика начинается с проверки самого нижнего. Как только это становится привычкой, мутный мир HEVC и AV1 превращается в довольно понятную и предсказуемую инженерную задачу.