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

Архивное видео в низком разрешении выглядит размыто на современных экранах, а стандартные методы апскейла добавляют мерцание и артефакты. Мы разрабатываем AI-решения для увеличения разрешения видео с сохранением плавности и детализации. Наша команда реализует проект под ключ — от подбора архитектуры до внедрения и последующей поддержки.
Часто задаваемые вопросы

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 впишется в вашу инфраструктуру.

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

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

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1141