Видео в llama.cpp: поддержка видео через mtmd (PR #24269) — инструкция | AiManual
AiManual Logo Ai / Manual.
08 Июн 2026 Инструмент

Видео в llama.cpp: как включить поддержку видео через mtmd (PR #24269)

Разбираем PR #24269 от ngxson: как добавить поддержку видео в llama.cpp через mtmd. Примеры сборки, сравнение с альтернативами, практические советы.

Реклама
vec_recv1

Локальное видео? Раньше это звучало как фантастика

Пока GPT-5 и Claude 4 уже вовсю переваривают часовые ролики, сообщество open-source плелось в хвосте. До недавнего времени локальные LLM умели только смотреть на картинки — и то через костыли. А видео? Только через конвертацию в кучу кадров, отдельные эмбеддинги и дикий расход памяти. Но ситуация изменилась.

PR #24269 от разработчика ngxson добавляет в llama.cpp нативную поддержку видео через модуль mtmd. Теперь можно скормить модели MP4 напрямую — и получить ответ по сюжету, деталям или временным меткам. Без внешних библиотек, без перегонки кадров вручную.

Важно: поддержка требует специальной сборки llama.cpp с флагом LLAMA_MTMD. Работает с моделями, которые понимают мультимодальные токены, например, LLaVA-NeXT-Video или Qwen2-VL.

Что за зверь mtmd и почему это не очередной костыль

mtmd — это Multi-Token Multi-modal Decoder. Звучит страшно, но суть проста: вместо того чтобы вырезать каждый кадр, прогонять через вижн-энкодер и кэшировать эмбеддинги (как делают все), mtmd работает на уровне токенизации видео прямо внутри llama.cpp.

Видео разбивается на ключевые кадры в рантайме. Каждый кадр проходит через встроенный vision encoder (тот же, что для картинок), и получившиеся токены смешиваются с текстовыми токенами промпта. Модель видит видео как последовательность визуальных токенов — примерно как длинный текст.

💡
Как это отличается от подхода в vLLM? Там недавно фиксили баги с шаблонами Qwen3.5 vision — подробности в статье Фикс шаблона Qwen3.5 vision в vllm. В llama.cpp видео обрабатывается непосредственно, без отдельных серверов-прокси.

Как собрать llama.cpp с поддержкой видео

Никакой магии. Всё стандартно для тех, кто уже собирал проект с кастомными флагами. Если вы только начинаете — рекомендую сперва почитать гайд по оптимизации под AMD или сравнение Vulkan vs CUDA на NVIDIA — там разбираются похожие флаги сборки.

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
mkdir build && cd build
cmake .. -DLLAMA_MTMD=ON -DLLAMA_CUDA=ON  # Или LLAMA_VULKAN, LLAMA_HIPBLAS
cmake --build . --config Release -j$(nproc)

Флаг LLAMA_MTMD включает поддержку видео-токенизации. Если собираете с CUDA — не забудьте про -DLLAMA_CUDA=ON. Для тех, кто гоняет на AMD ROCm — последние бенчмарки ускорения prefill показывают, что поддержка mtmd не влияет на скорость prefill, но увеличивает потребление VRAM на 10–15% из-за кэша кадров.

Предупреждение: если используете speculative decoding (MTP), убедитесь, что у вас свежий билд. Ранее был баг с крашем mmproj — мы разбирали исправление в этой статье. Сейчас баг закрыт, но комбинация mtmd + MTP всё ещё экспериментальна.

Запускаем сервер и отправляем видео

После сборки запускаем llama-server с моделью, поддерживающей видео (например, llava-v1.6-mistral-7b.gguf с соответствующим mmproj). Подавать видео можно через API — параметром video в запросе.

POST /v1/chat/completions
{
  "model": "llava-v1.6-mistral-7b",
  "messages": [
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "Что происходит на 0:45 этого видео?"},
        {"type": "video", "data": "file:///path/to/video.mp4", "format": "video/mp4"}
      ]
    }
  ]
}

Сервер сам вытянет ключевые кадры (по умолчанию — с интервалом 1 кадр в секунду, можно настроить через --video-fps). Важно: видео должно быть небольшого разрешения и длительности — из-за ограничений контекста модели.

Альтернативы: почему не Video-LLaMA или MM-LLaVA?

До появления mtmd основными инструментами для локального видео были отдельные репозитории вроде Video-LLaMA или MM-LLaVA. Они делали то же самое, но:

  • Требовали отдельную установку и кастомный код инференса.
  • Не имели единого API (как у llama.cpp).
  • Плохо оптимизированы под железо — не использовали Metal, Vulkan или ROCm напрямую.
  • Не умели работать с несколькими GPU (например, как роутер на Mac — но в llama.cpp распределение видео-токенов между GPU пока не реализовано).

llama.cpp же даёт единый бинарник, который делает всё: текстовое Q&A, картинки, видео. И да — фреймворк продолжает эволюционировать: недавно добавили поддержку MXFP4 с ускорением на 25% и улучшенную производительность на Blackwell.

Сколько памяти жрать будет?

Зависит от длины видео. Для минутного ролика (30 кадров при 0.5 fps) llama.cpp будет держать в памяти ~30 визуальных токенов — примерно как 30 картинок высокого разрешения. На 7B модели это 6–8 GB VRAM + сама модель (~8 GB). Итого 14–16 GB. Для 13B модели — под 24 GB. Если не хватает — используйте --video-fps 0.2 (один кадр в 5 секунд).

Если у вас карта с малым VRAM — попробуйте квантизацию Q4_K_M и отключите MTP (он может нестабильно работать с видео, как мы писали в разборе MTP в LMStudio).

Кому это реально нужно?

  1. Разработчикам видео-агентов — например, бот, который парсит записи вебинаров и отвечает на вопросы по содержанию.
  2. Исследователям — для тестирования мультимодальных моделей локально, без отправки данных в облако.
  3. Обычным энтузиастам — если вам лень конвертировать ролик в текст субтитров и хочется спросить «А что сказал ведущий на 10-й минуте?»

Звучит круто, но есть подводный камень: видео должно быть закодировано в H.264, иначе mtmd может не вытянуть кадры. Поддержку H.265 и AV1 обещают в следующем PR — следите за репозиторием.

Кстати, если у вас возникают проблемы с повторной обработкой промптов (модель «забывает» видео после первого ответа) — советую взглянуть на гайд по исправлению бага с повторной обработкой Qwen 3.5. Хотя баг был для Qwen, механика похожа.

Параметр Значение
Минимальная версия llama.cpp B10000 (после мержа PR #24269)
Рекомендуемая модель LLaVA-NeXT-Video 7B/13B, Qwen2-VL 7B
Максимальная длина видео ~3 минут при 1 fps (контекст 4096 токенов)
Поддерживаемые GPU CUDA, Vulkan, ROCm, Metal

Пара слов напоследок

Поддержка видео в llama.cpp — это не просто фича для галочки. Это шаг к тому, чтобы локальные модели перестали быть «болталками» и начали полноценно анализировать окружающий мир. Сейчас mtmd ещё сыроват: нет нормального батчинга, видео-кэш не чистится автоматически, а на Windows иногда вылетает с access violation. Но для open-source продукта это нормально — главное, что появился вектор.

Если у вас мощная GPU (RTX 4090 или пара A6000) и вы давно хотели запустить свой аналог GPT-4V на видео — сейчас лучшее время. Собирайте, экспериментируйте, но не забудьте прикрутить ограничение по кадрам, иначе модель уйдет в swapping и завалит всю систему. А если что-то пойдёт не так — помните: сборка с PDL иногда решает странные баги с памятью на NVIDIA.

Подписаться на канал