비디오 생성(Video Generation)

이미지(Image)는 2차원 텐서(Tensor)이고, 비디오(Video)는 3차원 텐서입니다. 이론은 같지만 계산량(Compute)은 10에서 100배 더 어렵습니다. OpenAI Sora(2024년 2월)는 그것이 가능함을 증명했습니다. 2026년에는 Veo 2, Kling 1.5, Runway Gen-3, Pika 2.0, WAN 2.2가 텍스트로부터 1080p 프로덕션 비디오를 1080p 해상도로 만들어내고 있으며, 오픈 웨이트(Open-weights) 진영의 스택(CogVideoX, HunyuanVideo, Mochi-1, WAN 2.2)은 약 12개월 정도 뒤를 따라가고 있습니다.

유형: Build 언어: Python 선수 지식: Phase 8 · 07 (잠재 확산(Latent Diffusion)), Phase 7 · 09 (비전 트랜스포머(ViT)), Phase 8 · 06 (확산 모델 DDPM) 예상 시간: 약 45분

문제

10초짜리 1080p 비디오를 24fps로 만들면 1920×1080×3 픽셀(Pixel)의 프레임(Frame)이 240장입니다. 원본 데이터(Raw data)만 클립(Clip)당 약 1.5GB에 달합니다. 픽셀 공간(Pixel-space)에서 직접 확산(Diffusion)을 돌리는 것은 현실적으로 불가능합니다. 필요한 것은 다음 네 가지입니다.

  1. 시공간 압축(Spatiotemporal compression). 프레임 하나가 아니라 비디오 전체를 시공간 패치(Spatial-temporal patch) 시퀀스(Sequence)로 인코딩(Encode)하는 VAE가 필요합니다.
  2. 시간적 일관성(Temporal coherence). 프레임들은 몇 초에 걸쳐 콘텐츠(Content), 조명(Lighting), 객체 정체성(Object identity)을 공유해야 합니다. 신경망(Network)이 모션(Motion)을 모델링(Model)할 수 있어야 합니다.
  3. 계산 예산(Compute budget). 같은 모델 크기(Model size)라도 비디오 학습은 이미지보다 10에서 100배 비쌉니다.
  4. 조건화(Conditioning). 텍스트(Text), 이미지(첫 프레임), 오디오(Audio), 또는 또 다른 비디오를 입력으로 받을 수 있어야 합니다. 대부분의 프로덕션(Production) 모델은 이 네 가지를 모두 지원합니다.

이 문제를 해결한 아키텍처(Architecture)는 시공간 패치에 적용된 확산 트랜스포머(Diffusion Transformer; DiT) 이며, (프롬프트, 캡션, 비디오) 형태의 거대한 데이터셋(Dataset)에서 학습됩니다. 손실 함수(Loss)는 Lesson 06과 동일한 확산 손실(Diffusion loss)입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.10초짜리 1080p 비디오를 24fps로 만들면 1920x1080x3 픽셀의 프레임 240장(원본 약 1.5GB)이 됩니다. 이미지 디퓨전(Diffusion) 모델을 각 프레임에 독립적으로 돌릴 수 없는 이유는 무엇인가요?

2.비디오 디퓨전 파이프라인에서 비디오 VAE(3D VAE)의 역할은 무엇인가요?

0/2 답변 완료

개념

video diffusion: patchify, DiT, decode raw video T × H × W × 3 (240 frames @ 1080p) 3-D VAE encoder spatiotemporal latent patchify t_p × h_p × w_p blocks spatiotemporal DiT factorized: spatial then temporal attn cross-attn to T5-XXL text same DDPM loss over spatiotemporal latents L = E || ε - ε_θ( z_t, t, text, first_frame_opt ) ||² flicker: independent per-frame sampling per-frame noise is independent => jagged motion coherent: joint sequence diffusion shared noise + temporal attention => smooth motion

패치화(Patchify)

비디오를 3D VAE로 인코딩하여 학습된 시공간 압축을 얻습니다. 잠재(Latent) 텐서의 형태는 [T_latent, H_latent, W_latent, C_latent]입니다. 이를 [t_p, h_p, w_p] 크기의 패치(Patch)로 나눕니다. Sora 계열 모델에서는 t_p = 1(프레임마다 패치) 또는 t_p = 2(두 프레임마다 패치)가 흔합니다. 10초짜리 1080p 비디오는 약 20,000에서 100,000개의 패치로 압축됩니다.

시공간 DiT(Spatiotemporal DiT)

트랜스포머(Transformer)가 평탄화된 패치 시퀀스를 처리합니다. 각 패치는 시간 + y + x를 담은 3차원 위치 임베딩(Positional embedding)을 갖습니다. 어텐션(Attention)은 보통 분해(Factorize)됩니다.

  • 공간 어텐션(Spatial attention). 각 프레임 내부의 패치들 사이에서 어텐션을 계산합니다.
  • 시간 어텐션(Temporal attention). 같은 공간 위치(Spatial location)에 있는 프레임들 사이에서 어텐션을 계산합니다.
  • 완전한 3D 어텐션(Full 3D attention). 16에서 100배 더 비싸므로, 낮은 해상도(Low resolution)나 연구 수준에서만 사용합니다.

텍스트 조건화(Text conditioning)

거대 텍스트 인코더(Text encoder)와 크로스 어텐션(Cross-attention)을 사용합니다. Sora와 CogVideoX-5B는 T5-XXL을 사용합니다. 긴 프롬프트(Prompt)가 중요합니다. Sora의 학습 데이터셋은 GPT가 생성한 조밀한 재캡션(Dense re-caption)을 사용했고, 클립당 평균 약 200개 토큰(Token) 길이였습니다.

학습(Training)

시공간 잠재 텐서 위에서 표준 확산 손실(ε 또는 v 예측)을 사용합니다. 데이터는 웹 비디오, 약 1억 개에 달하는 큐레이팅된 클립(Curated clip), 합성 텍스트 캡션(Synthetic text caption)으로 구성됩니다. 계산량은 작은 연구용 실행이라 해도 10,000 GPU 시간(GPU hour) 이상이며, Sora 규모는 100,000 이상입니다.

2026년 프로덕션 모델 지형(2026 production landscape)

모델출시일최대 길이최대 해상도오픈 웨이트?특징
Sora (OpenAI)2024-0260s1080pNo대규모에서 세계 시뮬레이터(World simulator) 성질을 처음으로 보여준 모델
Sora Turbo2024-1220s1080pNo5배 빠른 추론을 갖춘 프로덕션용 Sora
Veo 2 (Google)2024-128s4KNo2025년 기준 최고 품질과 물리(Physics) 표현
Veo 32025 Q315s4KNo네이티브 오디오와 강화된 카메라 컨트롤(Camera control)
Kling 1.5 / 2.1 (Kuaishou)2024-202510s1080pNo2025년 1분기 기준 최고의 인간 동작 표현
Runway Gen-3 Alpha2024-0610s768pNo위에 얹어진 전문가용 비디오 도구
Pika 2.02024-105s1080pNo가장 강한 캐릭터 일관성(Character consistency)
CogVideoX (THUDM)202410s720pYes (2B, 5B)최초의 5B 규모 오픈 비디오 모델
HunyuanVideo (Tencent)2024-125s720pYes (13B)2024년 말 기준 오픈 SOTA
Mochi-1 (Genmo)2024-105.4s480pYes (10B)가장 관대한 라이선스
WAN 2.2 (Alibaba)2025-075s720pYes2025년 중반 가장 강한 오픈 모델

오픈 웨이트는 이미지 영역보다 더 빠르게 격차를 좁히고 있습니다. 2026년 중반에는 HunyuanVideo와 WAN 2.2의 LoRA들이 이미 대부분의 오픈소스 워크플로(Workflow)를 주도하고 있습니다.

직접 만들기

code/main.py는 시공간 DiT의 핵심 아이디어를 시뮬레이션(Simulate)합니다. 작은 합성(Synthetic) 비디오를 패치화하고, 패치마다 위치 임베딩을 더한 뒤, 패치 전체 시퀀스에 대해 트랜스포머 계열 어텐션과 유사한 방식으로 작동하는 디노이저(Denoiser)로 잡음을 제거(Denoise)합니다. NumPy 없이 순수 파이썬(Pure Python)으로 작성되었습니다. 인접한 프레임의 패치들이 디노이저와 위치 임베딩을 공유하기만 해도 1차원에서조차 시간적 일관성이 자연스럽게 나타난다는 것을 보여줍니다.

Step 1: 합성 1차원 "비디오" 패치화

def make_video(T_frames=8, rng=None):
    # "비디오"는 부드러운 궤적(trajectory)을 따르는 1차원 값들의 시퀀스다
    base = rng.gauss(0, 1)
    return [base + 0.3 * t + rng.gauss(0, 0.1) for t in range(T_frames)]

Step 2: 프레임별 위치 임베딩

def pos_embed(t, dim):
    return sinusoidal(t, dim)

Step 3: 디노이저가 시퀀스 전체를 봄

각 프레임을 독립적으로 디노이즈하는 대신, 우리의 작은 신경망은 모든 프레임 값과 그 위치 임베딩을 이어 붙여(Concatenate) 모든 프레임의 잡음을 한꺼번에 예측합니다.

Step 4: 시간적 일관성 테스트

학습이 끝난 뒤 비디오를 샘플링하고 프레임 간 변화량(Frame-to-frame delta)을 측정합니다. 모델이 시간적 구조(Temporal structure)를 학습했다면, 각 프레임을 독립적으로 샘플링할 때보다 변화량이 작게 유지됩니다.

함정(Pitfalls)

  • 프레임별 독립 샘플링은 깜빡임(Flicker)을 만듭니다. 각 프레임에 이미지 확산을 따로 돌리면 프레임마다 잡음이 독립적이어서 출력이 깜빡입니다. 비디오 확산은 어텐션이나 공유 잡음(Shared noise)을 통해 프레임들을 결합(Coupling)하여 이 문제를 해결합니다.
  • 단순한 3D 어텐션은 메모리 부족(OOM)을 일으킵니다. 10초짜리 1080p 잠재 텐서에 완전한 3D 어텐션을 적용하면 수천억 회의 연산이 필요합니다. 공간 + 시간으로 분해해야 합니다.
  • 데이터 캡션이 데이터 크기 못지않게 중요합니다. Sora가 이전 연구 대비 가져온 주요 개선은 약 10배 더 상세한 캡션(GPT-4로 다시 라벨링된 클립)에서 학습한 점이었습니다. OpenAI 기술 보고서가 이를 명시하고 있습니다.
  • 첫 프레임 조건화(First-frame conditioning). 대부분의 프로덕션 모델은 이미지를 첫 프레임으로 받는 형태도 지원합니다. 이는 "이미지-투-비디오(Image-to-video)" 모드이며, 학습 시 이 변형도 포함됩니다.
  • 물리적 일관성의 표류(Physics drift). 10초가 넘는 긴 클립은 미묘한 불일치가 누적됩니다. 슬라이딩 윈도우(Sliding-window) 생성과 키프레임 앵커링(Keyframe anchoring)이 도움이 됩니다.

사용해보기

사용 사례2026년 선택지
최고 품질의 호스팅형 텍스트-투-비디오(Text-to-video)Veo 3 또는 Sora
카메라 제어가 가능한 시네마틱 영상Runway Gen-3 + 모션 브러시(Motion brush)
클립 간 캐릭터 일관성Pika 2.0 또는 Kling 2.1
오픈 웨이트, 빠른 파인튜닝(Fine-tune)WAN 2.2 + LoRA
이미지-투-비디오WAN 2.2-I2V, Kling 2.1 I2V, 또는 Runway
오디오-투-비디오 립싱크(Lip sync)Veo 3(네이티브 오디오) 또는 전용 립싱크 모델
비디오 편집Runway Act-Two, Kling Motion Brush, Flux-Kontext(정지 프레임)

품질 동등성 기준으로 비디오 1초당 비용은 2024년과 2026년 사이에 약 20배 낮아졌습니다.

산출물 만들기

outputs/skill-video-brief.md로 저장하세요. 이 스킬(Skill)은 비디오 브리프(길이, 화면비, 스타일, 카메라 계획, 피사체 일관성, 오디오)를 받아 다음을 출력합니다: 모델 + 호스팅, 프롬프트 스캐폴딩(카메라 언어, 피사체 묘사, 모션 묘사), 시드(Seed) + 재현성 프로토콜, 그리고 프레임 단위 QA 체크리스트.

연습문제

  1. 쉬움. code/main.py에서 (a) 프레임별 독립 샘플링과 (b) 결합된(Joint) 시퀀스 샘플링에 대한 프레임 간 변화량을 비교합니다. 변화량의 평균과 분산을 보고합니다.
  2. 중간. 첫 프레임 조건을 추가합니다. 프레임 0을 주어진 값으로 고정(Pin)하고 나머지를 샘플링한 뒤, 고정된 값이 어떻게 전파되는지 측정합니다.
  3. 어려움. HuggingFace diffusers로 CogVideoX-2B를 로컬 GPU에서 실행합니다. 6초 클립을 720p로 20회 추론 단계 동안 실행하는 시간을 측정하고, 시공간 어텐션의 병목 구간을 프로파일링합니다.

핵심 용어

용어흔한 설명실제 의미
비디오 VAE(Video VAE)"3차원 VAE"(T, H, W, C)를 시공간 잠재로 압축하는 인코더.
패치(Patches)"토큰들"잠재 텐서의 고정 크기 3차원 블록이며 DiT의 입력이 됨.
분해 어텐션(Factorized attention)"공간 + 시간"공간에 대해 어텐션을 수행한 뒤 시간에 대해 수행하며, 완전한 3D 어텐션은 건너뜀.
이미지-투-비디오(I2V)"이 사진을 움직이게 하라"이미지 + 텍스트를 받아 그 이미지에서 시작하는 비디오를 출력함.
키프레임 조건화(Keyframe conditioning)"앵커 프레임"특정 프레임을 고정해 비디오 흐름을 제어함.
모션 브러시(Motion brush)"방향 힌트"사용자가 이미지 위에 모션 벡터를 칠하는 UI 입력.
재캡셔닝(Re-captioning)"조밀한 캡션"LLM을 사용해 학습 클립을 상세한 프롬프트로 다시 라벨링하는 작업.
깜빡임(Flicker)"시간적 아티팩트"프레임 간 불일치이며, 결합된 디노이징(Coupled denoising)으로 해결함.

프로덕션 노트: 비디오 잠재는 메모리 대역폭 문제다

10초짜리 1080p 클립을 24fps로 두면 240프레임 × 1920 × 1080 × 3 ≈ 약 1.5GB의 원본 픽셀입니다. 4배 비디오 VAE 압축(공간 2배 × 시간 2배) 이후에도 잠재 텐서는 요청당 약 100MB입니다. 이를 시공간 DiT로 30단계, 배치(Batch) 1에서 돌리면 단계당 약 3GB가 HBM(고대역폭 메모리)을 오갑니다. 병목(Bottleneck)은 부동소수점 연산(FLOPs)이 아니라 메모리 대역폭(Memory bandwidth)입니다.

세 가지 프로덕션 노브(production knobs)는 모두 프로덕션 추론(production inference) 문헌의 추론 챕터에서 그대로 가져온 것들입니다.

  • DiT에 텐서 병렬화(Tensor Parallelism; TP)를 적용합니다. 텍스트-투-비디오 모델은 100억 파라미터(Parameter) 이상이 일반적입니다. H100 4장에 TP=4는 표준이며, 405B 규모의 모델에는 PP=2 × TP=2가 사용됩니다. 단계당 지연 시간(Latency)은 올-리듀스(All-reduce)의 한계에 부딪히기 전까지는 TP에 따라 거의 선형적으로 감소합니다.
  • 프레임 배칭은 연속 배칭(Continuous batching)과 같습니다. 생성 시점에서 비디오는 개념적으로 어텐션으로 연결된 프레임 배치로 볼 수 있습니다. 연속 배칭(인플라이트 스케줄링)이 적용됩니다. 모델 아키텍처가 슬라이딩 윈도우 생성을 허용한다면 프레임 t-1을 반환하는 동안 프레임 t+1을 렌더링할 수 있습니다.
  • 클립 단위 프리필 캐시(Clip-level prefill cache). 이미지-투-비디오에서 첫 프레임 조건화는 LLM 프롬프트의 프리필(Prefill)과 비슷합니다. 한 번 계산해 시간적 디코더(Temporal decoder) 통과 시 재사용합니다. 사실상 비디오용 KV 캐시(KV-cache)입니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

video-brief

Translate a video brief into a model + prompt + shot plan for a 2026 video generator.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.대부분의 프로덕션 비디오 디퓨전 모델은 완전한 3D 어텐션(full 3D attention) 대신 공간 어텐션과 시간 어텐션으로 분해(factorize)합니다. 주된 이유는 무엇인가요?

2.Sora의 학습에는 GPT가 생성한 조밀한 재캡션(dense re-caption)이 사용되었으며 클립당 평균 약 200 토큰이었습니다. 이것이 원래의 짧은 캡션으로 학습하는 것보다 비디오 품질을 개선한 이유는 무엇인가요?

3.10초를 넘는 긴 클립을 생성할 때 미묘한 물리적 불일치가 시간이 지나며 누적됩니다. 긴 비디오에서 일관성을 유지하는 데 도움이 되는 기법은 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다