0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

動画生成AI

Last updated at Posted at 2025-11-08
  1. 目的と全体像

目的: セリフ(テキスト)から8秒の動画を生成する手順を、数式・アルゴリズム・品質指標まで一気通貫で解説。
構成: Text→Phoneme→Mel→Waveform(TTS)→Lip/Blendshape(表情)→Video(拡散/レンダ)→Mux。

Text → G2P → Prosody(Duration,F0 prior)
→ Acoustic model (Mel)
→ Vocoder (Waveform)
→ Lip-sync / 3D Blendshape
→ Video generation / Rendering
→ A/V Sync & Export

  1. テキスト処理(G2Pと韻律)

入力文字列 s=(c₁,…,c_L) を音素列 p=(p₁,…,p_N) に写像。

p* = argmax_p P(p | s; θ_g2p)
L_g2p = − Σ_i log P(p_i = y_{p,i} | s)

持続時間予測(FastSpeech系のDuration Predictor):

d_i = f_dur(p_i, context; θ_d) # 秒
L_dur = (1/N) Σ_i (log d_i − log d_i*)^2

アクセント・休止の事前(任意):

break_j ~ Bernoulli(π_j), 句ポーズ τ_break = g(prosody)

  1. 音声合成(Acoustic→Vocoder)

2.1 メルスペクトログラム生成

音素埋め込み e_i を持続 d_i で時間展開しフレーム列 E を得る。

E = upsample({e_i}, {d_i})
ŷ_m = A(E; θ_a) ∈ ℝ^{F×T} # F:メル次元, T:フレーム
L_mel = ||ŷ_m − y_m||_1 + λ_w ||Δ_t ŷ_m − Δ_t y_m||_1

(Δ_t は時間一次差分で過度なフリッカを抑制)

2.2 ボコーダ(HiFi-GAN 例)

ŷ = G(ŷ_m) # 生成波形
L_adv = Σ_k [ E_y (D_k(y)−1)^2 + E_ŷ (D_k(ŷ))^2 ]
L_feat = Σ_k Σ_l || D_k^{(l)}(y) − D_k^{(l)}(ŷ) ||_1
L_stft = Σ_s || STFT_s(y) − STFT_s(ŷ) ||_1
L_vocoder = α L_adv + β L_feat + γ L_stft

  1. 音声→口形・表情(2D/3D)

3.1 音素→ビセム写像

強制アラインで音素時間区間 [τ_i^s, τ_i^e] を得る。窓特徴 a_t からビセム重み w_v(t) を推定。

w_v(t) = Softmax(W a_t + b) # v は口形カテゴリ

3.2 2Dリップ(Wav2Lip型)

ŷ_t = G_lip(x_t, a_t) # 口元合成
L_sync = 1 − cos( S_audio(a_t), S_video(ŷ_t) )
L_rec = ||ŷ_t − x_t^{gt}||_1
L_lip = L_sync + λ_rec L_rec

3.3 3Dブレンドシェイプ(ARKit 52ch)

b(t) ∈ ℝ^{52} # 各ブレンドシェイプ係数(0..1)
b(t) = W a_t + U prosody_t + c
b(t) = clip( b(t−1) + Δt·v(t), [0,1] )
v(t) = −∂E/∂b, E = κ1 ||∇_t b||^2 + κ2 hinge(b_occlusion)
θ_jaw(t) = k0 + k1·F0_norm(t) + k2·energy(t)

  1. 映像生成(拡散/レンダ)

4.1 拡散(動画条件付き)

前向き:

q(x_t | x_{t−1}) = 𝒩(√α_t x_{t−1}, (1−α_t)I)
x_t = √ā_t x_0 + √(1−ā_t) ε, ε~𝒩(0,I)

逆推定:

ε̂_θ = ε_θ(x_t, t, cond) # cond: text, a_t, b(t)
x_{t−1} = 1/√α_t [ x_t − (1−α_t)/√(1−ā_t) ε̂_θ ] + σ_t z
L_diff = E_{t,ε} || ε − ε̂_θ ||^2

時間一貫性:

F_{t→t+1} = optical_flow(ŷ_t, ŷ_{t+1})
L_flow = || warp(ŷ_t, F_{t→t+1}) − ŷ_{t+1} ||1
L_tv = Σ_t || ŷ
{t+1} − ŷ_t ||_1

4.2 PBR レンダ(3Dアバター時)

レンダ方程式:

L_o(p, ω_o) = ∫_Ω f_r(p, ω_i, ω_o) L_i(p, ω_i) (n·ω_i) dω_i

トーンマッピング(ACES 近似一例):

c_out = (c_in (a c_in + b)) / (c_in (a c_in + c) + d)

  1. 音声・映像同期と8秒設計

時間離散化:

fps = 24 → 総フレーム N = round(8 * fps) = 192
t_n = n / fps
k_audio = round( t_n * SR ) # SR=22050 など

字幕・口形キー:

n_i = ⌊ τ_i * fps ⌋

GOP と書き出し:

codec=H.264, CRF=18..22, GOP=48, pix_fmt=yuv420p

  1. 総合損失

L_total = λ1 L_g2p + λ2 L_dur + λ3 L_mel
+ λ4 L_vocoder + λ5 L_lip
+ λ6 L_diff + λ7 L_flow + λ8 L_tv

  1. 推奨パラメータ(8秒セリフ)
    • 音声: SR=22050 Hz, hop=256 → メルFPS≈86
    • 映像: 1920×1080, 24 fps, 8 s, GOP=48
    • F0 抽出: 40 ms 窓, 10 ms シフト(RAPT/CREPE)
    • ブレンドシェイプ平滑: 一次IIR

b_t = (1−α) b_{t−1} + α b_t*, α≈0.3

•	口形遅延補正: Δt ≈ 40–80 ms(視覚自然性向上)
  1. 品質評価
    • 音声: PESQ, STOI, LSD(Log Spectral Distance)
    • リップ: LSE-C / LSE-D(SyncNet)
    • 動画: FVD/KVD(分布距離), CLIP-S(一致度)
    • A/V 同期: |Δt| ≤ 80 ms を目標

  2. 失敗モードと対策
    • 子音破裂音が弱い → 子音区間の開口ゲイン補正 gain_c>1
    • フリッカ(口形ジッタ) → 時間TV正則化 + IIR 平滑
    • 同期ズレ → audio time-stretch ±1% または fps微調整
    • ノイズ混入 → 音声は事前ノイズ抑圧→TTS→最終EQ/LUFS正規化(-16 LUFS)

  3. 8秒セリフ設計テンプレ(技術語入り)

日本語:

「テキストヲ音素ニシテ、メルカラHiFi-GANデ声ヲ合成。Wav2Lipデ口形同期、AIガ動画ヲ生成スル。」

英語:

“Text to phonemes, Mel to voice with HiFi-GAN, lips synced by Wav2Lip, and the AI renders the video.”

  1. 実装スケルトン(疑似コード)

params

FPS=24; DURATION=8.0; N=int(FPS*DURATION); SR=22050

1) text -> phoneme -> duration

phonemes = g2p(text)
dur = duration_predictor(phonemes)

2) acoustic -> mel -> waveform

E = upsample(emb(phonemes), dur)
mel = acoustic_model(E)
wav = vocoder(mel)

3) alignment -> viseme/BS curves

align = force_align(wav, phonemes, SR)
viseme = phoneme2viseme(align)
b_t = audio2blendshape(wav, viseme)

4) video frames (diffusion or 3D render)

frames = video_generator(text_cond=text, audio_cond=wav, bs=b_t, fps=FPS)

5) mux & export

video = encode_h264(frames, fps=FPS, crf=20, gop=48)
out = mux_audio(video, wav, sr=SR)

  1. 次アクション
    • 要件を指定すれば、Colab向け最小実装(8秒固定、24 fps、TTS+Wav2Lip合成パイプ)を提示できる。
    • 3Dアバター駆動(ARKit 52ch)版、または拡散動画統合版も作成可能。どちらを優先するか指示を。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?