1. 背景:从“一张图”到“一段视频”的AIGC写真新玩法
最近在折腾AIGC方向的项目时,发现很多做虚拟角色、二次元风格、数字人内容的朋友,都不再满足于“生成一张静态图”,而是希望把一张精美的角色立绘做成“会动”的动态写真:人物轻轻眨眼、头发随风飘动、身体有微小的姿态变化,甚至开口说话。
这种需求在短视频平台、个人品牌形象塑造、虚拟主播、游戏同人创作里都很常见。过去要实现这种效果,要么靠专业的动捕设备和三维建模,成本高、门槛也高;要么靠视频剪辑软件人工做关键帧动画,费时费力。而在AIGC技术快速迭代的今天,主流的做法已经变成了“AI绘画生成高质量静态图 + AI动态化工具生成视频”,十几分钟就能产出一条效果不错的动态写真。
这篇文章就以一个虚构角色“慕沛灵”为例(仅作技术演示用途,不涉及任何真实人物或商业版权内容),完整拆解从AI绘画生成角色立绘,到动态化处理输出视频的全流程。内容覆盖环境准备、核心原理、提示词编写、参数调优、动态生成、成本控制与常见问题排查,适合对Stable Diffusion、LoRA、ControlNet以及视频生成工具感兴趣的新手和进阶开发者。
读完这篇文章,你会掌握:
- 如何搭建一套本地可运行的AI绘画与动态写真制作环境。
- 如何用Stable Diffusion WebUI生成一张高质量的角色立绘。
- 如何用LoRA和ControlNet控制角色风格的统一与姿态。
- 如何用SadTalker、Live Portrait等工具把静态图变成动态视频。
- 如何把整体制作成本控制在50元左右,并知道钱花在哪里最值。
注意,本文涉及的所有生成内容都应当遵守平台规则与法律法规,只做技术学习与合法创作,不生成任何违规、擦边或侵权内容。
2. 环境准备与工具选型
2.1 硬件与软件环境
动态写真制作分为两大阶段:第一阶段是AI绘画生成静态图,第二阶段是图片动态化。第一阶段对显卡的要求相对较高,第二阶段根据工具不同,对显存的要求也有差异。
以一个常见的本地部署方案为例,推荐配置如下:
| 项目 | 最低要求 | 推荐配置 | 说明 |
|---|---|---|---|
| 操作系统 | Windows 10/11 或 Ubuntu 20.04+ | Windows 11 / Ubuntu 22.04 | 注意路径不要包含中文 |
| 显卡 | NVIDIA GTX 1060 6G | NVIDIA RTX 3060 12G 或更高 | 建议选择NVIDIA卡,CUDA生态更成熟 |
| 显存 | 6GB | 12GB以上 | 直接决定出图分辨率和动态生成稳定性 |
| 内存 | 16GB | 32GB | 多任务处理时更从容 |
| Python | 3.10.6 | 3.10.6 | 不要用3.11以上,部分依赖兼容性差 |
| 硬盘 | 20GB可用空间 | 50GB以上 | 模型文件占用很大,建议SSD |
如果你的本机没有满足要求的显卡,也可以使用云GPU服务,比如AutoDL、恒源云等平台,按小时租用RTX 3090或4090。关于成本控制,我在第6节会专门算一笔账,用来对标“这次花50块”这个预算。
版本方面需要重点提醒:Stable Diffusion WebUI、各类插件和模型更新非常频繁,本文不会写死某个具体版本号,而是以常见稳定分支为例。你的实际版本如果和社区最新版有差异,配置方式可能略有不同,建议以官方README为准。
2.2 核心工具清单
做完整的动态写真流程,需要用到下面这些工具:
Stable Diffusion WebUI
这是目前最主流的Stable Diffusion图形化操作界面,由AUTOMATIC1111维护,集成了模型加载、提示词输入、参数调节、ControlNet插件管理等功能,非常适合新手快速上手。
LoRA模型
LoRA(Low-Rank Adaptation)是一种轻量化的模型微调技术。通过加载某个角色的LoRA模型,可以在不重训底模的前提下,让生成结果在短时间内稳定输出同一角色的脸部特征、服装风格和气质。
ControlNet插件
ControlNet可以精确控制生成图像的姿态、构图和细节,比如使用OpenPose控制人物动作、使用Canny控制线稿边缘。这对复现统一角色非常重要。
动态化工具
图片动态化的方案比较多,主流开源方案包括SadTalker、Live Portrait、Ebsynth Utility,以及Wav2Lip(偏口型驱动)。其中SadTalker和Live Portrait都可以根据一张静态人像图生成一段带面部表情和头部动作的视频,是最适合动态写真入门的两款工具。
基础依赖包
无论使用WebUI还是动态化工具,都需要依赖PyTorch、CUDA、FFmpeg等基础组件。FFmpeg负责视频编码,必须提前安装并配置到系统环境变量中。
2.3 项目目录结构
建议在工作目录下建立清晰的文件夹,方便后续管理模型和输出文件。目录结构如下:
aigc-dynamic-photo/ ├── models/ │ ├── stable-diffusion/ │ ├── lora/ │ └── controlnet/ ├── outputs/ │ ├── images/ │ └── videos/ ├── scripts/ │ ├── prompt.py │ └── post_process.py ├── stable-diffusion-webui/ └── README.md其中stable-diffusion-webui目录是WebUI的安装位置,models目录用于存放底模、LoRA和ControlNet模型文件,outputs目录存放生成结果,scripts目录可以放一些自己写的Python辅助脚本。
3. 核心技术与原理解析
3.1 Stable Diffusion与LoRA的关系
Stable Diffusion是一个基于扩散模型的AI图像生成模型。它的基本原理可以通俗理解为:先让模型学习大量图片,把真实图片逐步“加噪”变成纯噪声,再学习如何从纯噪声反向“去噪”恢复出图片。生成图片时,模型根据你输入的文本提示词,从随机噪声中一步步还原出符合描述的图像。
底模决定了图像的基础画风。比如二次元风格可以选择Anything V5、Counterfeit等,写实风格可以选择ChilloutMix、MajicMix等。但底模只能决定大体风格,无法稳定还原一个具体角色的相貌。这时候就需要LoRA来帮忙。
LoRA模型是一种“小型的、可插拔”的风格容器。它训练的是很小的权重矩阵,加载后相当于在底模上叠加一层角色特征。这种方式的好处是不同角色的LoRA可以自由切换,不需要重新训练整个大模型。
在实际操作中,需要注意底模和LoRA的匹配问题。某些LoRA是基于特定底模训练的,混用不同底模可能导致脸部崩坏或风格偏移。因此制作动态写真前,最好固定使用同一个底模和同一个角色LoRA,这样出图效果最稳定。
3.2 ControlNet与姿态控制
ControlNet是解决“角色动作不可控”问题的关键插件。它可以在生成图片时额外参考一张条件图,比如人物骨架图、线稿、深度图等,从而约束生成结果中的姿势和构图。
常用模式包括:
- OpenPose:提取参考图的骨骼关键点,控制人物动作。适合想让角色摆出指定姿势的场景。
- Canny:提取参考图边缘信息,控制构图和轮廓。
- Depth:提取深度信息,控制前后景关系。
- Lineart:提取线稿,适合二次元风格。
在动态写真流程中,OpenPose 是最常用的功能。比如你可能希望角色在画面中微微侧身、双手自然垂落,这些都可以通过一张姿态参考图来锁定。
使用方式也很简单:上传一张参考图到ControlNet面板,开启对应预处理器,模型选择openpose,强度一般设为0.6到0.9。如果设置太高,生成结果会完全复制参考姿态,导致动作僵硬;设置太低,又可能无法保留姿态意图,需要多次测试。
3.3 静态图到动态视频的技术路线
把静态图变成动态视频,目前主流的技术路线有三类:
第一类:人体/头部运动驱动
代表工具是SadTalker和Live Portrait。它们通过语音或默认运动参数来驱动图片中的人物面部和头部,生成一段会说话的或轻微运动的视频。SadTalker更偏卡通风格和口型驱动,Live Portrait在表情自然度和稳定性上更好。
第二类:关键点形变驱动
代表工具是Ebsynth Utility。它需要一张输入图和一帧目标姿态图,通过关键点匹配和形变算法,把输入图的内容迁移到目标姿态上。优点是动作幅度大,缺点是需要额外准备目标姿态,操作门槛稍高。
第三类:潜在空间插值
代表方法是使用Stable Diffusion的img2img特性,配合ControlNet在不同姿态图之间插值生成中间帧序列,再用FFmpeg合成视频。优点是自由度最高,缺点是渲染时间较长,容易产生闪烁。
对于初学者,我最推荐先从SadTalker和Live Portrait入手,因为这两款工具都有WebUI插件版本,几乎不需要写代码。
4. 静态角色图生成实战
4.1 模型准备与放置位置
在生成“慕沛灵”的角色立绘之前,需要先把底模、LoRA、ControlNet模型放到WebUI的模型目录中。
在stable-diffusion-webui/models/Stable-diffusion目录下放入底模文件:
stable-diffusion-webui/models/Stable-diffusion/anything-v5.safetensors在stable-diffusion-webui/models/Lora目录下放入角色LoRA文件:
stable-diffusion-webui/models/Lora/mupeiling_v1.safetensors在extensions/sd-webui-controlnet/models目录下放入ControlNet模型文件,例如:
extensions/sd-webui-controlnet/models/control_v11p_sd15_openpose.pth放置完成后,在WebUI界面右上角点击刷新按钮,即可在下拉框中看到对应的模型。
需要注意的是,这里文件命名中的mupeiling_v1.safetensors是虚构的角色LoRA名称示例,实际使用时,你应该使用自己训练或合法授权的LoRA模型。如果你没有现成LoRA,也可以先使用普通底模生成,只是角色一致性会弱一些。
4.2 提示词编写
提示词是决定生成效果的核心环节。一个完整的提示词通常包含画质标签、角色描述、服装、动作、背景、光影等元素。
以“月下犹怜”这个氛围感较强的主题为例,正面提示词可以这样写:
masterpiece, best quality, extremely detailed, 1girl, solo, mupeiling, moonlight, night sky, ancient chinese style, white hanfu, flowing sleeves, long black hair, gentle smile, looking at viewer, soft light, cinematic lighting, depth of field, elegant, ethereal, full body, standing, holding a folding fan关键词含义拆解:
masterpiece, best quality, extremely detailed:画质增强词,放在最前面。1girl, solo:确定主体数量和类型。mupeiling:角色名,如果LoRA模型训练中使用了触发词,这里必须写上,否则LoRA效果不会被激活。moonlight, night sky:背景和光线氛围。ancient chinese style, white hanfu, flowing sleeves:服装风格。long black hair, gentle smile:外貌特征。full body, standing:构图方式。holding a folding fan:道具与动作。
负面提示词用来排除不想要的内容:
bad anatomy, bad hands, missing fingers, extra digit, mutated hands, poorly drawn face, extra limbs, lowres, error, blurry, jpeg artifacts, watermark, text, logo, signature, monochrome, oversaturated这里重点解释一下bad hands和missing fingers:这是Stable Diffusion生成人物时最常见的瑕疵点。因为手部结构复杂,模型很容易画错,所以负面提示词中写上这些词,可以在一定程度上规避手部崩坏。
4.3 参数设置与生成
在WebUI的txt2img页面中完成参数配置:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| 采样器 | DPM++ 2M Karras | 兼顾速度与画质 |
| 迭代步数 | 25-30 | 太高意义不大,太低细节不足 |
| CFG Scale | 6-7 | 控制提示词服从度 |
| 宽高 | 512x768 | 竖构图更适合角色立绘 |
| 种子 | 随机或固定 | 固定种子可以复现 |
| 高分辨率修复倍数 | 2倍 | 提升最终出图分辨率 |
| LoRA权重 | 0.7-0.9 | 过高容易过拟合 |
| ControlNet模型 | openpose | 如果不需要特定姿态可以不开 |
设置好之后点击Generate按钮。单张图在RTX 3060上大约需要5到10秒。如果开启高分辨率修复,时间会增加一倍左右。
生成后建议多跑几张,挑出脸部、手部、构图都满意的一张。如果角色特征不够明显,可以适当提高LoRA权重;如果角色过于“呆板”,可以降低LoRA权重并增加一些表情描述词。
5. 动态写真制作实战
5.1 方案一:使用SadTalker生成动态效果
SadTalker可以通过静态人像图生成带说话或眨眼动作的视频,非常适合做“角色突然动起来”的短视频效果。
在Stable Diffusion WebUI中安装SadTalker插件后,切换到SadTalker标签页,配置如下:
- 输入图像:选择上一步生成的“慕沛灵”立绘图。
- 预训练模型:选择SadTalker对应的模型文件。
- 是否生成语音:可选。如果需要角色说话,可以放入一段音频;如果只做轻微动作,可以选择静音模式。
- 分辨率:选择256或512,取决于显存。
- 帧率:建议16到25fps。
点击Generate后,插件会自动处理。在Windows本地环境,建议先安装FFmpeg并配置环境变量,否则视频合成阶段会报错。
# 检查FFmpeg是否安装成功 ffmpeg -version如果提示command not found,需要先下载FFmpeg并解压,然后把bin目录添加到系统PATH中。
SadTalker的优点是简单易用,缺点是生成视频的分辨率不高,且动作幅度有限,容易出现面部轻微变形。如果对画质要求较高,建议生成后再用超分工具处理。
5.2 方案二:使用Live Portrait追求更自然的表情
Live Portrait是另一个开源动态人像项目,相比SadTalker,它在表情自然度和稳定性上表现更好,还能支持更细腻的眨眼、头部转动等动作。
Live Portrait的用法分两种:
第一种是在WebUI插件中使用,操作方式与SadTalker类似。
第二种是使用官方Python代码的方式。官方仓库的推理脚本核心代码如下:
# 文件路径:scripts/live_portrait_demo.py import torch from src.configs.inference_args import InferenceConfig from src.pipelines.live_portrait_pipeline import LivePortraitPipeline def main(): cfg = InferenceConfig() pipeline = LivePortraitPipeline(cfg) # 输入图像和驱动视频 source_image = "outputs/images/mupeiling_static.png" driving_video = "outputs/videos/driving.mp4" # 推理生成动态视频 pipeline.run(source_image, driving_video, "outputs/videos/live_portrait_out.mp4") print("动态视频生成完成") if __name__ == "__main__": main()运行前需要先安装项目依赖:
cd LivePortrait conda create -n liveportrait python=3.10 conda activate liveportrait pip install -r requirements.txt然后执行脚本:
python scripts/live_portrait_demo.py5.3 视频合成与导出
动态化工具输出的一般是无声视频。如果你需要在短视频平台发布,通常还要加上背景音乐或环境音效。这一步可以用FFmpeg完成。
把无声视频和音频文件合并:
ffmpeg -i outputs/videos/live_portrait_out.mp4 -i bgm.mp3 \ -c:v libx264 -c:a aac -shortest outputs/videos/final_cut.mp4如果需要调整裁剪比例,可以加上-vf参数:
ffmpeg -i outputs/videos/live_portrait_out.mp4 \ -vf "crop=1080:1920:0:0" -c:v libx264 final_story.mp4如果发现动态视频有闪烁或帧不连续,可以使用FFmpeg做时间轴平滑处理,或导出后放入剪映等工具做二次调色和补帧。在实际项目中,我推荐最终剪辑统一放在视频编辑软件里完成,效率更高。
6. 50元成本控制方案
6.1 成本构成分析
标题里提到的“这次花50块”,在AIGC制作场景中是一个非常真实的预算。我们把这50元拆开来看。
如果你的电脑没有独立显卡,使用云GPU平台是主流选择。以常见的云GPU平台为例:
| 项目 | 消耗量 | 参考费用 | 说明 |
|---|---|---|---|
| 云GPU租用 | 约3小时 | 30-40元 | 用于模型下载、出图、动态生成 |
| LoRA模型获取 | 0元 | 0元 | 使用免费模型或自己训练 |
| 存储空间 | 10GB | 免费 | 临时存储基本免费 |
| FFmpeg等软件 | 0元 | 0元 | 开源免费工具 |
| 软件订阅 | 0元 | 0元 | 全程使用开源工具 |
所以,在顺利的情况下,50元是足够完成一次动态写真制作的。如果生成过程中反复试错导致GPU时长增加,成本会相应上涨。因此想控制预算,核心思路是“本地准备充分,云端高效执行”。
6.2 省钱实操技巧
提前下载模型
在租用云GPU之前,先在本地用网盘或镜像站把底模、LoRA、ControlNet模型下载好,然后直接上传到云平台,避免在云端使用流量下载大文件。云平台内网下载虽然快,但模型来源不稳定时容易浪费时间。
先小图调试,再大图出片
在参数调整阶段,先生成512×768的小图,快速筛选构图和风格,等确认效果后再开高分辨率修复。这样可以大幅缩短每次生成的时间,减少GPU小时数消耗。
固定随机种子
找到一个满意的种子后,固定下来。后续修改提示词或参数时,以这个种子为基础做小范围调整,避免每次生成都变成“开盲盒”。
关闭后台无用进程
云服务器上只保留推理需要的进程,浏览器标签页尽量不要开太多。显存和内存都被其他程序占用时,生成速度会明显下降,等于变相烧钱。
合理选择动态化参数
SadTalker生成512分辨率视频比256分辨率慢得多。如果不是商用场景,先用256分辨率验证动作效果,等确认后再生成高清版本。
7. 常见问题与排查思路
在我的实际使用过程中,踩过不少坑。下面把最高频的几类问题整理成表格,方便大家对照排查。
| 问题现象 | 常见原因 | 解决思路 |
|---|---|---|
WebUI启动报错Torch not compiled with CUDA enabled | PyTorch安装成了CPU版本 | 重装CUDA版PyTorch,参考官方命令 |
| 生成图片时出现大面积黑图 | 显存不足或模型加载失败 | 降低分辨率、关闭ControlNet、减少LoRA数量 |
| 角色脸部不一致 | LoRA权重太低或底模不匹配 | 提高LoRA权重,换回LoRA训练时的底模 |
| 手部严重崩坏 | 负面提示词缺失或模型本身弱点 | 在负面提示词中加入bad hands, bad anatomy |
| SadTalker生成视频打不开 | 缺少FFmpeg或编码器配置错误 | 安装FFmpeg并加入PATH,重新执行 |
Live Portrait运行时报错CUDA out of memory | 显存不足 | 降低推理分辨率,或切换更小模型 |
| 动态视频面部闪烁 | 关键帧不稳定 | 降低动态强度,或使用超分工具做后处理 |
| ControlNet未生效 | 没有开启Enable按钮或模型文件路径错误 | 确认插件安装位置和Enable选项状态 |
7.1 关于显存不足的详细排查
显存不足是最常见的启动级问题。当你看到类似下面的报错时:
RuntimeError: CUDA out of memory. Tried to allocate 512 MiB说明当前场景已超过显存上限。解决方案按优先级排列:
- 在WebUI启动参数中加入
--medvram或--lowvram模式,这会降低显存占用,但会稍微增加推理时间。 - 把图像分辨率从512×768降到384×576。
- 关闭ControlNet,或者把ControlNet的
Control Weight调低。 - 检查后台是否存在多个占用显存的Python进程。
7.2 关于“角色不像”的排查
如果生成的“慕沛灵”和预期形象差异较大,按照下面顺序排查:
- 确认LoRA是否被正确加载。在WebUI右侧的LoRA下拉框中选中它,并且提示词里包含触发词。
- 确认LoRA权重是否合适。权重过高会过拟合,出现明显画风改变;权重过低则特征不明显。
- 确认是否使用了错误的底模。不同底模对同一LoRA的兼容性不同,尽量使用LoRA训练时的底模。
- 确认ControlNet是否干扰了面部。OpenPose模式只约束姿态,但深度图模式可能会影响五官结构。
8. 内容合规与版权建议
动态写真属于AIGC创作领域,在使用相关技术和工具时,必须遵守平台规则与法律法规。这里重点提醒几个容易被忽视的问题。
第一,关于角色形象的版权。如果你使用某款游戏、动漫中的角色名和形象进行生成,请注意这属于原创版权内容。个人学习、技术分享通常问题不大,但如果用于商业变现,需要获得版权方的授权。本文中的“慕沛灵”为虚构演示角色,不映射任何真实人物或版权角色。
第二,关于AI生成内容的标识。目前很多平台要求对AI生成的内容进行标识。在发布动态写真视频时,建议在视频画面中标注“AI生成”,既是对观众的尊重,也是规范要求。
第三,不要生成违法违规内容。动态写真技术可以用于虚拟主播、内容创作、数字人等领域,但如果被用来生成违法违规内容,会有严重的法律风险。技术本身没有对错,但使用场景必须守住底线。
第四,关于模型来源。请通过官方渠道或可信社区下载底模和LoRA模型,不要使用来路不明的模型文件。开源模型虽然免费,但也要遵守各自的开源协议。
9. 总结与下一步学习方向
通过这篇教程,我们把“AI动态写真”从零到一完整跑通了一遍。重点包括:理解了Stable Diffusion、LoRA、ControlNet的基本原理;搭建了动态写真制作环境;完成了从静态角色立绘到动态视频的实战流程;掌握了50元预算下的成本控制技巧;也整理了最常见的问题排查思路。
这个方向想继续深入,可以考虑以下几个方向:
- 学习训练自己的LoRA模型。如果你有固定的虚拟角色IP,自己训练LoRA才能实现真正可控的角色一致性。
- 研究视频生成模型。当前业界出现了更多直接文本/图像生成视频的开源模型,例如动态视频生成领域的新方案越来越多,值得持续关注。
- 学习后期合成。动态写真最终要进入内容平台,掌握调色、补帧、字幕、音效合成等后期能力,能让作品质量更上一层楼。
- 关注数字人技术。把动态写真与语音合成结合,可以做出会说话的虚拟形象,应用场景更广。
最后给一个实用建议:刚开始尝试时不要让“一次成功”成为目标,先跑通流程,再逐步优化。把每一步的输入、参数、结果记录下来,形成自己的参数调优笔记,这样在后续迭代中会越来越顺利。
如果这篇文章对你有帮助,可以收藏备用,也欢迎在评论区分享你的制作经验和踩坑经历。