AG
Все проекты

video_nn_zip: нейросетевое сжатие видео

Исследовательский проект по нейросетевой видеокомпрессии: видео кодируется не кадрами, а весами компактной сети. Собственный формат .nnv, плеер на GPU, метрики качества и конвейер обработки на C++/CUDA.

C++LibTorchCUDAFFmpegSDL2CMakeНейросетевое сжатие
video_nn_zip: нейросетевое сжатие видео

Обзор

video_nn_zip исследует альтернативу классическим кодекам вроде H.264/H.265. Вместо хранения потока кадров проект обучает компактную нейросеть, которая по координатам (t, x, y) восстанавливает фрагмент изображения. Результат сериализуется в собственный бинарный формат .nnv, а воспроизведение происходит через вычисления на GPU.

Это не просто концепт, а рабочий полный конвейер: декодирование видео через FFmpeg, извлечение сегментов, обучение модели в LibTorch/CUDA, сохранение весов и метаданных, затем воспроизведение через SDL2-рендерер. По сути, проект превращает видео из "набора пикселей" в "параметризованную функцию времени и пространства".

Ключевые возможности

  • Обучение SIREN, multi-scale SIREN и hash-grid моделей на видеопоследовательностях
  • Комбинированная функция потерь MSE + SSIM для баланса между пиксельной точностью и визуальным качеством
  • Асинхронный конвейер decode, затем segment scan, затем training, чтобы не блокировать обучение на операциях ввода-вывода
  • Чекпоинты и возобновление долгого обучения для тяжёлых прогонов
  • Кастомный формат .nnv, в котором хранятся веса, метаданные видео и аудиодорожка
  • GPU-плеер с обычным и прогрессивным режимами отрисовки
  • Утилиты командной строки для кодирования, воспроизведения, экспорта, замера производительности и сравнения
  • Замер качества через PSNR, SSIM и покадровое сравнение восстановленного видео

Технический стек

  • Язык: C++
  • ML: LibTorch (PyTorch C++ API)
  • GPU: CUDA
  • Видео: FFmpeg (ввод/вывод)
  • Плеер: SDL2
  • Сборка: CMake
  • Окружение: Docker

Зачем этот проект

Мне был интересен вопрос: можно ли представить видео не как сжатый поток блоков и коэффициентов, а как компактную нейросетевую репрезентацию, которую потом воспроизводит GPU. Такой подход полезен как исследовательская база для следующего класса задач:

  • экстремальное сжатие коротких клипов, зацикленных роликов и анимированных фоновых сцен
  • хранение процедурного или почти статичного видеоконтента в виде весов модели
  • подготовка форматов для воспроизведения с упором на GPU, где вычисление дешевле передачи тяжёлого файла
  • поиск компромисса между размером, качеством и стоимостью декодирования

На тестовом 1080p-клипе проект показал, что файл .nnv может быть в десятки раз меньше исходного MP4, а воспроизведение на GPU работает в реальном времени. Для промышленного применения это ещё не замена универсальным кодекам, но уже сильный исследовательский полигон для узких сценариев.

Как устроен внутри

Архитектурно проект разделён на несколько независимых слоёв:

  • каталог video/ отвечает за декодирование через FFmpeg и нарезку кадров на сегменты
  • каталог nn/ содержит модели, позиционное кодирование, hash-grid, функции потерь и модуль обучения
  • каталог format/ читает и пишет .nnv, включая веса модели и аудиометаданные
  • каталог player/ выполняет пакетный инференс по координатной сетке и собирает кадр для вывода

Пайплайн кодирования выглядит так:

  1. Видео декодируется в набор кадров.
  2. Каждый кадр разбивается на патчи фиксированного размера, например 8×8.
  3. Для каждого патча формируется обучающий пример: время, координаты и целевой RGB-блок.
  4. Модель обучается предсказывать содержимое патча по координатам.
  5. Лучшее состояние сети, параметры обучения и метаданные видео сохраняются в файл .nnv.

Во время воспроизведения процесс идёт в обратную сторону: плеер строит координатную сетку для момента времени t, прогоняет её через сеть на GPU, получает все патчи пакетом и собирает итоговый буфер кадра. Для multi-scale режима есть прогрессивная отрисовка: сначала грубый кадр, потом уточнение деталей за несколько проходов.

Отдельно важно, что это не "прототип на Python", а инженерный C++-проект: есть асинхронный конвейер, сериализация собственного формата, интерфейс командной строки, метрики, тесты и воспроизводимая Docker-сборка.

Как это помогает в коммерческом проекте

В коммерческой среде такой проект полезен не только как "экзотический кодек", а как база для нескольких прикладных направлений:

  • исследования для медиа- и стриминговых команд: быстро проверить, где нейросетевая репрезентация выигрывает у классического контейнера по размеру или стоимости доставки
  • оптимизация конвейера ассетов: хранить короткие заставки, фоновые циклы, демонстрации продукта или анимации интерфейса в более компактном представлении
  • воспроизведение с опорой на GPU для настольных, киосковых и встраиваемых сценариев, где есть видеокарта, но важны сетевой трафик и размер поставки
  • проверка концепции для периферийных систем видеоаналитики: объединить сжатие, генерацию и реконструкцию в одной среде выполнения
  • внутренний инструмент сравнения моделей: удобно оценивать компромисс между PSNR, SSIM, временем обучения и итоговым размером файла

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

Как проект может зарабатывать деньги

Прямая монетизация у такого решения обычно не в "продаже кодека как есть", а в прикладном продукте поверх технологии:

  • облачный сервис или библиотека для встраивания для сжатия коротких промо-роликов, витрин и цифровых экранов
  • корпоративные интеграции для команд, которым нужен кастомный формат хранения и воспроизведения визуальных ассетов
  • платный конвейер кодирования для конкретных сценариев: зацикленные ролики, рекламные креативы, интерактивные сцены, облегчённые предварительные просмотры
  • лицензирование движка воспроизведения или формата .nnv под закрытые платформы
  • консалтинг и исследовательские заказы для компаний, которые изучают нейросетевое сжатие или доставку медиа с опорой на GPU

Иными словами, деньги здесь появляются там, где стоимость передачи и хранения контента критична, а сцены достаточно предсказуемы, чтобы нейросетевая репрезентация была выгоднее универсального видеокодека.