Реализация AI-увеличения разрешения видео (Video Upscale)

AI-апскейл видео: super resolution с сохранением temporal consistency

Направления AI-разработки

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1441
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1301
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    998
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1267
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    714
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    1006

AI-апскейл видео: super resolution с сохранением temporal consistency

Архивное видео в 720p не тянет современные 4K-экраны — простое интерполирование кадров даёт размытость, а per-frame AI-модели — мерцание из-за разрыва temporal consistency. Мы решаем эту проблему с помощью видеоспецифичных архитектур: Real-BasicVSR и BasicVSR++. Из практики: клиент с OTT-платформой перевёл 180 минут 720p в 4K. BasicVSR++ на двух RTX A6000 обработал видео за 14 часов, VMAF вырос с 72 до 89 — платформа приняла контент без ручного ретуширования. Экономия времени составила 40% по сравнению с per-frame методами, а один из клиентов сэкономил до $12 000 на ручной обработке, перейдя на наш pipeline. Мы занимаемся AI-увеличением разрешения видео (super resolution) с помощью нейросетей, переводим SD, 720p, 1080p в 4K.

Ограничения per-frame моделей для видео

Применение Real-ESRGAN к каждому кадру по отдельности нарушает temporal consistency: шум на однородных поверхностях меняется от кадра к кадру, появляется мерцание. В результате даже при высоком PSNR видео выглядит неестественно. Видеомодели, такие как BasicVSR++, используют bidirectional propagation — информацию из прошлых и будущих кадров, что обеспечивает плавные переходы.

Temporal consistency: определение и метрики

Temporal consistency — плавность перехода между соседними кадрами. Измеряется через метрики, такие как ST-RRED или разница в оптическом потоке. Для апскейла видео критично сохранять одинаковый шум и текстуру на одних и тех же объектах в течение всего ролика. BasicVSR++ оптимизирован именно на эту метрику.

Как мы это делаем: стек и реализация

Основной инструмент — BasicVSR++ на PyTorch. Для длинных видео используем чанкованную обработку с overlap-кадрами, чтобы бесшовно сшивать куски. Ниже — пример кода для загрузки модели и апскейла одного чанка:

import torch import numpy as np import cv2 from basicsr.archs.basicvsrpp_arch import BasicVSRPlusPlus def upscale_video_basicvsr( frames: list[np.ndarray], # список кадров (H, W, 3) BGR scale: int = 4, num_feat: int = 64, num_propagation_blocks: int = 7, cpu_cache_length: int = 100 # кадры в памяти GPU одновременно ) -> list[np.ndarray]: """ BasicVSR++ использует bidirectional propagation: информацию из прошлых И будущих кадров. cpu_cache_length: при длинных видео часть кадров выгружаем на CPU. """ model = BasicVSRPlusPlus( mid_channels=num_feat, num_blocks=num_propagation_blocks, is_low_res_input=True, spynet_path='weights/spynet_20210409-c6c1bd09.pth' ) state_dict = torch.load( f'weights/BasicVSR++_reds4_vimeo90k.pth' )['params'] model.load_state_dict(state_dict, strict=True) model.eval().cuda() # Нормализация и конвертация BGR→RGB tensor_frames = [] for frame in frames: f_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) t = torch.from_numpy(f_rgb).float() / 255.0 t = t.permute(2, 0, 1).unsqueeze(0) # (1, C, H, W) tensor_frames.append(t) # Batch всех кадров → (1, T, C, H, W) video_tensor = torch.stack( [f.squeeze(0) for f in tensor_frames], dim=0 ).unsqueeze(0).cuda() with torch.no_grad(), torch.cuda.amp.autocast(): output = model(video_tensor) # (1, T, C, 4H, 4W) result = [] for i in range(output.shape[1]): frame_t = output[0, i].float().cpu() frame_np = (frame_t.permute(1,2,0).numpy() * 255).clip(0,255) result.append( cv2.cvtColor(frame_np.astype(np.uint8), cv2.COLOR_RGB2BGR) ) return result 

Для длинных видео реализуем чанкованную обработку с перекрытием (overlap), чтобы сшивать куски без видимых границ. Каждый чанк размером 50 кадров, перекрытие 5 кадров. Это позволяет обрабатывать видео любой длины, ограниченные только временем.

Какую модель выбрать: BasicVSR++ или Real-BasicVSR?

Модель PSNR Vid4 4x Temporal consistency Скорость 1080p→4K VRAM
Real-ESRGAN (per-frame) 27.4 Низкая (мерцание) ~8fps RTX3080 6GB
BasicVSR 31.4 Хорошая ~2fps RTX3080 12GB
BasicVSR++ 32.4 Отличная ~1.5fps RTX3080 16GB
RVRT 32.8 Отличная ~0.8fps RTX3080 20GB
Real-BasicVSR 31.0 Хорошая ~3fps RTX3080 10GB

Отметим: как видно из таблицы, BasicVSR++ лучше Real-ESRGAN в 5 пунктов PSNR и даёт отличную temporal consistency. Если приоритет — скорость, выбираем Real-BasicVSR. Модель BasicVSR++ представлена в работе BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment (https://github.com/ckkelvinchan/BasicVSR_PlusPlus).

Борьба с компрессионными артефактами

Компрессия H.264 с QP > 28 усиливается SR-моделью — блочность становится заметной на 4K-выходе. В каждом проекте мы добавляем предобработку: deblock-фильтр FFmpeg (параметр -deblock). В сложных случаях — дополнительный AI-denoiser. Это входит в стандартный pipeline.

Процесс работы над проектом

  1. Аналитика — изучаем исходное видео, определяем целевой формат, выбираем модель (BasicVSR++ / Real-BasicVSR / RVRT). Оцениваем время обработки на доступном GPU. Анализируем необходимость fine-tuning под специфический тип контента (аниме, спорт, видео с камер наблюдения).
  2. Проектирование pipeline — настраиваем препроцессинг, чанкование, постобработку. Оптимизируем batch size и используем mixed precision.
  3. Реализация — разворачиваем скрипты, интеграция с вашей инфраструктурой (S3, API). При необходимости обучаем модель на вашем датасете (срок от 8 до 14 недель).
  4. Тестирование — прогоняем на репрезентативном отрезке, замеряем VMAF, проверяем отсутствие мерцания и temporal consistency.
  5. Деплой — переносим в production, настраиваем мониторинг, передаём документацию.

Что входит в работу

  • Документация: описание архитектуры, инструкции по запуску, рекомендации по GPU.
  • Исходный код: репозиторий с pipeline, Docker-образ, скрипты деплоя.
  • Обучение вашей команды: сессия по использованию и адаптации.
  • Гарантия: техническая поддержка 1 месяц после сдачи.

Ориентировочные сроки

Задача Срок
Сервис апскейла видео (Real-BasicVSR) 2–3 недели
Pipeline с препроцессингом + BasicVSR++ 4–6 недель
Fine-tuning под специфический тип контента 8–14 недель
Технические детали пайплайна

Для оптимизации памяти используем gradient checkpointing и CPU offloading. Mixed precision (FP16) ускоряет инференс на ~30%. При работе с несколькими GPU — DataParallel или DistributedDataParallel.

Почему выбирают нас?

Мы — команда AI-инженеров с многолетним опытом в computer vision. Выполнили 15+ проектов по апскейлу видео для OTT-платформ, архивов, спортивных трансляций. Используем лицензионное ПО, гарантируем результат по метрикам VMAF/PSNR. Мы предлагаем видеоапскейл под ключ — от анализа до деплоя. Свяжитесь с нами для оценки вашего проекта — мы подберём оптимальное решение и рассчитаем сроки. Закажите бесплатную консультацию, чтобы узнать, как наш pipeline впишется в вашу инфраструктуру.