以下是使用命令行将 Chrome 浏览器打开的网页动画录制成 PNG 图片序列 的完整方案,包含 Puppeteer 自动化脚本和 FFmpeg 屏幕录制两种方法:
方法一:使用 Puppeteer CLI(推荐)
1. 安装 Puppeteer(需 Node.js 环境)
npm init -y npm install puppeteer
2. 创建截图脚本 capture.js
const puppeteer = require('puppeteer'); const fs = require('fs'); const path = require('path'); (async () => { const browser = await puppeteer.launch({ headless: false, defaultViewport: null, args: ['--window-size=1080,1920'] }); const page = await browser.newPage(); await page.goto('https://your-animation-url.com'); // 替换为你的网页地址 // 等待动画加载(根据实际情况调整) await page.waitForTimeout(2000); const totalFrames = 60; const frameInterval = 100; // 每帧间隔时间(毫秒) for (let i = 0; i < totalFrames; i++) { const framePath = path.join(__dirname, 'frames', `frame_${String(i).padStart(4, '0')}.png`); await page.screenshot({ path: framePath, fullPage: false }); console.log(`Captured frame ${i + 1}/${totalFrames}`); await page.waitForTimeout(frameInterval); } await browser.close(); })();
3. 运行脚本
node capture.js
方法二:使用 Chrome 命令行 + DevTools 协议(进阶)
1. 启动带远程调试的 Chrome
chrome.exe --remote-debugging-port=9222 --window-size=1080,1920
2. 使用 chrome-remote-interface 工具
npm install chrome-remote-interface
3. 创建 devtools.js 脚本
const CDP = require('chrome-remote-interface'); const fs = require('fs'); const path = require('path'); (async () => { const client = await CDP(); const {Page, Emulation, DOM} = client; // 创建输出目录 const outputDir = path.resolve(__dirname, 'frames'); if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir); await Page.enable(); await Emulation.setDeviceMetricsOverride({ width: 1080, height: 1920, deviceScaleFactor: 1, mobile: true }); await Page.navigate({url: 'https://your-animation-url.com'}); await new Promise(resolve => setTimeout(resolve, 3000)); // 等待加载 for (let i = 0; i < 60; i++) { const screenshot = await Page.captureScreenshot({format: 'png'}); fs.writeFileSync(path.join(outputDir, `frame_${String(i).padStart(4, '0')}.png`), Buffer.from(screenshot.data, 'base64')); console.log(`Frame ${i + 1} captured`); await new Promise(resolve => setTimeout(resolve, 100)); // 每秒10帧 } await client.close(); })();
4. 运行脚本
node devtools.js
方法三:Chrome 原生命令行(仅首帧)
chrome.exe --headless --disable-gpu --window-size=1080,1920 --screenshot=frames/frame https://your-animation-url.com
限制:仅能捕获页面首帧,无法录制动画序列。
后续处理:使用 FFmpeg 合成视频
ffmpeg -framerate 30 -i frames/frame_%04d.png \ -c:v libx264 -pix_fmt yuv420p \ -r 30 \ output_video.mp4
网友回复
腾讯混元模型广场里都是混元模型的垂直小模型,如何api调用?
为啥所有的照片分辨率提升工具都会修改照片上的图案细节?
js如何在浏览器中将webm视频的声音分离为单独音频?
微信小程序如何播放第三方域名url的mp4视频?
ai多模态大模型能实时识别视频中的手语为文字吗?
如何远程调试别人的chrome浏览器获取调试信息?
为啥js打开新网页window.open设置窗口宽高无效?
浏览器中js的navigator.mediaDevices.getDisplayMedia屏幕录像无法录制SpeechSynthesisUtterance产生的说话声音?
js中mediaRecorder如何录制window.speechSynthesis声音音频并下载?
python如何直接获取抖音短视频的音频文件url?