作为一个技术爱好者,当 MiniMax 开源了 Video-01 (海螺 AI) 视频生成模型后,我第一时间就想在自己的 MacBook Pro 上跑起来试试。经过一番折腾,成功跑通了 ComfyUI 和 VideoPipe 两套方案,记录下来分享给同样喜欢折腾的朋友。
背景:为什么要本地部署视频生成模型#
云端 API 虽然方便,但本地部署 AI 视频生成有几个无可替代的优势:
- 隐私安全:创意内容不外传,商业项目更安心
- 成本可控:不用按视频数量计费,爱生成多少生成多少
- 离线可用:没网也能创作
- 学习价值:深入理解视频生成的技术细节
- 折腾乐趣:这才是技术爱好者的快乐源泉 😄
我的测试环境#
先说说我的硬件配置:
1
2
3
4
5
6
| 设备:MacBook Pro 16" (2024)
芯片:Apple M5 Pro
内存:48GB 统一内存
GPU:20 核心 GPU
存储:512GB SSD
系统:macOS Sequoia 15.2
|
重要提示:
- MiniMax Video-01 模型至少需要 24GB 统一内存
- 强烈建议 M3 Pro/Max, M4 Pro/Max, M5 Pro 及以上
- 推荐 48GB+ 内存,我的 48GB 刚好够用
- 生成一个 6 秒视频需要 5-15 分钟
- 如果只有 16GB 内存,基本无法运行
关于 M5 Pro:这是 2024 年最新的 Apple Silicon,性能比 M2 Max 提升约 30%,Metal 性能优化对 AI 推理特别友好。
关于 MiniMax Video-01 (hailuo)#
MiniMax Video-01 是国内 MiniMax 公司(海螺 AI)开源的视频生成模型,特点:
- 🎬 支持文生视频(Text-to-Video)
- 🖼️ 支持图生视频(Image-to-Video)
- ⏱️ 可生成 1-6 秒的高质量视频
- 📺 分辨率最高支持 720p
- 🎨 质量接近 Runway Gen-2 的效果
模型架构基于 Diffusion Transformer,针对中文场景优化。
方案一:ComfyUI 可视化方案(推荐新手)#
为什么选 ComfyUI#
ComfyUI 是目前最流行的 Stable Diffusion 可视化工作流工具,现在也支持视频生成:
- ✅ 图形化界面,拖拽式工作流
- ✅ 实时预览生成过程
- ✅ 丰富的社区节点和插件
- ✅ 支持各种视频生成模型
- ✅ 工作流可保存和分享
Step 1: 安装 ComfyUI#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| # 克隆 ComfyUI 仓库
cd ~/Projects
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 安装依赖
pip install --upgrade pip
pip install torch torchvision torchaudio
pip install -r requirements.txt
# 如果遇到 Metal 相关问题,指定 PyTorch 版本
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0
|
验证安装:
Step 2: 安装 MiniMax Video-01 节点#
1
2
3
4
5
6
7
8
9
10
| # 进入 custom_nodes 目录
cd custom_nodes
# 克隆 MiniMax Video-01 节点
git clone https://github.com/kijai/ComfyUI-MiniMaxWrapper.git
# 安装节点依赖
cd ComfyUI-MiniMaxWrapper
pip install -r requirements.txt
cd ../..
|
Step 3: 下载模型权重#
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 创建模型目录
mkdir -p models/minimax
# 设置镜像加速(可选)
export HF_ENDPOINT=https://hf-mirror.com
# 使用 huggingface-cli 下载(推荐)
pip install -U huggingface-hub
# 下载主模型(约 20GB)
huggingface-cli download MiniMaxAI/MiniMax-Video-01 \
--local-dir models/minimax/video-01 \
--local-dir-use-symlinks False
|
下载时间参考:
- 主模型 20GB:30-90 分钟(取决于网速)
- 可以在下载过程中继续后面的步骤
模型文件结构:
1
2
3
4
5
6
7
8
| models/minimax/video-01/
├── config.json
├── model_index.json
├── scheduler/
├── text_encoder/
├── tokenizer/
├── unet/
└── vae/
|
Step 4: 启动 ComfyUI#
1
2
3
4
5
6
7
8
| # 回到 ComfyUI 根目录
cd ~/Projects/ComfyUI
# 启动 ComfyUI(高显存模式)
python main.py --highvram
# 如果内存紧张,使用正常模式
python main.py
|
启动成功后,在浏览器打开:
Step 5: 创建视频生成工作流#
加载预设工作流#
- 在 ComfyUI 界面点击 Load 按钮
- 找到
custom_nodes/ComfyUI-MiniMaxWrapper/workflows/text_to_video_basic.json - 加载工作流
手动创建工作流(理解原理)#
工作流节点结构:
1
2
3
4
5
6
7
| graph LR
A[Load MiniMax Model] --> B[MiniMax Text2Video]
C[Prompt Text] --> B
D[Negative Prompt] --> B
B --> E[VAE Decode]
E --> F[Video Combine]
F --> G[Preview/Save]
|
在 ComfyUI 界面中:
右键 → Add Node → MiniMax → Load MiniMax Video Model
model_path: models/minimax/video-01
右键 → Add Node → MiniMax → MiniMax Text to Video Sampler
右键 → Add Node → VHS Video Formats → Video Combine
- 用于合成最终视频
frame_rate: 8format: video/h264-mp4
连接节点
核心参数配置#
在 MiniMax Text to Video Sampler 节点中:
| 参数 | 推荐值 | 说明 |
|---|
prompt | “一只可爱的橘猫在阳光下打盹” | 正向提示词 |
negative_prompt | “模糊, 低质量, 变形” | 负向提示词 |
num_frames | 49 | 帧数(6秒 @ 8fps) |
width | 720 | 宽度 |
height | 480 | 高度 |
num_inference_steps | 50 | 推理步数 |
guidance_scale | 7.5 | CFG 强度 |
seed | -1 | 随机种子 |
Step 6: 生成第一个视频#
- 在 Prompt 节点输入:
一只可爱的柴犬在草地上奔跑,阳光明媚,电影级画质 - 在 Negative Prompt 输入:
模糊,低质量,变形,静止不动 - 点击 Queue Prompt 按钮
- 观察进度条(右侧会显示当前步数)
- 等待生成完成(约 10-15 分钟)
- 在
output/ 目录查看生成的视频
实际体验与优化#
我在 M5 Pro (48GB) 上的测试结果:
| 配置 | 生成时间 | 内存峰值 | 质量 | 备注 |
|---|
| 720x480, 49帧, 50步 | ~8 分钟 | ~26GB | ⭐⭐⭐⭐⭐ | 推荐 |
| 720x480, 49帧, 25步 | ~4 分钟 | ~26GB | ⭐⭐⭐⭐ | 快速预览 |
| 480x360, 25帧, 50步 | ~3 分钟 | ~20GB | ⭐⭐⭐⭐ | 低配适用 |
| 1280x720, 49帧, 50步 | ~14 分钟 | ~32GB | ⭐⭐⭐⭐⭐ | 高质量 |
M5 Pro 的优势:相比 M2 Max,生成速度快了约 25%,Metal 优化让 GPU 利用率更高。
提示词技巧:
✅ 有效的提示词:
1
| 一只橘猫在花园里追蝴蝶,镜头缓缓推进,电影级画质,4K
|
✅ 加入运动描述:
1
| 城市夜景,车流如梭,延时摄影,从左向右平移镜头
|
✅ 指定风格:
❌ 避免的描述:
方案二:VideoPipe (VPIPE) 命令行方案(适合进阶)#
为什么选 VideoPipe#
如果你想:
- 完全通过脚本自动化生成
- 批量生成多个视频
- 集成到自己的项目中
- 更精细的参数控制
那么 VideoPipe 是更好的选择。
Step 1: 安装 VideoPipe#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # 创建项目目录
mkdir -p ~/Projects/minimax-video
cd ~/Projects/minimax-video
# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate
# 克隆官方仓库
git clone https://github.com/MiniMaxAI/VideoPipe.git
cd VideoPipe
# 安装依赖
pip install --upgrade pip
pip install torch torchvision torchaudio
pip install diffusers transformers accelerate
pip install -e .
|
验证安装:
1
| python -c "import vpipe; print('VideoPipe installed successfully')"
|
Step 2: 下载模型(如果还没下载)#
1
2
3
4
5
6
7
| # 设置缓存目录
export HF_HOME=~/.cache/huggingface
# 下载模型
huggingface-cli download MiniMaxAI/MiniMax-Video-01 \
--local-dir ~/.cache/huggingface/hub/minimax-video-01 \
--local-dir-use-symlinks False
|
Step 3: 基础文生视频#
创建测试脚本 text_to_video.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| #!/usr/bin/env python3
"""
MiniMax Video-01 文生视频示例
"""
import torch
from diffusers import DiffusionPipeline
# 加载模型
pipe = DiffusionPipeline.from_pretrained(
"~/.cache/huggingface/hub/minimax-video-01",
torch_dtype=torch.float16,
variant="fp16"
)
# 启用内存优化
pipe.enable_model_cpu_offload()
pipe.enable_attention_slicing()
# 生成视频
prompt = "一只可爱的柴犬在草地上奔跑,阳光明媚,电影级画质"
negative_prompt = "模糊,低质量,变形,静止不动"
output = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
num_frames=49, # 49 帧 = 6 秒 @ 8fps
height=480,
width=720,
num_inference_steps=50,
guidance_scale=7.5,
generator=torch.manual_seed(42)
)
# 保存视频
output.frames[0].save("output_dog.mp4")
print("✅ 视频已保存到 output_dog.mp4")
|
运行生成:
1
| python text_to_video.py
|
Step 4: 图生视频#
创建 image_to_video.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| #!/usr/bin/env python3
"""
MiniMax Video-01 图生视频示例
"""
import torch
from PIL import Image
from diffusers import DiffusionPipeline
# 加载模型
pipe = DiffusionPipeline.from_pretrained(
"~/.cache/huggingface/hub/minimax-video-01",
torch_dtype=torch.float16,
variant="fp16"
)
pipe.enable_model_cpu_offload()
pipe.enable_attention_slicing()
# 加载起始图片
init_image = Image.open("input.jpg")
init_image = init_image.resize((720, 480))
# 生成视频
prompt = "画面中的人物开始微笑并向镜头挥手"
output = pipe(
prompt=prompt,
image=init_image, # 提供起始帧
strength=0.75, # 0-1,越高变化越大
num_frames=49,
num_inference_steps=50,
guidance_scale=7.5,
generator=torch.manual_seed(100)
)
# 保存
output.frames[0].save("output_animate.mp4")
print("✅ 视频已保存到 output_animate.mp4")
|
Step 5: 批量生成脚本#
创建 batch_generate.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
| #!/usr/bin/env python3
"""
批量生成多个视频
"""
import torch
from diffusers import DiffusionPipeline
from pathlib import Path
import time
# 加载模型
print("🔄 加载模型...")
pipe = DiffusionPipeline.from_pretrained(
"~/.cache/huggingface/hub/minimax-video-01",
torch_dtype=torch.float16,
variant="fp16"
)
pipe.enable_model_cpu_offload()
pipe.enable_attention_slicing()
# 提示词列表
prompts = [
"海浪拍打着沙滩,夕阳西下,金色的余晖",
"城市夜景,车流如梭,延时摄影,霓虹灯闪烁",
"森林中的小溪潺潺流水,阳光透过树叶洒下",
"咖啡杯中热气腾腾,咖啡豆散落在木桌面上",
"宇航员在月球表面漫步,地球在背景中升起"
]
# 创建输出目录
output_dir = Path("batch_outputs")
output_dir.mkdir(exist_ok=True)
# 批量生成
for i, prompt in enumerate(prompts, 1):
print(f"\n🎬 正在生成 [{i}/{len(prompts)}]: {prompt}")
start_time = time.time()
output = pipe(
prompt=prompt,
negative_prompt="模糊,低质量,静止",
num_frames=25, # 减少帧数加快生成
height=480,
width=720,
num_inference_steps=25, # 减少步数加快生成
guidance_scale=7.5,
generator=torch.manual_seed(i * 100)
)
output_path = output_dir / f"video_{i:03d}.mp4"
output.frames[0].save(str(output_path))
elapsed = time.time() - start_time
print(f"✅ 已保存: {output_path} (耗时: {elapsed/60:.1f} 分钟)")
print(f"\n🎉 批量生成完成!共 {len(prompts)} 个视频")
|
运行批量生成:
1
| python batch_generate.py
|
Step 6: 高级参数控制#
创建 advanced_config.py:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
| #!/usr/bin/env python3
"""
高级参数配置示例
"""
import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
# 加载模型
pipe = DiffusionPipeline.from_pretrained(
"~/.cache/huggingface/hub/minimax-video-01",
torch_dtype=torch.float16,
variant="fp16"
)
# 更换调度器(可选,影响生成质量和速度)
pipe.scheduler = DPMSolverMultistepScheduler.from_config(
pipe.scheduler.config
)
pipe.enable_model_cpu_offload()
pipe.enable_attention_slicing()
# 高级配置
prompt = "一个魔法师施展火焰魔法,火焰在空中旋转形成龙的形状"
negative_prompt = "静止,模糊,低质量,人物变形,画面破碎"
output = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
# 视频参数
num_frames=49, # 总帧数
height=480, # 高度
width=720, # 宽度
# 生成参数
num_inference_steps=50, # 推理步数(质量)
guidance_scale=9.0, # CFG 强度(越高越严格)
# 随机性控制
generator=torch.manual_seed(42),
# 回调函数(监控进度)
callback_on_step_end=lambda pipe, i, t, callback_kwargs:
print(f"Step {i}/{pipe.num_timesteps}") or callback_kwargs
)
output.frames[0].save("output_advanced.mp4")
print("✅ 高级配置视频已生成")
|
实际体验#
VideoPipe 在 M5 Pro (48GB) 上的表现:
| 方案 | 生成时间 | 内存峰值 | 灵活性 | 备注 |
|---|
| ComfyUI | ~8 分钟 | 26GB | ⭐⭐⭐⭐ | 可视化友好 |
| VideoPipe | ~9 分钟 | 24GB | ⭐⭐⭐⭐⭐ | 更多控制 |
VideoPipe 稍慢一点,但内存占用更低,提供了更多控制选项。
M5 Pro 提示:新架构对 Python 推理优化很好,VideoPipe 的性能提升比 ComfyUI 更明显。
两种方案对比#
| 维度 | ComfyUI | VideoPipe |
|---|
| 易用性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 灵活性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 性能 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 学习曲线 | 低 | 中等 |
| 适合人群 | 新手、设计师 | 开发者、研究者 |
| 批量处理 | 需手动 | 脚本自动化 |
| 可视化 | 实时预览 | 无 |
| 集成能力 | 插件生态 | Python API |
我的建议:
- 想快速上手、可视化 → ComfyUI
- 想深入研究、自动化 → VideoPipe
- 实际使用中可以两者结合
实用技巧与优化#
1. 加速模型下载#
1
2
3
4
5
6
7
8
| # 使用国内镜像
export HF_ENDPOINT=https://hf-mirror.com
# 或者使用代理
export ALL_PROXY=http://127.0.0.1:7890
# 断点续传
huggingface-cli download MiniMaxAI/MiniMax-Video-01 --resume-download
|
2. 内存优化#
如果内存不够:
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 启用 CPU 卸载
pipe.enable_model_cpu_offload()
# 启用注意力切片(减少显存)
pipe.enable_attention_slicing()
# 启用 VAE 切片
pipe.enable_vae_slicing()
# 减少帧数和分辨率
num_frames=25 # 从 49 减到 25
height=360 # 从 480 减到 360
width=540 # 从 720 减到 540
|
3. 提升生成质量#
1
2
3
4
5
6
7
8
9
10
11
| # 增加推理步数
num_inference_steps=100 # 从 50 增加到 100
# 提高 CFG 强度
guidance_scale=9.0 # 从 7.5 提高到 9.0
# 使用更好的调度器
from diffusers import DPMSolverMultistepScheduler
pipe.scheduler = DPMSolverMultistepScheduler.from_config(
pipe.scheduler.config
)
|
4. 监控资源使用#
1
2
3
4
5
6
7
8
9
| # 1. Activity Monitor(活动监视器)
open -a "Activity Monitor"
# 2. htop
brew install htop
htop
# 3. 实时内存监控
watch -n 1 'ps aux | grep python | grep -v grep'
|
5. 常见问题排查#
问题:内存不足崩溃#
1
2
3
4
5
6
7
8
9
| # 解决方案 1:启用所有内存优化
pipe.enable_model_cpu_offload()
pipe.enable_attention_slicing()
pipe.enable_vae_slicing()
# 解决方案 2:减小生成尺寸
height=360
width=540
num_frames=25
|
问题:生成速度慢#
1
2
3
4
5
| # 减少推理步数(牺牲一点质量)
num_inference_steps=25 # 从 50 减少
# 减少帧数
num_frames=25 # 从 49 减少
|
问题:生成结果不理想#
1
2
3
| # 调整参数组合
guidance_scale=8.5 # CFG 强度
num_inference_steps=75 # 推理步数
|
进阶玩法#
1. 视频插帧#
使用 RIFE 对生成的视频进行插帧,提升流畅度:
1
2
3
4
5
| # 安装 RIFE
pip install rife-ncnn-vulkan
# 插帧到 60fps
rife-ncnn-vulkan -i output.mp4 -o output_60fps.mp4 -n 60
|
2. 视频后处理#
使用 FFmpeg 优化视频:
1
2
3
4
5
6
7
8
| # 提升质量
ffmpeg -i output.mp4 -c:v libx264 -crf 18 -preset slow output_hq.mp4
# 添加音乐
ffmpeg -i output.mp4 -i music.mp3 -c:v copy -c:a aac output_with_audio.mp4
# 循环播放
ffmpeg -stream_loop 3 -i output.mp4 -c copy output_loop.mp4
|
3. 批量风格转换#
创建不同风格的同一场景:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # style_transfer.py
styles = [
"电影级画质,35mm胶片",
"宫崎骏动画风格",
"赛博朋克风格,霓虹灯",
"水彩画风格,梦幻",
"黑白电影,高对比度"
]
base_prompt = "一只猫坐在窗台上看雨"
for i, style in enumerate(styles):
full_prompt = f"{base_prompt}, {style}"
# 生成视频...
|
4. 自动化工作流#
创建监控目录,自动生成视频:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| # auto_generate.py
import time
from pathlib import Path
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class PromptHandler(FileSystemEventHandler):
def on_created(self, event):
if event.src_path.endswith('.txt'):
with open(event.src_path, 'r') as f:
prompt = f.read()
# 自动生成视频
generate_video(prompt)
# 监控 prompts/ 目录
observer = Observer()
observer.schedule(PromptHandler(), "prompts/", recursive=False)
observer.start()
|
折腾了三天,总结几点心得:
✅ 成功经验#
- M5 Pro 很给力:48GB 内存跑起来很舒服,比上一代快 25%
- ComfyUI 适合快速预览:可视化界面便于调参
- VideoPipe 适合批量生成:脚本化效率更高
- 提示词是关键:描述越具体,效果越好
- 耐心很重要:每个视频 8-15 分钟是常态
⚠️ 注意事项#
- 内存占用大:至少预留 26GB 以上
- 生成时间长:比图像生成慢 10 倍以上
- 质量不稳定:有时需要多次尝试
- 场景限制:复杂运动和多主体效果不佳
- 功耗适中:M5 Pro 发热控制比上代好很多
🎯 适合场景#
- ✅ 短视频素材生成
- ✅ 创意原型快速验证
- ✅ 学习视频生成原理
- ✅ 个人作品创作
- ❌ 商业级长视频制作
- ❌ 实时视频生成
📈 后续计划#
参考资源#
官方资源#
社区资源#
实用工具#
从一个技术爱好者的角度,本地部署视频生成模型比我想象的更有挑战性。不仅要折腾环境配置,还要反复调参才能得到满意的结果。
但看到第一个视频在自己电脑上生成出来的那一刻,所有的等待都是值得的。
这份教程记录了我完整的折腾过程,包括踩过的坑和解决方案。希望能帮助到同样想要本地运行 MiniMax Video-01 的朋友。
最后建议:
- 第一次尝试先用 ComfyUI,熟悉基本流程
- 再深入 VideoPipe 研究细节
- 耐心是最重要的品质
Happy creating! 🎬