作为一个技术爱好者,当 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

验证安装:

1
python main.py --help

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

启动成功后,在浏览器打开:

1
http://127.0.0.1:8188

Step 5: 创建视频生成工作流

加载预设工作流

  1. 在 ComfyUI 界面点击 Load 按钮
  2. 找到 custom_nodes/ComfyUI-MiniMaxWrapper/workflows/text_to_video_basic.json
  3. 加载工作流

手动创建工作流(理解原理)

工作流节点结构:

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 界面中:

  1. 右键 → Add Node → MiniMax → Load MiniMax Video Model

    • model_path: models/minimax/video-01
  2. 右键 → Add Node → MiniMax → MiniMax Text to Video Sampler

    • 连接 Model 输出到这个节点
    • 配置参数(见下)
  3. 右键 → Add Node → VHS Video Formats → Video Combine

    • 用于合成最终视频
    • frame_rate: 8
    • format: video/h264-mp4
  4. 连接节点

核心参数配置

MiniMax Text to Video Sampler 节点中:

参数推荐值说明
prompt“一只可爱的橘猫在阳光下打盹”正向提示词
negative_prompt“模糊, 低质量, 变形”负向提示词
num_frames49帧数(6秒 @ 8fps)
width720宽度
height480高度
num_inference_steps50推理步数
guidance_scale7.5CFG 强度
seed-1随机种子

Step 6: 生成第一个视频

  1. 在 Prompt 节点输入:一只可爱的柴犬在草地上奔跑,阳光明媚,电影级画质
  2. 在 Negative Prompt 输入:模糊,低质量,变形,静止不动
  3. 点击 Queue Prompt 按钮
  4. 观察进度条(右侧会显示当前步数)
  5. 等待生成完成(约 10-15 分钟)
  6. 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
城市夜景,车流如梭,延时摄影,从左向右平移镜头

指定风格

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 更明显。


两种方案对比

维度ComfyUIVideoPipe
易用性⭐⭐⭐⭐⭐⭐⭐⭐
灵活性⭐⭐⭐⭐⭐⭐⭐⭐⭐
性能⭐⭐⭐⭐⭐⭐⭐⭐⭐
学习曲线中等
适合人群新手、设计师开发者、研究者
批量处理需手动脚本自动化
可视化实时预览
集成能力插件生态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()

总结

折腾了三天,总结几点心得:

✅ 成功经验

  1. M5 Pro 很给力:48GB 内存跑起来很舒服,比上一代快 25%
  2. ComfyUI 适合快速预览:可视化界面便于调参
  3. VideoPipe 适合批量生成:脚本化效率更高
  4. 提示词是关键:描述越具体,效果越好
  5. 耐心很重要:每个视频 8-15 分钟是常态

⚠️ 注意事项

  1. 内存占用大:至少预留 26GB 以上
  2. 生成时间长:比图像生成慢 10 倍以上
  3. 质量不稳定:有时需要多次尝试
  4. 场景限制:复杂运动和多主体效果不佳
  5. 功耗适中:M5 Pro 发热控制比上代好很多

🎯 适合场景

  • ✅ 短视频素材生成
  • ✅ 创意原型快速验证
  • ✅ 学习视频生成原理
  • ✅ 个人作品创作
  • ❌ 商业级长视频制作
  • ❌ 实时视频生成

📈 后续计划

  • 尝试 LoRA 微调
  • 探索视频风格迁移
  • 接入到视频剪辑工作流
  • 研究多镜头拼接

参考资源

官方资源

社区资源

实用工具


后记

从一个技术爱好者的角度,本地部署视频生成模型比我想象的更有挑战性。不仅要折腾环境配置,还要反复调参才能得到满意的结果。

但看到第一个视频在自己电脑上生成出来的那一刻,所有的等待都是值得的。

这份教程记录了我完整的折腾过程,包括踩过的坑和解决方案。希望能帮助到同样想要本地运行 MiniMax Video-01 的朋友。

最后建议

  • 第一次尝试先用 ComfyUI,熟悉基本流程
  • 再深入 VideoPipe 研究细节
  • 耐心是最重要的品质

Happy creating! 🎬