Communitygithub.com

Manim 数学动画制作管道

使用 Manim Community Edition 制作数学与技术动画的生产管道。可创建 3Blue1Brown 风格的讲解视频、算法可视化、公式推导、架构图和数据故事。

Manim 数学动画制作管道 是什么?

该技能提供了一个完整的教育动画制作管道,基于 Manim Community Edition,专为创建高质量数学与技术讲解视频而设计。它遵循 3Blue1Brown 风格的视觉叙事原则——强调“几何优先于代数”、分层不透明度引导注意力、以及适度的停顿给观众消化时间。管道流程包括规划(场景脚本)、编码(每场景一个独立的 Python 类)、渲染(支持 -ql 草稿与 -qh 生产质量)、拼接(ffmpeg)和可选的配音与背景音乐。内置创意指南涵盖调色板(如经典 3B1B 配色、暖学术、霓虹科技)、动画速度表、字体比例(强制使用等宽字体避免 Pango 渲染缺陷),以及每场场景的变化策略(不同的主色调、布局、入场动画)。支持多种模式:概念讲解、公式推导、算法可视化、数据故事、架构图、论文讲解和 3D 可视化。此外,技能还包含了创造性发散(SCAMPER 和假设反转)方法,用于用户要求实验性或创新性讲解时,帮助打破常规视觉思考。通过提供明确的引用文件索引(如动画、物体、视觉设计、方程、图表、相机 3D、渲染、故障排除等),该技能确保开发者能快速查找并遵循最佳实践。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/MuhammadaliNazarov/claude-video-skills/tree/HEAD/skills/video-editor/engine/skills/manim-video

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

Manim 视频制作管道

创作标准

这是教育电影。每一帧都在讲授,每一个动画都在揭示结构。

在写任何代码之前,先阐述叙事弧线。它要纠正什么误解?“原来如此”的时刻是什么?什么视觉故事能将观众从困惑带入理解?用户的提示只是一个起点——要用教学野心去诠释它。

几何优先于代数。 先展示形状,再展示公式。视觉记忆比符号记忆编码更快。当观众在看到公式之前先看到几何模式,公式就显得理所应当。

一次性渲染优秀是不可妥协的。 输出必须在视觉上清晰、审美上连贯,无需修改轮次。如果看起来杂乱、节奏不佳或像“AI 生成的幻灯片”,那就是失败。

不透明度分层引导注意力。 永远不要把所有元素都设成最高亮度。主要元素设为 1.0,上下文元素设为 0.4,结构元素(坐标轴、网格)设为 0.15。大脑分层处理视觉显著性。

留白时间。 每个动画之后都需要 self.wait()。观众需要时间吸收刚才出现的内容。切勿仓促地从一帧动画跳到下一帧。关键揭示后停顿 2 秒永远不浪费。

统一的视觉语言。 所有场景共享调色板、一致的字体大小和匹配的动画速度。一个技术上正确但每个场景都用随机颜色的视频是审美上的失败。

先决条件

运行 scripts/setup.sh 验证所有依赖。需要:Python 3.10+、Manim Community Edition v0.20+ (pip install manim)、LaTeX(Linux 上为 texlive-full,macOS 上为 mactex)和 ffmpeg。参考文档已针对 Manim CE v0.20.1 测试。

模式

模式输入输出参考文档
概念讲解主题/概念具有几何直观的动画解释references/scene-planning.md
公式推导数学表达式分步动画证明references/equations.md
算法可视化算法描述带数据结构的逐步执行过程references/graphs-and-data.md
数据故事数据/指标动画图表、对比、计数器references/graphs-and-data.md
架构图系统描述组件逐步构建并连接references/mobjects.md
论文讲解研究论文关键发现和方法的动画呈现references/scene-planning.md
3D 可视化3D 概念旋转曲面、参数曲线、空间几何references/camera-and-3d.md

技术栈

每个项目一个单一 Python 脚本。无需浏览器、Node.js 或 GPU。

层工具用途
核心Manim Community Edition场景渲染、动画引擎
数学LaTeX (texlive/MiKTeX)通过 MathTex 渲染公式
视频 I/Offmpeg场景拼接、格式转换、音频混合
语音合成ElevenLabs / Qwen3-TTS (可选)旁白配音

管道

规划 --> 编码 --> 渲染 --> 拼接 --> 音频 (可选) --> 评审
  1. 规划 — 编写 plan.md,包含叙事弧线、场景列表、视觉元素、调色板、旁白脚本
  2. 编码 — 编写 script.py,每个场景一个独立可渲染的类
  3. 渲染 — manim -ql script.py Scene1 Scene2 ... 用于草稿,-qh 用于生产
  4. 拼接 — 使用 ffmpeg 将场景片段连接成 final.mp4
  5. 音频 (可选) — 通过 ffmpeg 添加旁白和/或背景音乐。参见 references/rendering.md
  6. 评审 — 渲染预览截图,对照规划核实,调整

项目结构

project-name/
  plan.md                # 叙事弧线,场景分解
  script.py              # 所有场景在同一个文件中
  concat.txt             # ffmpeg 场景列表
  final.mp4              # 拼接输出
  media/                 # Manim 自动生成
    videos/script/480p15/

创意指南

调色板

调色板背景色主色辅色强调色用途
经典 3B1B#1C1C1C#58C4DD (蓝色)#83C167 (绿色)#FFFF00 (黄色)通用数学/计算机科学
暖学术#2D2B55#FF6B6B#FFD93D#6BCB77亲和力强
霓虹科技#0A0A0A#00F5FF#FF00FF#39FF14系统、架构
单色#1A1A2E#EAEAEA#888888#FFFFFF极简

动画速度

上下文run_time之后 self.wait()
标题/介绍出现1.5s1.0s
关键公式揭示2.0s2.0s
变换/变形1.5s1.5s
辅助标签0.8s0.5s
FadeOut 清理0.5s0.3s
“原来如此”时刻揭示2.5s3.0s

字体比例

角色字号用途
标题48场景标题,开场文字
标题36场景内章节标题
正文30解释性文字
标签24注释,坐标轴标签
说明20副标题,小字

字体

所有文字使用等宽字体。 Manim 的 Pango 渲染器在使用比例字体时会产生破碎的字间距。参见 references/visual-design.md 获取完整建议。

MONO = "Menlo"  # 在文件顶部定义一次

Text("傅里叶级数", font_size=48, font=MONO, weight=BOLD)  # 标题
Text("n=1: sin(x)", font_size=20, font=MONO)                  # 标签
MathTex(r"\nabla L")                                            # 数学 (使用 LaTeX)

可读性最低 font_size=18。

每场景变化

切勿对所有场景使用完全相同的配置。对于每个场景:

  • 不同主色调(从调色板中选择)
  • 不同布局——不要总是将所有内容居中
  • 不同动画入场方式——在 Write、FadeIn、GrowFromCenter、Create 之间变换
  • 不同视觉重量——有些场景密集,有些稀疏

工作流程

第一步:规划 (plan.md)

在写任何代码之前,编写 plan.md。参见 references/scene-planning.md 获取完整模板。

第二步:编码 (script.py)

每个场景一个类。每个场景都能独立渲染。

from manim import *

BG = "#1C1C1C"
PRIMARY = "#58C4DD"
SECONDARY = "#83C167"
ACCENT = "#FFFF00"
MONO = "Menlo"

class Scene1_Introduction(Scene):
    def construct(self):
        self.camera.background_color = BG
        title = Text("为什么这有效?", font_size=48, color=PRIMARY, weight=BOLD, font=MONO)
        self.add_subcaption("为什么这有效?", duration=2)
        self.play(Write(title), run_time=1.5)
        self.wait(1.0)
        self.play(FadeOut(title), run_time=0.5)

关键模式:

  • 每个动画加字幕:self.add_subcaption("文本", duration=N) 或在 self.play() 中使用 subcaption="文本"
  • 共享颜色常量放文件顶部,确保跨场景一致性
  • self.camera.background_color 在每个场景中设置
  • 干净退出——场景结束时 FadeOut 所有 mobject:self.play(FadeOut(Group(*self.mobjects)))

第三步:渲染

manim -ql script.py Scene1_Introduction Scene2_CoreConcept  # 草稿
manim -qh script.py Scene1_Introduction Scene2_CoreConcept  # 生产

第四步:拼接

cat > concat.txt << 'EOF'
file 'media/videos/script/480p15/Scene1_Introduction.mp4'
file 'media/videos/script/480p15/Scene2_CoreConcept.mp4'
EOF
ffmpeg -y -f concat -safe 0 -i concat.txt -c copy final.mp4

第五步:评审

manim -ql --format=png -s script.py Scene2_CoreConcept  # 预览截图

关键实现注意事项

LaTeX 的原始字符串

# 错误:MathTex("\frac{1}{2}")
# 正确:
MathTex(r"\frac{1}{2}")

边缘文本的 buff >= 0.5

label.to_edge(DOWN, buff=0.5)  # 永远不要 < 0.5

替换文本前先 FadeOut

self.play(ReplacementTransform(note1, note2))  # 而不是在原来上方 Write(note2)

永远不要对未添加的 Mobjects 做动画

self.play(Create(circle))  # 必须先 add
self.play(circle.animate.set_color(RED))  # 然后做动画

性能目标

质量分辨率FPS速度
-ql (草稿)854x480155-15秒/场景
-qm (中等)1280x7203015-60秒/场景
-qh (生产)1920x10806030-120秒/场景

始终在 -ql 下迭代。仅对最终输出渲染 -qh。

参考文档

文件内容
references/animations.md核心动画、速率函数、组合、.animate 语法、时序模式
references/mobjects.md文本、形状、VGroup/Group、定位、样式、自定义 mobject
references/visual-design.md12 条设计原则、不透明度分层、布局模板、调色板
references/equations.mdManim 中的 LaTeX、TransformMatchingTex、推导模式
references/graphs-and-data.md坐标轴、绘图、BarChart、动画数据、算法可视化
references/camera-and-3d.mdMovingCameraScene、ThreeDScene、3D 曲面、摄像机控制
references/scene-planning.md叙事弧线、布局模板、场景过渡、规划模板
references/rendering.mdCLI 参考、质量预设、ffmpeg、配音工作流、GIF 导出
references/troubleshooting.mdLaTeX 错误、动画错误、常见错误、调试
references/animation-design-thinking.md何时动效 vs 静态显示、分解、节奏、旁白同步
references/updaters-and-trackers.mdValueTracker、add_updater、always_redraw、基于时间的 updater、模式
references/paper-explainer.md将研究论文转化为动画——工作流、模板、领域模式
references/decorations.mdSurroundingRectangle、Brace、箭头、DashedLine、Angle、注释生命周期
references/production-quality.md编码前、渲染前、渲染后检查清单、空间布局、颜色、节奏

创造性发散(仅当用户要求实验性/创造性/独特输出时使用)

如果用户要求创造性、实验性或非传统的讲解方法,请在设计动画之前选择一种策略并充分论证。

  • SCAMPER — 当用户希望为标准讲解带来新鲜视角时
  • 假设反转 — 当用户希望挑战通常的教学方式时

SCAMPER 转换

对标准数学/技术可视化进行转换:

  • 替代:替换标准视觉隐喻(数轴→蜿蜒路径,矩阵→城市网格)
  • 结合:融合两种讲解方法(代数 + 几何同时进行)
  • 反转:反向推导——从结果开始,解构到公理
  • 修改:夸大某个参数以显示其重要性(10 倍学习率,1000 倍样本量)
  • 消除:去除所有符号——纯粹通过动画和空间关系解释

假设反转

  1. 列出该主题“标准”的可视化方式(从左到右、2D、离散步骤、正式符号)
  2. 选择最根本的假设
  3. 反转它(从右到左推导、2D 概念的 3D 嵌入、连续变形代替步骤、零符号)
  4. 探索反转揭示了什么标准方法所隐藏的东西

Individual skills in this repo

This repo contains 3 individual skills — each has its own dedicated page.

MuhammadaliNazarov/claude-video-skills

The user's CINEMATIC editing skill, separate from the everyday video-editor. Use only when the user wants something more cinematic, artistic, filmic, moody or "like Gawx" — a personal documentary, a travel film, a making-of, a story Reel with a film look — or says creative, cinematic, film look, moody, aesthetic, short film, Gawx. Low-key red/teal film grade (Cine_Gawx LUT), grain, halation, vignette, framed 4:5 / 1.37:1 / 2.39:1 pictures, small red chapter cards, music-led montage bursts, object close-ups, bookend storytelling with the meaning said out loud. For normal talking-head Reels with one-word captions use video-editor instead.

MuhammadaliNazarov/claude-video-skills

The user's scriptwriting and storytelling skill for short-form video (Instagram Reels first, also TikTok, Shorts, YouTube hooks). Writes hooks, full spoken scripts, on-screen text scripts, captions, B-roll shot lists and CTAs, using proven viral format families (Advice, Opinion, Relatable, Storytelling, Easy-to-use), story structures (normal → explosion → new normal; stakes → big question → head fake → re-hook; the Kallaway hook → lock-in → body/re-hook format; but/therefore) and current platform research. Use whenever the user asks to write, plan, brainstorm, fix or rate a script, hook, caption, video idea, content calendar, story, or "what should I post", or says script, hook, idea, format, storytelling, caption, CTA, or "make this go viral".

MuhammadaliNazarov/claude-video-skills

The user's one video editing skill. Edit any video by conversation, from raw footage to a finished file. Instagram Reels / vertical 9:16 (the default; the user mainly posts on Instagram), YouTube 16:9 hooks and long form, and anything else (montage, travel, interview, tutorial, screen recordings). Transcribes with ElevenLabs Scribe, cuts retakes and dead air, colour grades with cinematic LUTs (including Apple Log), adds word-timed captions (one word at a time in red/white or red/black by default; yellow and documentary styles too), split-explainer layouts learned from reference Reels, HyperFrames motion graphics, punch-ins, B-roll, free sound effects, music beds, and renders locally. Use whenever the user drops footage, names a video file, or says edit, cut, Reel, Instagram, YouTube, captions, subtitles, grade, LUT, Apple Log, animate, overlay, highlight this screen recording, or render.

相关技能