Manim 渲染输出:画质参数、GIF、透明背景与视频压缩导出
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.
画质等级速查
| 旗标 | 分辨率 | 帧率 | 用途 |
|---|---|---|---|
| -ql | 480p | 15 | 写代码时快速预览 |
| -qm | 720p | 30 | B 站 / 视频号够用 |
| -qh | 1080p | 60 | 正式视频 |
| -qk | 2160p | 60 | 4K 素材 |
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