Обзор
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/ выполняет пакетный инференс по координатной сетке и собирает кадр для вывода
Пайплайн кодирования выглядит так:
- Видео декодируется в набор кадров.
- Каждый кадр разбивается на патчи фиксированного размера, например 8×8.
- Для каждого патча формируется обучающий пример: время, координаты и целевой RGB-блок.
- Модель обучается предсказывать содержимое патча по координатам.
- Лучшее состояние сети, параметры обучения и метаданные видео сохраняются в файл .nnv.
Во время воспроизведения процесс идёт в обратную сторону: плеер строит координатную сетку для момента времени t, прогоняет её через сеть на GPU, получает все патчи пакетом и собирает итоговый буфер кадра. Для multi-scale режима есть прогрессивная отрисовка: сначала грубый кадр, потом уточнение деталей за несколько проходов.
Отдельно важно, что это не "прототип на Python", а инженерный C++-проект: есть асинхронный конвейер, сериализация собственного формата, интерфейс командной строки, метрики, тесты и воспроизводимая Docker-сборка.
Как это помогает в коммерческом проекте
В коммерческой среде такой проект полезен не только как "экзотический кодек", а как база для нескольких прикладных направлений:
- исследования для медиа- и стриминговых команд: быстро проверить, где нейросетевая репрезентация выигрывает у классического контейнера по размеру или стоимости доставки
- оптимизация конвейера ассетов: хранить короткие заставки, фоновые циклы, демонстрации продукта или анимации интерфейса в более компактном представлении
- воспроизведение с опорой на GPU для настольных, киосковых и встраиваемых сценариев, где есть видеокарта, но важны сетевой трафик и размер поставки
- проверка концепции для периферийных систем видеоаналитики: объединить сжатие, генерацию и реконструкцию в одной среде выполнения
- внутренний инструмент сравнения моделей: удобно оценивать компромисс между PSNR, SSIM, временем обучения и итоговым размером файла
Для бизнеса ценность в том, что проект позволяет считать экономику доставки контента: сколько стоит обучение, насколько уменьшается размер артефакта, какую частоту кадров даёт инференс и в каких сценах такой подход действительно окупается.
Как проект может зарабатывать деньги
Прямая монетизация у такого решения обычно не в "продаже кодека как есть", а в прикладном продукте поверх технологии:
- облачный сервис или библиотека для встраивания для сжатия коротких промо-роликов, витрин и цифровых экранов
- корпоративные интеграции для команд, которым нужен кастомный формат хранения и воспроизведения визуальных ассетов
- платный конвейер кодирования для конкретных сценариев: зацикленные ролики, рекламные креативы, интерактивные сцены, облегчённые предварительные просмотры
- лицензирование движка воспроизведения или формата .nnv под закрытые платформы
- консалтинг и исследовательские заказы для компаний, которые изучают нейросетевое сжатие или доставку медиа с опорой на GPU
Иными словами, деньги здесь появляются там, где стоимость передачи и хранения контента критична, а сцены достаточно предсказуемы, чтобы нейросетевая репрезентация была выгоднее универсального видеокодека.
