manim 移动端适配完整指南:3步让数学动画在手机竖屏上完整播放
【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim
手机上播放 manim 渲染的数学动画,常遇到比例不对、字看不清、文件太大三类问题。manim 移动端适配就是在渲染阶段把这三件事一次解决。读完全文,你能定下全局参数、改好一个竖屏坐标系场景、并选对质量档位。
动手前的三个选择:设备、方向、播放场景
先做三个选择,它们直接决定后面每一步的取值:
- 目标设备:只投手机、只投平板,还是两者都要。两者都要时,物理宽度按 1080 起步,兼顾手机清晰度与平板放大。
- 方向:竖屏还是横屏。它决定 pixel_width 与 pixel_height 的比例关系:竖屏取 9:16,横屏取 16:9。
- 播放场景:视频站、网页内嵌,还是聊天软件直接转发。转发场景对文件体积最敏感,档位要压得比视频站低一档。
manim 移动端分辨率设置:全局参数怎么定
manim 默认输出 1920×1080 横屏,手机上这一帧有一半像素是浪费的。把输出尺寸和逻辑画幅都改成竖屏比例,是参数层唯一要做的两件事。
| 参数 | 竖屏推荐值 | 为什么这么取 |
|---|---|---|
| pixel_width | 1080 | 手机屏幕主流宽度 |
| pixel_height | 1920 | 保持 9:16 竖屏比例 |
| frame_rate | 30 | 手机播放流畅,渲染量减半 |
| frame_width | 8.0 | 缩小逻辑宽度,元素更大 |
| frame_height | 14.22 | 与 9:16 比例严格匹配 |
这里要分清两组参数:pixel_width、pixel_height 决定物理清晰度;frame_width、frame_height 是逻辑坐标系,决定一屏装下多大的坐标范围。逻辑画幅取 8.0 × 14.22 时,比例与像素严格一致,画面不会被拉伸变形。
下面这段配置写入工作目录下的 manim.cfg,对后续所有渲染全局生效:
[CLI] pixel_width = 1080 pixel_height = 1920 frame_width = 8.0 frame_height = 14.22 frame_rate = 30临时覆盖某一次运行,用命令行参数即可,它的优先级高于 manim.cfg。
manim 竖屏布局改造:坐标系场景怎么写
像素分辨率管清晰度,逻辑画幅管一屏放多少内容。竖屏时画幅变高变窄,内容只能自上而下排,别把元素横向铺开。下面这个正弦函数坐标系场景演示竖屏排法:
from manim import * class PortraitSineScene(Scene): def construct(self): axes = Axes( x_range=[0, 2 * PI, PI, TINY], y_range=[-1.5, 1.5, 1, TINY], x_length=6.4, y_length=5.5, ) curve = axes.plot(lambda x: np.sin(x), color=ORANGE) title = Text("正弦函数 y = sin x", font_size=36).to_edge(UP) self.play(Create(axes)) self.play(Create(curve), Write(title)) self.wait()三个要点:
- Axes 默认撑满整个逻辑画幅,竖屏下会把 y 轴拉得很高、曲线贴住上边缘,必须用 x_length 和 y_length 显式限制尺寸。
- 标题 font_size 从 36 起步。竖屏里一行能排的字少,字号再小就会在手机上看吃力。
- 标题置顶、坐标系居下的顺序,符合手机上的阅读习惯。
manim 质量档位选择:-ql 到 -qk 怎么用
布局确认后选最终档位。manim 自带四档,数值如下表:
| 档位 | 分辨率 | 帧率 | 适合谁 |
|---|---|---|---|
| -ql | 854×480 | 15 | 布局快速预览 |
| -qm | 1280×720 | 30 | 横屏移动端成片 |
| -qh | 1920×1080 | 60 | 大屏、横屏高清 |
| -qk | 3840×2160 | 60 | 4K 存档,手机用不上 |
注意一个冲突点:-q 档位会强制覆盖像素尺寸为横屏值,所以竖屏成片不要带 -q,直接用 manim.cfg 里的参数渲染即可,档位只在快速预览时用。
输出格式用 --format 指定,各一句话:
- MP4(默认):手机播放器兼容性最好,首选。
- WebM:同画质下体积更小,适合网页内嵌。
- GIF:适合聊天软件里转发短片段,时长一长体积就爆。
踩坑对照:从现象到处理
- 现象:手机播放时画面被裁切或上下黑边。原因:pixel_width 与 pixel_height 的比例和手机屏幕不一致。处理:统一用 9:16 或 16:9,别取 4:3 这种中间比例。
- 现象:文字渲染出来比预期小很多。原因:缩小 frame_width 后没有同步调大 font_size,元素在更宽的坐标范围里被摊薄。处理:标题字号提到 36 以上再复查。
- 现象:文件大到聊天软件转发失败。原因:按 -qh 甚至更高帧率输出。处理:降到 -qm,体积通常减半以上。
- 现象:曲线超出屏幕上下边缘。原因:竖屏画幅里 Axes 仍默认撑满全幅。处理:显式传入 x_length、y_length 固定尺寸。
多设备验收:人工检查清单
成片后按这 4 项人工过一遍,不需要脚本:
- 在手机图库打开缩略图,确认画面铺满、无黑边、无裁切。
- 转发文件到真机播放,用播放进度条拖到首帧和末帧抽看内容完整。
- 核对文件体积,转发场景控制在 50MB 内,超标就降档重渲。
- 平板上放大查看文字边缘,发糊说明分辨率不够,升一档。
收尾
移动端适配的本质就两组匹配:像素比例对齐屏幕,逻辑画幅对齐内容。建议先用 -ql 快速验证布局,确认无误后再按目标参数出成片。
【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考