news 2026/8/24 3:12:03

Canvas 动画录制成高清视频完整指南:CCapture.js 快速上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Canvas 动画录制成高清视频完整指南:CCapture.js 快速上手

Canvas 动画录制成高清视频完整指南:CCapture.js 快速上手

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

如果你用 Canvas 写了一个粒子动画,想把它录成高清视频,直接开系统录屏往往只得到一顿一顿的画面——分辨率越高,掉帧越狠。CCapture.js 做的事情是:按固定帧率捕获 Canvas 动画。它把"录制"和"实时"解耦了,哪怕某一帧渲染要好几秒,最后拼出来的视频依然是稳稳的 30 或 60 fps。

为什么录屏满足不了你?

先说下你会在什么情况下需要它:

  • 想导出 4K 视频,但显卡撑不住这个分辨率的实时帧率;
  • 想从 10 万粒子直接怼到 1000 万;
  • 想把所有画质设置拉到最高再录。

实时录屏在这几种场景下都只能得到卡顿视频。CCapture.js 的思路是"暂停时钟":它接管了Date.nowsetTimeoutrequestAnimationFrameperformance.now这些取时间的方法,让它们表现得像"每帧经过的时间恒定",恒定量由你指定的帧率决定。所以渲染再慢,视频也照样丝滑,甚至能录 240fps 再去后期软件里做运动模糊。

有一个前提要注意:你的动画必须按"经过时间"推进,而不是每帧加固定值。也就是说位移、旋转要用 deltaTime 去算。如果你本来就用requestAnimationFrame加时间差写循环,那基本零成本满足。

最快安装方法

装好只需要一步。两种方式任选:

npm install ccapture.js

不想用 npm?直接在 HTML 里引<script>标签也行:主文件是src/CCapture.js,按你要导出的格式追加对应编码器即可——webm-writer-0.2.0.js管 WebM,gif.js管 GIF,tar.js管 PNG/JPEG 序列,download.js让下载更省心。也可以直接引全量打包版CCapture.all.min.js,一个标签搞定,或者用 bower 安装同名包。

最小示例:4 行核心代码跑通录制

流程是固定的四步:建对象 →start()→ 每帧capture(canvas)stop()+save()

var capturer = new CCapture({ format: 'webm', framerate: 30 }); capturer.start(); function render() { requestAnimationFrame(render); // 这里绘制你的动画 capturer.capture(canvas); } render();

动画播完后调用capturer.stop(),再capturer.save(),浏览器就会自动下载一个{文件名}.webmsave()也可以传回调,拿到 blob 自己处理。另外save()不要求先stop()——随时调用,都会把"到这一刻为止"的帧打包下载,方便随时预览。

参数速查:按需求选格式和画质

构造器参数决定一切,最常用的几个:

参数作用
formatwebm/gif/png/jpg/ffmpegserver,视频选 webm,短动画选 gif,要逐帧素材选 png/jpg(打成 TAR 包)
framerate目标帧率,默认 60
qualitywebm / jpg 的编码质量
name导出文件名,不传就随机 GUID
motionBlurFrames超采样帧数做运动模糊,0 或 1 无效
timeLimit录到指定秒数自动停并下载,长任务"设好就去睡觉"
autoSaveTime每 n 秒自动分段下载一次(仅 webm/png/jpg)
startTime从第几秒开始录
workersPathGIF 必须指定,指向gif.worker.js所在目录
verbose/display控制台打日志 / 页面加个信息小挂件

避坑指南:这些细节决定录制成败

⚠️start()之后时间 API 就不是"原来的味道"了setTimeoutrequestAnimationFrame会按固定时间步长走,所以务必确保动画循环在 start 之前已经跑起来,否则动画直接卡死。

  • WebM 基本是 Chrome 专属:底层 WebM Writer 依赖 webp 支持,其他浏览器目前指望不上,跨浏览器需求建议走 PNG 序列。
  • GIF 别贪多:gif.js 编码帧数多时性能有限,长动画优先 webm。
  • 长录制记得autoSaveTime:各浏览器对大内存块和大下载(比如超 1GB)各有脾气,分段能救命。4K 捕获建议每段 10~30 秒,文件名会是{name}-part-xxxxx,TAR 里的图片自带连续序号。
  • 内存不降反升:个别浏览器不回收攒下的帧。Chrome 可以用--js-flags="--expose-gc"启动,CCapture 会每帧手动gc(),内存曲线立刻平稳。

和 Three.js、Pixi.js、WebGL 怎么配合

它捕获的对象只是一个 canvas,所以上层引擎随便换:

  • Three.js:项目自带一个 Three.js 做的 3D 生命游戏 demo(examples/basic/),在 render 结尾把renderer.domElement传给capture()就能录 3D 动画;
  • Pixi.js:同样把渲染器的 canvas 丢给capture(),适合录 2D 游戏和动画;
  • 原生 WebGL:WebGL canvas 本质还是 canvas,捕获方式完全一致,复杂着色器动画通吃。

常见疑问

  • 为什么不直接录屏?录屏受限于实时帧率,录不了 4K + 高粒子;CCapture.js 是离线逐帧编码,帧率和画质互不拖累。
  • 能做慢动作/快动作吗?能,改framerate就行:低帧率录、正常播是快进;高帧率录(比如 120/240fps)放常规播放器就是慢动作。
  • PNG/JPG 导出来是视频吗?不是,是装逐帧图片的 TAR 包,适合丢给离线合成软件当素材。
  • GIF 报错?九成是忘了配workersPath

一句话总结:动画跑得动、但录不下来高清视频的场合,给它挂上 CCapture.js,逐帧慢慢画,视频照样流畅。

【免费下载链接】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 3:12:02

还在手动换 Linux 壁纸?3 步把壁纸交给 Variety 自动轮播

还在手动换 Linux 壁纸&#xff1f;3 步把壁纸交给 Variety 自动轮播 【免费下载链接】variety Wallpaper downloader and manager for Linux systems 项目地址: https://gitcode.com/gh_mirrors/var/variety 你有没有这种经历&#xff1a;桌面壁纸用了半年没动过&#…

作者头像 李华
网站建设 2026/8/24 3:09:55

Lyra 2.0:基于扩散模型与SDS构建可探索生成式3D世界

最近在探索生成式AI与3D内容创作结合的前沿领域时&#xff0c;发现了一个极具潜力的研究方向&#xff1a;如何让AI不仅生成静态的3D模型&#xff0c;还能创造出可交互、可探索的动态虚拟世界。这正是Lyra 2.0项目所致力于解决的核心问题。作为一篇发表于arXiv 2026的预印本论文…

作者头像 李华
网站建设 2026/8/24 3:08:45

基于python的购物中心流量分析系统的设计与实现毕业设计项目源码

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/8/24 3:08:38

使用Oh My Subagents框架构建本地多智能体AI团队:从原理到实践

在实际 AI 应用开发中&#xff0c;构建一个能够协同工作的智能体&#xff08;Agent&#xff09;团队正成为解决复杂任务的关键模式。单个智能体往往能力有限&#xff0c;而将多个具备不同专长的智能体组织起来&#xff0c;通过分工协作来处理一个流程&#xff0c;可以显著提升系…

作者头像 李华
网站建设 2026/8/24 3:06:14

重庆口碑好的会议系统制造商中,哪家在专业度上表现出色呢?

在重庆口碑好的会议系统制造商中&#xff0c;重庆优沃科技在专业度上表现较为出色。下面从几个方面为你详细分析&#xff1a;产品体系重庆优沃科技拥有成熟的双渠道产品体系。一方面&#xff0c;公司拥有自主音响品牌XULA迅莱&#xff0c;该品牌兼顾了性价比与品质&#xff0c;…

作者头像 李华
网站建设 2026/8/24 3:05:06

宝塔面板从入门到精通:可视化服务器运维与LNMP环境部署实战

1. 项目概述&#xff1a;为什么我们需要宝塔面板&#xff1f;如果你刚接触服务器运维&#xff0c;或者是一名开发者&#xff0c;面对黑漆漆的命令行终端&#xff0c;要手动安装Nginx、MySQL、PHP&#xff0c;再配置防火墙、SSL证书&#xff0c;整个过程就像在迷宫里摸黑前进&am…

作者头像 李华