ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Manim v0.13.0 版本全解读:副字幕 API、反导数绘图与 API 清理

2026/9/12 0:21:35 拓冰建站 浏览量
Manim v0.13.0 版本全解读:副字幕 API、反导数绘图与 API 清理 Manim v0.13.0 版本全解读副字幕 API、反导数绘图与 API 清理【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim本文基于仓库内 v0.13.0 版本变更日志结合 Manim 源码与测试体系完整梳理该版本的核心新特性、破坏性变更、缺陷修复与工程化改进帮助开发者在升级到 v0.13.0 时理解新增Scene.add_subcaption字幕接口、CoordinateSystem.plot_antiderivative_graph反导数绘图工具以及一批旧 API 的移除清单从而平滑迁移既有动画脚本。版本概览2021 年 12 月的关键里程碑Manim v0.13.0 发布于 2021 年 12 月 4 日是本项目社区维护路线上的重要版本。根据官方变更日志共27 位贡献者参与了本次发布姓名带标记者为首次提交补丁的新贡献者共39 个 Pull Request被合并项目官方将其定位于一次兼具新功能落地与遗留 API 清理的版本一方面引入了副字幕subcaption支持与反导数绘图等实用能力另一方面集中移除了直至 v0.12.0 为止所有已标记弃用的接口。从版本演进的视角看v0.13.0 也承担了「承上启下」的角色它一方面兑现了此前版本中积累的弃用承诺另一方面为后续版本的文档国际化i18n与 OpenGL 渲染器相关能力铺路。对于仍在使用旧版 Manim 的创作者本版本的破坏性变更清单是最需要优先关注的内容。核心亮点翻译流程与文档国际化收尾v0.13.0 的 Highlights 部分仅列出了一项PR #2313最终确定翻译流程并完善相关文档。这对应着仓库中docs/i18n/目录下成体系的国际化文件结构docs/i18n/gettext/下存放按版本如0.13.0-changelog.pot与按主题如guides/、reference/、installation/划分的 gettext 翻译模板.potdocs/i18n/fr/LC_MESSAGES/、hi/、pt/、sv/等目录存放各语言已翻译的.po文件。从仓库结构可以推断这一改动让社区翻译协作得以按模块化模板并行推进同时也表明 Manim 文档体系从早期「单一英文文档」走向了「多语言协作维护」的阶段。若你关注本地化参与方式可在 docs/source/contributing/internationalization.rst 中查看贡献指引。新特性一副字幕支持Scene.add_subcaptionv0.13.0 最值得创作者关注的新功能是**为动画场景添加副字幕subcaption**的基本支持对应 PR #2314。该特性让 Manim 场景在渲染视频时能同步产出一条标准的.srt字幕文件无需再手动对齐时间轴。两种使用方式根据 Scene.add_subcaption 的 docstring副字幕可以通过两种方式加入from manim import Scene, Square, Circle, Create, Transform class SubcaptionExample(Scene): def construct(self): square Square() circle Circle() # 方式一通过 add_subcaption 方法在“当前场景时间戳”处插入字幕 self.add_subcaption(Hello square!, duration1) self.play(Create(square)) # 方式二在 Scene.play 调用内直接指定 self.play( Transform(square, circle), subcaptionThe square transforms. )方法签名add_subcaption(content: str, duration: float 1, offset: float 0)其中content字幕文本内容duration字幕显示的持续时长秒默认1offset叠加到起始时间戳上的偏移量秒。Scene.play的新增关键字参数定义见 scene.py#L1188-L1240参数类型默认值含义subcaptionstr \| NoneNone动画期间要显示的字幕内容subcaption_durationfloat \| NoneNone字幕持续时长为None时取动画的run_timesubcaption_offsetfloat0字幕开始时间的偏移秒底层实现链路从源码看副字幕的写入经过了完整的「场景 → 管理器 → 文件写入器」调用链Scene.add_subcaption将参数转发给Scene._get_manager().add_subcaption(content, duration, offset)见 scene.py#L1766manager.py 的add_subcaption构造一个srt.Subtitle对象start self.time offsetend start duration并追加到file_writer.subcaptions列表渲染收尾时scene_file_writer.py 的write_subcaption_file调用srt.compose(self.subcaptions)将字幕序列化为标准.srt文本写入由output_plan.subcaption_file指定的文件默认位于视频产物旁并输出日志Subcaption file has been written as ...。值得注意的是play()方式在 manager.py 中调用add_subcaption时使用的offset -run_time subcaption_offset——这是因为字幕的起始时间取自「动画开始时刻」需要在内部用run_time做换算从而保证字幕恰好覆盖整个动画过程。对创作者的实际价值无需第三方工具即可为数学动画生成与画面同步的字幕文件便于后期在视频平台上发布带字幕的版本也便于无障碍传播。新特性二反导数图形绘制plot_antiderivative_graphPR #2267 为坐标系统类新增了CoordinateSystem.plot_antiderivative_graph方法填补了此前「导数图形可绘制、反导数图形缺失」的功能空白。方法签名与参数实现位于 coordinate_systems.py#L1552-L1610def plot_antiderivative_graph( self, graph: ParametricFunction, y_intercept: float 0, samples: int 50, use_vectorized: bool False, **kwargs: Any, ) - ParametricFunction参数默认值含义graph—要求反导数的原函数图形ParametricFunctiony_intercept0反导数曲线与 y 轴的交点 y 值即积分常数 Csamples50对图形下方区域取点计算面积的采样点数use_vectorizedFalse是否使用向量化版本为True时将生成的 t 值数组整体传入函数要求函数支持向量化输出应为形如[y_0, y_1, ...]的 numpy 数组kwargs—透传给ParametricFunction的任意合法关键字如color数值实现原理源码中的核心计算逻辑如下def antideriv(x): x_vals np.linspace(0, x, samples, axis1 if use_vectorized else 0) f_vec np.vectorize(graph.underlying_function) y_vals f_vec(x_vals) return np.trapezoid(y_vals, x_vals) y_intercept也就是说该方法通过数值积分实现反导数从x0到目标点x均匀采样samples个点对原函数做向量化求值再用np.trapezoid做梯形法则积分最后叠加y_intercept作为积分常数。官方文档同时给出了重要提示由于图形由 x0 起算的面积值绘制若原图形在 x0 处存在不可计算的区域结果可能不理想。使用示例结合仓库自带的 docstring 示例AntiderivativeExample一个可直接运行的场景如下from manim import Scene, Axes, RED, BLUE class AntiderivativeExample(Scene): def construct(self): ax Axes() graph1 ax.plot( lambda x: (x**2 - 2) / 3, colorRED, ) graph2 ax.plot_antiderivative_graph(graph1, colorBLUE) self.add(ax, graph1, graph2)该方法与同文件中的plot_derivative_graphcoordinate_systems.py#L1505基于slope_of_tangent计算切线斜率互为补足使 Manim 的微积分可视化能力更加完整——导数与反导数可以在同一坐标系中直接对照展示。破坏性变更截至 v0.12.0 的弃用项被正式移除PR #2331 一次性移除了截至 v0.12.0 的所有已弃用接口。升级到 v0.13.0 前请务必检查你的脚本是否用到了以下 API已移除项所属类/模块替代方案distance参数ThreeDCamera改用focal_distancemin_distance_to_new_point参数TracedPath—positive_space_ratio、dash_spacing参数DashedVMobject—method_in_place系列方法mobject模块使用非 in-place 版本 显式赋值ReconfigurableScene——SampleSpaceScene——其中ThreeDCamera的focal_distance在当前源码中已作为核心属性落地见 three_d_camera.py#L42构造参数默认值20.0及配套的get_focal_distance/set_focal_distance方法L187-L246它由ValueTracker驱动支持动画化调节相机的焦距。此外PR #2312 将代码库中所有set_submobjects的调用替换为更明确的子对象设置方式这也属于面向新老 API 的统一重构脚本中如依赖该方法将不再可用。增强文档工具、树布局与表格 APIv0.13.0 的 Enhancements 部分包含如下值得关注的能力增强PR #2347将manim_directive.py迁移至manim.utils.docbuild包。这正是当前仓库中 manim/utils/docbuild/manim_directive.py 的由来它负责文档构建时执行并嵌入.. manim::指令对应的动画示例PR #2340为animation.growing模块补齐文档并改进SpinInFromNothing动画PR #2343用 SageMath 的树布局算法替换原有算法改善大树结构的排版质量影响 manim/mobject/graph.py 中的树形图布局PR #2351为Table.add_highlighted_cell补充缺失的**kwargs透传参数使其能像Table.get_celltable.py#L788一样自定义高亮单元格的样式——当前实现见 table.py#L884PR #2344调整 SVG Logo 尺寸使其内容贴合画布。缺陷修复从相机、渲染到表格的全面修整v0.13.0 修复了一批影响实际创作体验的问题PR #2359修复调用manim cfg write时抛出ValueError的问题保障配置写入命令可用PR #2276修复ThreeDAxes中z 轴对齐的 bugPR #2325多处改进对quality参数的处理逻辑使画质参数在不同命令路径下表现一致PR #2335修复相机缩放zooming与PointCloud结合时的异常PR #2328修复向 Cairo 传递错误的 RGBA 值的问题避免颜色渲染偏差PR #2292修复Flash指示动画的定位问题PR #2262修复Table.get_cell在缩放scaling之后返回错误单元格坐标的问题PR #2280修复DecimalNumber在显示位数变化时颜色出错的问题。对于表格用户PR #2262 尤其关键它保证了「先缩放表格、再按坐标取单元格」这一常见操作流程的坐标正确性。文档、测试体系与代码质量改进文档相关改动本版本的文档工作相当活跃包括PR #2354将mobject.py与vectorized_mobject.py的文档和类型标注同步移植到其 OpenGL 对应实现opengl_mobject.py、opengl_vectorized_mobject.pyPR #2350在文档中提及 Manim Sideview 的 VS Code 扩展PR #2342移除Axes示例中对CoordinateSystem.get_graph的过时用法PR #2216重写并扩充 quickstart 教程章节PR #2279为不连续函数补充文档与ParametricFunction的discontinuities参数相关PR #2319修正Mobject.interpolate示例中dotL与dotR的书写顺序PR #2310明确说明 Manim 当时尚不支持 Python 3.10PR #2294精简文档首页并重排教程顺序PR #2287替换指向旧交互式笔记本的失效链接。测试体系变化PR #2346将帧测试装饰器frames_comparison正式化为库的独立模块——即当前 manim/utils/testing/frames_comparison.pyPR #2318新增AnimationGroup的remover关键字参数测试PR #2301新增ThreeDScene.add_fixed_in_frame_mobjects的测试PR #2274优化部分测试以缩短运行时长PR #2272新增Broadcast动画的测试。代码质量与重构PR #2327修正Graph的labels关键字参数类型标注PR #2329移除 README 中意外的换行PR #2305修正ParametricFunction的discontinuities参数类型标注PR #2300为 PyPI 添加联系邮箱。升级到 v0.13.0 的实践建议综合上述变更从旧版本升级到 v0.13.0 时建议按以下顺序自查搜索已移除 API在项目中全局搜索distanceThreeDCamera 场景、min_distance_to_new_point、positive_space_ratio、dash_spacing、*_in_place、set_submobjects、ReconfigurableScene、SampleSpaceScene逐一替换为变更日志中给出的替代方案如focal_distance尝鲜新字幕能力若你的动画需要对外发布带字幕的版本可直接在Scene.construct中使用self.add_subcaption(...)或self.play(..., subcaption...)渲染后在同一输出目录检查生成的.srt文件升级微积分可视化用plot_antiderivative_graph与plot_derivative_graph配对展示原函数、导数与反导数的关系注意samples与y_intercept参数对曲线形态的影响关注测试回归本版本针对表格缩放、字幕写入、quality参数等新增了大量测试升级后建议运行pytest tests/验证环境一致性。总体而言v0.13.0 是一次「功能与清理并重」的版本副字幕 API 为发布流程补齐了关键一环反导数绘图扩展了数学可视化的表现力而集中移除的弃用接口则意味着社区对 API 稳定性的承诺开始兑现。对于想要深入研读源码的读者建议从 Scene.add_subcaption 与 plot_antiderivative_graph 两处入口出发沿「场景 → 管理器 → 文件写入器」与「坐标系统 → 数值积分」两条调用链精读即可全面掌握 v0.13.0 引入的核心机制。【免费下载链接】manimA community-maintained Python framework for creating mathematical animations.项目地址: https://gitcode.com/GitHub_Trending/man/manim创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考