news 2026/8/18 16:04:09

Asymptote动画制作教程:从PDF动态图形到MPEG视频的完整流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Asymptote动画制作教程:从PDF动态图形到MPEG视频的完整流程

Asymptote动画制作教程:从PDF动态图形到MPEG视频的完整流程

【免费下载链接】asymptote2D & 3D TeX-Aware Vector Graphics Language项目地址: https://gitcode.com/gh_mirrors/as/asymptote

Asymptote 是一款强大的2D/3D TeX-Aware 矢量图形语言,它的杀手锏之一就是动画制作:无需借助外部视频编辑软件,就能用纯代码把数学图形、物理过程变成 GIF、MPEG/MP4 视频,甚至生成带播放控制条的PDF 动态图形。本教程将带你从零开始,掌握 Asymptote 动画制作的完整流程,并给出从 PDF 动态图形到 MPEG 视频的最快输出方法。

为什么用 Asymptote 做动画?🎬

  • TeX 原生支持:数学公式、标签、排版质量与 LaTeX 完全一致,科学插图首选。
  • 一帧一图,简单直观:每帧就是一张普通图片,循环生成后自动合成。
  • 多格式输出:GIF、PNG、MPEG、MP4、SVG、内嵌 PDF 动画,一个接口全搞定。
  • 无需视频剪辑:全部由代码驱动,可重复、可版本控制。

快速上手:先搞懂核心概念

Asymptote 动画的核心是animation结构体,定义在 base/animation.asy 中。基本流程只有三步:

  1. 画一帧:用save()保存现场,绘制当前画面;
  2. 加入动画:调用a.add()把当前图片加入动画序列;
  3. 合成输出:调用a.movie()把所有帧合并成视频文件。

配合 base/animate.asy 模块,还能生成带播放控件的 PDF 动态图形。

第一步:用a.add()逐帧绘制画面 🖌️

来看官方示例 wheel.asy(车轮滚动动画)的核心结构:

import animation; animation a; // 创建动画对象 for(int i=0; i <= n; ++i) { save(); // 保存当前绘图状态 // ... 在这里绘制本帧的圆、点、坐标轴 ... a.add(); // 把当前画面加入动画 restore(); // 恢复现场,开始画下一帧 } a.movie(BBox(0.25cm), loops=10, delay=250); // 合成 GIF

关键点

  • save()/restore()保证每帧互不干扰;
  • a.add()支持global模式,会自动对所有帧统一缩放,避免画面跳动;
  • BBox()是边框装饰函数,用来给每帧加空白边距。

另一个物理味十足的示例是 wavepacket.asy(波包传播动画),演示了如何在循环中绘制随时间变化的函数曲线,非常适合做波动、振动类教学动画。

第二步:把帧合成 GIF / MPEG 视频(最常用输出方法)📹

所有帧收集完毕后,调用a.movie()即可合成视频。它默认调用 ImageMagick 的magick(旧版为convert)命令完成合并。

输出 MPEG / MP4 视频的三种方法:

方法一:命令行指定输出格式

asy -o wave.mp4 wave.asy

在源码中设置settings.outformat="mp4";同样有效。

方法二:在movie()中指定格式

a.movie(format="mpeg"); // 输出 MPEG 视频 a.movie(format="gif", delay=100); // 输出 GIF,每帧间隔 100ms

方法三:直接调用系统命令animate.asy 还封装了convertanimate函数,可以手动把一帧帧 PNG 合并成视频,灵活性最高。

调节播放速度与循环次数 ⏱️

  • delay=250:每帧停留时间(毫秒),数值越小动画越快;
  • loops=10:GIF 循环次数,0表示无限循环;
  • 全局变量animationdelay默认值为 50ms,可在动画开头统一修改。

第三步:生成带播放控制条的 PDF 动态图形 📄

如果你希望动画能嵌入 LaTeX 文档、在 PDF 阅读器中点击播放,就用animate模块。官方示例 pdfmovie.asy 演示了完整用法:

import animate; settings.tex="pdflatex"; // 必须使用 pdflatex 引擎 animation a; // ... 逐帧绘制 ... label(a.pdf("controls", multipage=false)); // 生成带控制条的 PDF 动画

使用前提

  • 需要安装 LaTeX 的animate.sty宏包(2007/11/30 之后版本);
  • 引擎设为settings.tex="pdflatex"
  • a.pdf()支持controlsautoplayloopanimate.sty选项,按需传入即可。

生成的多页 PDF 可以直接用\includegraphics嵌入文档,或者配合embed/external模块把 MPEG 视频嵌进 PDF(参考 externalmovie.asy)。

进阶:3D 旋转动画与多格式导出 🧊

Asymptote 的动画能力不止于 2D:

  • 3D 动画:在 3D 场景中用save()+add()逐帧旋转视角,然后调用a.glmovie()直接渲染为视频,示例见 glmovie.asy 与 cube.asy;
  • 统一缩放导出a.export()可将所有帧按同一比例输出为多页 PDF 或独立图片,适合后期用其他工具二次合成;
  • 嵌入音视频external模块能嵌入mp4等外部视频文件(参见 embeddedmovie.asy)。

常见问题排查 🔧

问题解决办法
生成 PDF 动画报错确认已安装animate.sty,且引擎为pdflatex
输出 MPEG 失败确认已安装 ImageMagick(支持 MPEG 编码)
动画画面跳动使用global模式(默认开启),统一各帧缩放
帧与帧之间残留图形每帧开头save()、结尾restore()

总结:你的第一条 Asymptote 动画 🚀

回顾完整流程:绘制单帧 →a.add()收集 →a.movie()合成。无论是教学用的 GIF 波动图、科研汇报的 MPEG 视频,还是嵌入论文的 PDF 动态图形,Asymptote 都能用同一种语言优雅完成。所有动画示例都集中在 examples/animations 目录,动手改一改wheel.asy,把滚动的圆换成你自己的函数,几行代码就能收获第一支科学动画!

【免费下载链接】asymptote2D & 3D TeX-Aware Vector Graphics Language项目地址: https://gitcode.com/gh_mirrors/as/asymptote

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/18 16:02:08

FFXIV高延迟双插不再卡手:XivAlexander使用全记录与避坑指南

FFXIV高延迟双插不再卡手&#xff1a;XivAlexander使用全记录与避坑指南 【免费下载链接】XivAlexander Double weave on high latency, and mishmash of modding tools - especially for fonts and internationalization for Final Fantasy XIV. 项目地址: https://gitcode.…

作者头像 李华
网站建设 2026/8/18 15:58:56

企业微信外部群机器人怎么做?官方Webhook不支持主动发消息

很多做私域、做售后的同学&#xff0c;第一反应都是&#xff1a;给群里加个机器人&#xff0c;系统有通知就往群里推。 这个思路没问题&#xff0c;但企业微信官方能力卡在两个地方&#xff1a; 官方「群机器人 / 消息推送」主要给内部群用&#xff0c;客户群&#xff08;外部…

作者头像 李华
网站建设 2026/8/18 15:56:17

MicroReader滑动返回手势教程:3步开启边滑边退的畅快操作

MicroReader滑动返回手势教程&#xff1a;3步开启边滑边退的畅快操作 【免费下载链接】MicroReader 一个小而美的阅读客户端 项目地址: https://gitcode.com/gh_mirrors/mi/MicroReader MicroReader&#xff08;微阅&#xff09;是一款小而美的阅读客户端&#xff0c;聚…

作者头像 李华
网站建设 2026/8/18 15:50:59

2025 年 9 月青少年软编等考 C 语言一级真题解析

目录T1. 三角形面积思路分析T2. 元音字母思路分析T3. 制作咖啡思路分析T4. 闯关得分思路分析T5. 奇数偶数对思路分析T1. 三角形面积 题目链接&#xff1a;SOJ D1416 给定三角形的底和高&#xff0c;求三角形的面积。 三角形的面积计算公式为&#xff1a;面积 底 高 2 22。…

作者头像 李华