Разработка систем Image-to-Video генерации
Image-to-video оживляет статичное изображение: добавляет движение, камеру, анимирует элементы сцены. Применяется для оживления продуктовых фото, создания фоновых видео из иллюстраций, анимации персонажей.
Stable Video Diffusion (SVD) — self-hosted
from diffusers import StableVideoDiffusionPipeline
from diffusers.utils import load_image, export_to_video
import torch
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt",
torch_dtype=torch.float16,
variant="fp16"
)
pipe.enable_model_cpu_offload()
def animate_image_svd(
image: bytes,
num_frames: int = 25, # 25 кадров при 7 fps = ~3.5 сек
motion_bucket_id: int = 127, # 1–255: интенсивность движения
fps_id: int = 7, # fps финального видео
noise_aug_strength: float = 0.02
) -> bytes:
from PIL import Image
import io
init_image = Image.open(io.BytesIO(image)).convert("RGB")
init_image = init_image.resize((1024, 576)) # SVD-XT размер
frames = pipe(
init_image,
num_frames=num_frames,
decode_chunk_size=8,
motion_bucket_id=motion_bucket_id,
fps_id=fps_id,
noise_aug_strength=noise_aug_strength,
generator=torch.manual_seed(42)
).frames[0]
output_path = "/tmp/animated.mp4"
export_to_video(frames, output_path, fps=fps_id)
with open(output_path, "rb") as f:
return f.read()
Управление движением
MOTION_PRESETS = {
"subtle": 20, # лёгкое колыхание, минимальное движение
"natural": 80, # естественное движение сцены
"dynamic": 150, # заметное движение
"intense": 220, # сильное, экспрессивное движение
}
# API endpoint с выбором интенсивности
async def animate_product_photo(
product_image: bytes,
motion_preset: str = "subtle"
) -> bytes:
motion_id = MOTION_PRESETS.get(motion_preset, 80)
return animate_image_svd(product_image, motion_bucket_id=motion_id)
Сравнение i2v моделей
| Модель | Метод | Длина | Качество | Скорость (A100) |
|---|---|---|---|---|
| SVD-XT | Self-hosted | 3–4 сек | Хорошее | ~30 сек |
| Kling i2v | API | 5–10 сек | Отличное | 1–3 мин |
| Runway i2v | API | 10 сек | Отличное | 30–60 сек |
| Luma i2v | API | 5–9 сек | Высокое | 30–90 сек |
SVD актуален при необходимости self-hosted решения или высоких объёмах. Для разовых задач — Kling или Runway по соотношению цена/качество. Сроки интеграции SVD API — 1–2 дня, API-провайдера — 1 день.







