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







