首页 / 文档中心 / 进阶

Manim 渲染输出:画质参数、GIF、透明背景与视频压缩导出

发布于 2026-11-02 · 进阶系列 · 约 2 分钟读完 · 中文正文 + English TL;DR
English TL;DR

A complete reference for Manim's output side. Quality flags: -ql (480p15), -qm (720p30), -qh (1080p60), -qk (2160p60), overridable per-flag with --resolution and --fps; -p previews, -a renders every Scene, -n picks a frame range, -s saves only the last frame as PNG. Formats: --format=gif/mp4/webm, with --transparent giving alpha-channel WebM for compositing over footage. Output lands in media/videos/<script>/<quality>/ and can be redirected with --media_dir or a manim.cfg. Then the part tutorials skip: post-processing with FFmpeg. Recipes for crushing file size without visible loss — CRF 26-30 H.264 for web video, the palettegen/paletteuse two-pass for clean small GIFs, scale filters, and faststart for instant playback in browsers. Target numbers for embedding tutorials on the web: 480-640px wide, 10-15fps, under 2 MB per clip.

画质等级速查

旗标分辨率帧率用途
-ql480p15写代码时快速预览
-qm720p30B 站 / 视频号够用
-qh1080p60正式视频
-qk2160p604K 素材
manim -pqm demo.py MyScene              # 720p30 预览
manim demo.py MyScene --fps 24          # 自定义帧率
manim demo.py MyScene --resolution 960,540
manim -s demo.py MyScene                # 只输出末帧 PNG(海报/封面神器)

输出位置:media/videos/<脚本名>/<画质标签>/MyScene.mp4。用 --media_dir /path 或项目根放 manim.cfg 统一管理。

批量与局部渲染

manim -a demo.py            # 渲染文件里所有 Scene
manim demo.py MyScene -n 30,60   # 只渲染第 30~60 帧(调片段超快)
manim --dry_run demo.py     # 只跑逻辑不编码, 验证代码不报错

GIF 与透明背景

# GIF (交流/文档嵌入)
manim demo.py MyScene --format gif -ql

# 透明背景 (给剪映/PR 叠轨用)
manim demo.py MyScene --transparent --format webm -qm
# 注意: 透明只能配 webm (VP9 + alpha)

FFmpeg 后期压缩(网页嵌入必备)

Manim 默认导出的 mp4 码率偏高,直接传网页很浪费。两条命令解决:

# H.264 网页通用: CRF 越大越小, 26~30 肉眼无损
ffmpeg -i in.mp4 -c:v libx264 -crf 28 -preset slow        -vf scale=640:-2 -pix_fmt yuv420p        -movflags +faststart out.mp4

# 高质量小 GIF: 两遍法先生成调色板
ffmpeg -i in.mp4 -vf "fps=10,scale=560:-1:flags=lanczos,split[a][b];[a]palettegen[p];[b][p]paletteuse" out.gif
  • -movflags +faststart — 网页边下边播(moov 前置),嵌 HTML 必加
  • scale=640:-2 — 宽 640 高度自适应(-2 保证偶数)
  • fps=10 — 教学动画 10fps 完全流畅,体积减半

网页嵌入经验值:宽 480~640px、10~15fps、CRF 28,10 秒的片段可以压到 300KB~1.5MB。本站教程页内嵌的效果视频就是这么压的。

manim.cfg:项目级默认值

# 项目根目录放 manim.cfg, 之后命令行只写场景名
[CLI]
quality = medium_quality
preview = True
output_file = {scene_name}
frame_rate = 30

写教程系列视频时统一画质,避免每条命令都带一串旗标。

从视频抽帧做封面

# 取第 2 秒的画面当封面图
ffmpeg -ss 2 -i out.mp4 -frames:v 1 cover.jpg