news 2026/8/24 2:37:28

CCapture.js 使用指南:如何把 Canvas 动画导出成视频

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CCapture.js 使用指南:如何把 Canvas 动画导出成视频

CCapture.js 使用指南:如何把 Canvas 动画导出成视频

【免费下载链接】ccapture.jsA library to capture canvas-based animations at a fixed framerate项目地址: https://gitcode.com/gh_mirrors/cc/ccapture.js

如果你用 Canvas 或 WebGL 写动画,想把它导出成视频,CCapture.js 会按固定帧率(默认 60fps)录制。单帧渲染哪怕要几秒,成片的时间轴依然一致,支持 WebM、GIF 和图片序列输出。

一、它能帮你做什么

  • 录制 3D 游戏或 Web 演示的宣传片,画质和粒子数随便拉高
  • 把数据可视化动效导出成视频,放进汇报或文章
  • 将 Canvas 艺术创作转成 GIF,方便在网络分享
  • 高分辨率渲染逐帧图,交给后期软件处理

二、3 步跑通第一个 Demo

先拿到代码,npm 安装或直接 clone 仓库:

npm install ccapture.js # 或 git clone https://gitcode.com/gh_mirrors/cc/ccapture.js

第 1 步:把核心脚本引到页面。除了主文件,还要带上目标格式对应的编码器和下载辅助脚本,这里选 WebM。

<script src="src/CCapture.js"></script> <script src="src/webm-writer-0.2.0.js"></script> <script src="src/download.js"></script>

第 2 步:创建录制器并启动,之后页面里的计时 API 会被接管。

var rec = new CCapture({ format: 'webm' }); rec.start();

第 3 步:在渲染循环里把当前帧交给编码器,录完后停止并保存。

function draw() { requestAnimationFrame(draw); // render your animation here rec.capture(canvas); } draw(); rec.stop(); rec.save(); // triggers the download

三、工作原理速览

核心手法是"换掉时钟"。start()之后,CCapture.js 会把Date.now()setTimeoutsetIntervalrequestAnimationFrameperformance.now以及音视频currentTime这些时间来源替换成虚拟时间,每处理完一帧就推进固定的1000/framerate毫秒,再重新执行动画排队的 rAF 回调。动画以为自己在完美的帧率环境里跑,实际渲染慢多少都不影响成片节奏。

编码侧按格式各用一个编码器,都挂在统一的CCFrameEncoder接口下:WebM 走 WebMWriter 压缩,GIF 交给 gif.js 的 Web Worker 编码,PNG/JPG 则用 tar.js 把帧图打包成 .tar 文件,最后由 download.js 触发浏览器下载。

四、常用参数速查表

参数类型默认值作用
frameratenumber60录制的目标帧率
formatstring输出格式:webm / gif / png / jpg / ffmpegserver
qualitynumber80webm、jpg 的压缩质量(0~100)
timeLimitnumber0到达 n 秒后自动停止并导出
autoSaveTimenumber0每 n 秒自动分段下载,防止内存撑爆
workersPathstringgif 格式所需的 worker 脚本路径

五、踩坑与调优

Q:为什么录出来的动画节奏不对?结论:动画必须按时间差推进,而不是每帧加固定值。把x += v改成x += v * dt,时间钩子才能生效。

Q:长时间录制内存暴涨怎么办?结论:设置autoSaveTime(4K 建议 10~30 秒)分段下载并释放内存,单个分段文件控制在 1GB 以内。

Q:为什么 WebM 导不出来?结论:WebM 编码器依赖 WebP 支持,目前基本只有 Chrome 可用,换gif或 png 序列即可绕过。

六、从 Demo 到生产

  • 运动模糊framerate: 240高帧率录制后在后期抽帧,或直接设motionBlurFrames让库对中间帧超采样模糊。
  • 无人值守长录timeLimit: 3600autoSaveTime: 15,录满自动导出分段。
  • 慢动作:以 120fps 录制、按 30fps 导出,直接得到 4 倍慢放素材。

七、相关资源

  • 核心录制逻辑
  • GIF 编码器源码
  • WebM 编码器源码
  • 示例项目

下一步:先用 examples/ 里的 webm 流程跑一遍,再把你动画里的 canvas 接进 capture 调用。

【免费下载链接】ccapture.jsA library to capture canvas-based animations at a fixed framerate项目地址: https://gitcode.com/gh_mirrors/cc/ccapture.js

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

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

基于LLM智能体的电影角色性别表征量化分析:从剧本解析到数据洞察

1. 项目缘起&#xff1a;当大模型成为“阅片无数”的影评人最近在折腾一个挺有意思的项目&#xff0c;起因是看到一篇关于电影角色性别刻板印象的讨论。大家常聊“电影里女性角色是不是总在等待被拯救”、“男性角色是不是总在主导叙事”&#xff0c;但这些讨论往往基于印象&am…

作者头像 李华
网站建设 2026/8/24 2:36:44

Plane 时间跟踪快速上手完整指南

Plane 时间跟踪快速上手完整指南 【免费下载链接】plane &#x1f525;&#x1f525;&#x1f525; Open-source Jira, Linear, Monday, and ClickUp alternative. Plane is a modern project management platform to manage tasks, sprints, docs, and triage. 项目地址: ht…

作者头像 李华
网站建设 2026/8/24 2:35:33

如何给开源软件提交第一个翻译?本地化贡献完整指南

如何给开源软件提交第一个翻译&#xff1f;本地化贡献完整指南 【免费下载链接】BambuStudio PC Software for BambuLab and other 3D printers 项目地址: https://gitcode.com/GitHub_Trending/ba/BambuStudio 写给从没做过翻译贡献的你&#xff1a;跟着三个真实任务—…

作者头像 李华