Генерация и интерполяция видео: многокадровые пайплайны

Задача страницы. Дать практический план запуска генерации и интерполяции видео на облачных GPU: архитектуры многокадровых пайплайнов (text→video, keyframes→interpolation, stylization), требования к VRAM/диску, консистентность между кадрами, расчёт времени/стоимости, транскодирование (NVENC/AV1), наблюдаемость и масштабирование.

TL;DR

Сценарии и требования

  • Text→Video диффузии. Полная генерация по промпту; важны стабилизация сюжета и p95.
  • Keyframes→Interpolation. Генерация ключевых кадров (или img2img) → интерполяция межкадров для плавности.
  • Видео‑стилизация/редактура. Кадр‑за‑кадром или варп по оптическому потоку + мягкий denoise; хорошо для брендинга и унификации.
  • Интерполяция fps и слоумо. Увеличение частоты без смены сюжета; критична консистентность объектов.

Для точного контроля поз/контуров/стиля подключайте ControlNet/IP‑Adapter: https://cloudcompute.ru/solutions/image-video-gen/controlnet/.

Архитектуры многокадровых пайплайнов

Text→Video (чистая генерация)

Prompt → (опц. ControlNet/IP‑Adapter) → Diffusion per frame
 → (опц.) Flow‑warp стабилизация → Upscale/Denoise → Encode (H.264/AV1)

Keyframes→Interpolation (минимум артефактов)

Ключевые кадры (генерация SDXL/SD3) → Межкадры (интерполяция/варп)
→ Лёгкий denoise и блюр по швам → Upscale → Encode

Видео‑стилизация/редактура (кадр‑за‑кадром + поток)

Входное видео → Optical Flow → Warp(prev→current) → Img2Img (малый denoise)
→ (опц.) ControlNet (edge/pose) → Сборка и Encode

Гибрид (массовые ассеты)

  • Ключевые кадры + стилизация с IP‑Adapter (бренд‑палитра), межкадры — интерполяция.
  • Крупные задания гоняются interruptible кластером; итог — отчёт/манифест.

GPU/VRAM и диск: ориентиры Оценки для fp16/bf16, память‑эффективное внимание, batch=1 (на кадр), без сложных веток.

**Режим** **Разрешение** **SDXL (на кадр)** **SD3 (на кадр)** **Комментарии**
Preview 512–576p 16–24 ГБ 24–32 ГБ 16–28 шагов; быстрый TTFT
HQ short 720p 24–32 ГБ 32–40 ГБ лучше отдельный пул
HQ 1080p (тайлинг) 24–48 ГБ 32–48 ГБ тайлы + сглаживание швов
Апскейл/денойз 8–16 ГБ 8–16 ГБ пост‑этап на дешёвых GPU

Диск/I/O. NVMe на узле: 100–300 ГБ под веса/LoRA/ControlNet/кэш + потоковую запись кадров/превью. Хранение/кэш — https://cloudcompute.ru/solutions/storage-data/.

Производительность и стоимость: быстрые формулы

Обозначим: F — кадры, S — шаги/кадр, t_step — время шага, O_pre/post — накладные (I/O, препроцессоры, транс‑код), α_control — накладные ControlNet/IP‑Adapter, β_tiling — накладные тайлинга.

Время на ролик

T_total ≈ O_pre + F × (S × t_step × (1 + α_control + β_tiling)) + O_post

Выработка/цена

Frames_per_hour ≈ 3600 / (S × t_step)

Cost_per_min ≈ (GPU_hour_price × Num_GPU) / (Frames_per_hour / (fps × 60))

Гибкие пулы: экономика/режимы — https://cloudcompute.ru/solutions/cost-planner/, наблюдаемость — https://cloudcompute.ru/solutions/llm-inference/observability/.

Консистентность между кадрами

  • Сиды/шум. Фиксируйте «видео‑сид» и выводите кадровые сиды как seed_f = hash(seed_video, f) — меньше «прыжков» стиля.
  • Оптический поток и варп. Варпируйте предыдущий кадр в текущий и делайте малый denoise (0.15–0.35) — удерживает форму/текстуры.
  • Cross‑frame контекст. Подавайте соседние кадры как слабый conditioning (низкий вес) в начале шага.
  • ControlNet расписания. «Захват‑и‑отпуск»: высокий вес на ранних шагах, затем спад.
  • Пост‑сглаживание. Лёгкий temporal‑blur/дебандинг по швам тайлов, затем апскейл.

Подробности по ControlNet/IP‑Adapter — https://cloudcompute.ru/solutions/image-video-gen/controlnet/. ComfyUI: референс‑граф (sequence → encode)

Мини‑скелет графа (SDXL, кадр‑за‑кадром, Canny‑контроль + варп по потоку):

{
 "1":{"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"sdxl_base.safetensors"}},
 "2":{"class_type":"CLIPTextEncode","inputs":{"text":"cinematic city at dusk, shallow depth of field","clip":["1","CLIP"]}},
 "3":{"class_type":"CLIPTextEncode","inputs":{"text":"blurry, watermark, artifacts","clip":["1","CLIP"]}},
 "10":{"class_type":"ImageSequenceLoader","inputs":{"pattern":"frames_in/%06d.png","fps":24}},
 "11":{"class_type":"OpticalFlow","inputs":{"prev":["10","PREV"],"curr":["10","CURR"]}},
 "12":{"class_type":"FlowWarp","inputs":{"image":["10","PREV"],"flow":["11","FLOW"]}},
 "13":{"class_type":"CannyEdgePreprocess","inputs":{"image":["10","CURR"],"low":100,"high":200}},
 "14":{"class_type":"ControlNetApplyAdvanced","inputs":{
 "positive":["2","CONDITIONING"],"negative":["3","CONDITIONING"],
 "image":["13","IMAGE"],"strength":0.8,"start":0.0,"end":0.6}},
 "20":{"class_type":"EmptyLatentImageFromSize","inputs":{"width":1024,"height":576}},
 "21":{"class_type":"KSampler","inputs":{
 "model":["1","MODEL"],"steps":24,"cfg":6.0,"sampler_name":"dpmpp_2m","scheduler":"karras",
 "seed":42,"denoise":0.25,"latent_image":["20","LATENT"],
 "positive":["14","CONDITIONING"],"negative":["3","CONDITIONING"],"init_image":["12","IMAGE"]}},
 "22":{"class_type":"VAEDecode","inputs":{"samples":["21","LATENT"],"vae":["1","VAE"]}},
 "30":{"class_type":"SaveImageSequence","inputs":{"images":["22","IMAGE"],"pattern":"frames_out/%06d.png"}},
 "31":{"class_type":"VideoEncode","inputs":{"pattern":"frames_out/%06d.png","fps":24,"codec":"h264_nvenc","outfile":"out.mp4"}}
}

Готовые узлы/паттерны и кэш — https://cloudcompute.ru/solutions/image-video-gen/comfyui/. Для высоких разрешений используйте тайлинг + сглаживание: https://cloudcompute.ru/solutions/image-video-gen/upscaling/.

API‑оркестрация (кадр‑за‑кадром) поверх WebUI

Идея. Читаем кадры, для каждого вызываем img2img с низким denoise и фиксированным seed‑расчётом; после — кодируем видео.

# video_orchestrator.py — упрощённо
import base64, glob, httpx, json, hashlib, time, subprocess, os
WEBUI = "http://localhost:7860"
FPS = 24
def seed_for_frame(seed_video, f):
 return int.from_bytes(hashlib.sha256(f"{seed_video}:{f}".encode()).digest()[:8], "big")
def img_b64(path):
 return "data:image/png;base64," + base64.b64encode(open(path,"rb").read()).decode()
async def stylize_sequence(pattern_in="frames_in/%06d.png", out_dir="frames_out", seed_video=123):
 os.makedirs(out_dir, exist_ok=True)
 frames = sorted(glob.glob(pattern_in.replace("%06d","*")))
 async with httpx.AsyncClient(timeout=60) as s:
 for i,fp in enumerate(frames):
 payload = {
 "init_images":[img_b64(fp)],
 "denoising_strength":0.28,
 "steps":24, "cfg_scale":6.0,
 "seed": seed_for_frame(seed_video, i),
 "width":1024, "height":576,
 "prompt": "cinematic city at dusk, shallow depth of field",
 "negative_prompt": "blurry, watermark, artifacts"
 }
 r = await s.post(f"{WEBUI}/sdapi/v1/img2img", json=payload)
 img = base64.b64decode(r.json()["images"][0].split(",",1)[1])
 open(f"{out_dir}/{i:06d}.png","wb").write(img)
def encode_video(pattern="frames_out/%06d.png", out="out.mp4"):
 # NVENC H.264; см. раздел транскода ниже
 cmd = ["ffmpeg","-y","-framerate",str(FPS),"-i",pattern,
 "-c:v","h264_nvenc","-preset","p5","-b:v","6M","-pix_fmt","yuv420p",out]
 subprocess.run(cmd, check=True)
# Запуск: asyncio.run(stylize_sequence()); encode_video()

Стриминг прогресса и тайм‑ауты — https://cloudcompute.ru/solutions/llm-inference/streaming/.

Транскодирование: NVENC/AV1, аудио и контейнеры

Сборка PNG→MP4 (NVENC H.264):

ffmpeg -y -framerate 24 -i frames_out/%06d.png 
 -c:v h264_nvenc -preset p5 -rc vbr -b:v 6M -maxrate 10M 
 -pix_fmt yuv420p -movflags +faststart out.mp4

AV1 (NVENC или CPU‑кодек) для высокого качества:

# Вариант AV1 NVENC (при наличии поддержки)
ffmpeg -y -framerate 24 -i frames_out/%06d.png 
 -c:v av1_nvenc -rc vbr -b:v 5M -pix_fmt yuv420p out_av1.mp4
# Вариант libaom-av1 (CPU, медленнее, но качественно)
ffmpeg -y -framerate 24 -i frames_out/%06d.png 
 -c:v libaom-av1 -crf 30 -b:v 0 -pix_fmt yuv420p out_av1.mkv

Слияние с аудио (если есть отдельная дорожка):

ffmpeg -y -i out.mp4 -i audio.wav -c:v copy -c:a aac -b:a 192k -shortest out_with_audio.mp4

Больше приёмов по транскоду — https://cloudcompute.ru/solutions/rendering/video-transcode/.

Масштабирование и отказоустойчивость

  • Шардирование кадров. Раздавайте диапазоны f_start..f_end воркерам; храните промежуточные кадры/манифест.
  • Повторы и чекпоинты. Прерываемые задания бьются на чанки; после рестарта — дозавершение недостающих кадров.
  • Short/Long пулы. Короткие ролики — on‑demand; пакеты — interruptible (https://cloudcompute.ru/solutions/interruptible-patterns/).
  • MIG/мульти‑GPU. Разделяйте Интерактив/Batch; для больших видеопартий используйте отдельные GPU‑фермы.
  • Тайлинг. 1080p/4k — тайловая диффузия + сглаживание швов (см. апскейл: https://cloudcompute.ru/solutions/image-video-gen/upscaling/).

Качество vs скорость: рычаги

  • Шаги/кадр (S). Предпросмотр — 16–22; финалы — 24–36.
  • CFG. Держите 4–8; переизбыток даёт «пластик» и мерцание.
  • ControlNet/IP‑Adapter. Точные контуры/поза/стиль (см. https://cloudcompute.ru/solutions/image-video-gen/controlnet/), но учитывайте накладные по VRAM/времени.
  • Flow‑warp + малый denoise. Улучшает стабильность, особенно в стилизации.
  • Двухпроходный конвейер. 576p генерация → апскейл/денойз → транскод; часто дешевле, чем сразу 1080p.
  • Семена. Фиксируйте seed_video; выравнивайте seed_f по кадрам — меньше «миганий».

Наблюдаемость, алерты, логи

Собирайте (см. https://cloudcompute.ru/solutions/monitoring-logging/ и https://cloudcompute.ru/solutions/llm-inference/observability/):

  • frames_per_min, t_step_ms, steps, resolution, queue_wait, доля перезапусков чанков.
  • GPU: util/HBM, OOM/ретраи, время загрузки весов, кэш‑хиты.
  • Препроцессоры: время оптического потока/канни/масок.
  • Транскод: fps, битрейт, доля перепаковок.

Алерты: рост p95 t_step_ms, падение frames_per_min, OOM>0, ошибки I/O/кодека.

Безопасность и политика

Как это запустить в cloudcompute.ru

В хабе шаблонов https://cloudcompute.ru/solutions/templates/ доступны пресеты:

  • “Video‑Diffusion” — ComfyUI‑графы (sequence loader, flow‑warp, control‑ветки, encode), fp16/bf16, кэш весов, SSE‑прогресс.
  • “Batch‑Render (Video)” — очереди, шардирование кадров, ретраи, манифест артефактов, отчёт (время/цена).
  • “Video‑Transcode” — NVENC/AV1 профили, аудио‑слияние, VOD‑пайплайны.

Экономика/SLA — https://cloudcompute.ru/solutions/cost-planner/, эксплуатация — https://cloudcompute.ru/solutions/performance-tuning/ и https://cloudcompute.ru/solutions/interruptible-patterns/.

Чек‑лист перед продом

  • Определены сценарии: Text→Video / Keyframes→Interp / Стилизация.
  • Подтверждены VRAM‑профили и шаги на целевом разрешении.
  • Выбран стек (ComfyUI/WebUI), включены fp16/bf16, SDPA/xformers.
  • Настроены ControlNet/IP‑Adapter и расписания влияния.
  • Включены flow‑warp и «лок‑сиды» на таймлайне; собран двухпроход (апскейл/денойз).
  • Пулы short/long (on‑demand/interruptible), шардинг кадров, ретраи.
  • Метрики/алерты/логи подключены; отчёт о затратах/производительности.
  • Политики/лимиты параметров и allow‑list моделей активированы.

Навигация по разделу «Генерация изображений и видео»

https://cloudcompute.ru/solutions/image-video-gen/https://cloudcompute.ru/solutions/image-video-gen/comfyui/https://cloudcompute.ru/solutions/image-video-gen/automatic1111/https://cloudcompute.ru/solutions/image-video-gen/sdxl/https://cloudcompute.ru/solutions/image-video-gen/sd3/https://cloudcompute.ru/solutions/image-video-gen/controlnet/https://cloudcompute.ru/solutions/image-video-gen/upscaling/https://cloudcompute.ru/solutions/image-video-gen/face-restoration/https://cloudcompute.ru/solutions/image-video-gen/batch-render/ • инфраструктура: https://cloudcompute.ru/solutions/performance-tuning/, https://cloudcompute.ru/solutions/storage-data/, https://cloudcompute.ru/solutions/monitoring-logging/, https://cloudcompute.ru/solutions/llm-inference/streaming/, https://cloudcompute.ru/solutions/llm-inference/observability/, https://cloudcompute.ru/solutions/cost-planner/, https://cloudcompute.ru/solutions/interruptible-patterns/

Готовы запустить?

Запустить GPU-сервер