SoraFlow是一款2026年最新發(fā)布的國外開源AI視頻生成工具,基于擴散模型與Transformer架構,能夠從文本描述生成高質量動態(tài)視頻。本文深入剖析其核心代碼片段,包括文本編碼、視頻幀生成與時間一致性優(yōu)化,幫助開發(fā)者快速上手并理解其技術原理。無需高端硬件,即可在本地部署體驗AI視頻創(chuàng)作的魅力。
SoraFlow是2026年由國外知名AI研究團隊開源的一款視頻生成框架,它結合了擴散模型與時間注意力機制,支持從文本提示生成連貫、高分辨率的短視頻。與閉源方案不同,SoraFlow完全開源,允許開發(fā)者自由修改和部署。以下通過核心代碼片段解析其工作原理。
首先,文本編碼模塊負責將用戶輸入轉換為模型可理解的嵌入向量。下面是一段簡化后的文本編碼代碼:
import torch
from transformers import CLIPTextModel, CLIPTokenizer
tokenizer = CLIPTokenizer.frompretrained('openai/clip-vit-base-patch32')
textencoder = CLIPTextModel.frompretrained('openai/clip-vit-base-patch32')
def encodetext(prompt):
inputs = tokenizer(prompt, returntensors='pt', padding=True, truncation=True)
with torch.nograd():
embeddings = textencoder(inputs).lasthiddenstate
return embeddings
這段代碼利用預訓練的CLIP模型將文本“一只在草地上奔跑的貓”轉換為768維的嵌入向量,作為后續(xù)視頻生成的語義條件。
接下來是視頻幀生成的核心——擴散過程。SoraFlow使用一個U-Net架構的擴散模型,逐步從噪聲中恢復視頻幀。以下是一個簡化的幀生成循環(huán):
def generateframe(latent, textemb, t):
# t為當前時間步
noisepred = unet(latent, t, encoderhiddenstates=textemb)
latent = (latent - noisepred betat) / alphat.sqrt()
return latent
為了確保視頻的時間一致性,SoraFlow引入了時間注意力層。下面的代碼展示了如何計算相鄰幀之間的注意力權重:
def temporalattention(frames):
# frames形狀: [batch, numframes, channels, height, width]
batch, numframes, c, h, w = frames.shape
framesflat = frames.view(batch, numframes, -1) # 展平空間維度
attnweights = torch.matmul(framesflat, framesflat.transpose(-2, -1))
attnweights = torch.softmax(attnweights / (c h w) 0.5, dim=-1)
# 加權融合相鄰幀
fused = torch.matmul(attnweights, framesflat)
return fused.view(batch, numframes, c, h, w)
最后,通過迭代采樣生成16幀的短視頻。以下是一個完整的生成示例:
prompt = 'A cat running on green grass'
textemb = encodetext(prompt)
latents = torch.randn(1, 16, 4, 64, 64) # 初始噪聲
for t in reversed(range(1000)):
latents = generateframe(latents, textemb, t)
latents = temporalattention(latents)
video = vae.decode(latents) # 解碼為像素幀
SoraFlow的代碼結構清晰,模塊化程度高,適合二次開發(fā)。開發(fā)者可以根據(jù)需要調整幀數(shù)、分辨率或引入自定義數(shù)據(jù)集。該項目在GitHub上已獲得超過2萬星標,社區(qū)活躍,文檔詳盡。