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







