Chrome DevTools captureScreenshot 是最稳的网页视频生成起点,需显式设置设备指标、指定媒体类型、正确使用 FFmpeg 参数并配置 Chromium 启动参数。
Chrome DevTools 的
是最稳的起点
直接用浏览器自动化生成视频,不是靠“录屏软件截网页”,而是让 Chrome 自己吐出帧——这是目前最可控、兼容性最好、且不依赖第三方渲染黑盒的方式。
常见错误现象:
页面能截,但带 WebGL 或 iframe 的页面截图空白;或截图尺寸和 viewport 不一致。
必须先用
显式设置宽高与缩放,否则截图按默认 800×600,且可能忽略
meta
返回的是 base64,别直接写进 HTML;解码后存为
,再用 FFmpeg 合成视频
若页面有动画/定时器,需在截图前用
注入
控制节奏,否则帧率飘忽
用 Puppeteer 脚本批量截图时,
很关键
很多页面 CSS 里写了
或
,不显式指定媒体类型,Puppeteer 默认用
,导致样式错乱、字体消失、Flex 布局塌陷。
使用场景:生成产品页动图、报表快照、邮件模板预览视频。
立即学习
“
前端免费学习笔记(深入)
”;
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
截图前务必调用
,哪怕你没改过 CSS 媒体查询
在长页面中会自动滚动拼接,但 JS 动画/粘性定位(
)可能错位,建议改用
分区域截图
截图延迟别用
,改用
等待某个 DOM 节点就绪,比如
FFmpeg 合成视频时,
和
别混用
这是合成视频失败最隐蔽的原因:输入帧率(
)控制读图速度,输出帧率(
)控制编码节奏。两者不一致,视频会加速、卡顿或音画不同步(虽然这里没音频,但时间轴照样崩)。
性能影响:用
编码比
快 3–5 倍,但体积大 20%;若目标是微信/钉钉内嵌,优先选
,否则 iOS 播放器直接拒播。
正确命令示例:
如果截图命名不是连续数字(比如含时间戳),别硬凑
,先用 shell 脚本重命名,或改用
加
参数避免交互阻塞;加
可快速定位哪一帧 PNG 损坏(常因截图超时导致空文件)
遇到
或白屏,先查
和
不是所有服务器都装了完整图形栈,Docker 容器、CI 环境、无头 CentOS 里,Chrome 启动失败往往不报错,只静默退出,结果 Puppeteer 报
。
兼容性影响:新版 Chromium 对
越来越敏感,但 CI 环境不用它根本起不来;
在 headless 下其实已默认启用,但某些旧版驱动仍需显式声明。
启动参数必加:
别信文档说 “
更快” —— 目前(Chromium 120+)它对 SVG 渲染、
动画支持仍有 bug,老老实实用
若用 Docker,基础镜像别选
,缺字体、缺共享内存,换
或官方
事情说清了就结束。真正难的不是“怎么转”,而是每一步里都有一个看似无关的开关,关着开着,结果天差地别。
captureScreenshotchrome://dinoEmulation.setDeviceMetricsOverrideviewportPage.captureScreenshot.pngPage.addScriptToEvaluateOnNewDocumentrequestAnimationFramepage.emulateMediaType('screen')@media print@media speechprintpage.emulateMediaType('screen')page.screenshot({ fullPage: true })position: sticky{ clip: { x, y, width, height } }setTimeoutpage.waitForFunction() => document.querySelector('#chart canvas')-framerate-r-framerate-rlibx264libvpx-vp9-pix_fmt yuv420pffmpeg -framerate 10 -i frame_%05d.png -c:v libx264 -r 10 -pix_fmt yuv420p out.mp4%05d-pattern_type glob-y-v errorERR_CONNECTION_REFUSED--no-sandbox--disable-gpuBrowser closed unexpectedly--no-sandbox--disable-gpu--no-sandbox --disable-dev-shm-usage --disable-gpu --single-process--headless=newtransform--headless=chromenode:alpinenode:18-slimpuppeteer:latest