Communitygithub.com

制作页面演示视频

用于为发布帖子、LinkedIn更新或团队审查制作页面真实动画的短视频——或者当滚动页面的屏幕录制卡顿、时间不对、显示不必要的内容,或在静音信息流中无法正常播放时使用。

制作页面演示视频 是什么?

此技能指导如何从真实运行的页面动画中捕获高质量短视频,适用于发布宣传、团队审查等场景。其核心原则是记录真实动画而非重新创建,并通过测量而非感觉进行编辑。支持Chrome CDP screencast录制(以JPEG格式每秒约60帧),提供scroll-driven页面的精确滚动控制,并包含分析工具(`video/analyze.py`)来识别死区和冻结帧。最终输出为标记了BT.709色彩空间的1080p H.264视频,以确保跨平台兼容性。技能详细说明了录制前决策(版本、格式、长度、禁用内容)、分步工作流程(录制、测量、筛选、编码、QA)以及需要避免的常见问题(如截图逐帧捕获、未发布页面、半成品内容等)。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/igal-commits/landing-page-skills/tree/HEAD/skills/making-a-page-reel

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

制作页面演示视频 是做什么的?

概述

页面本身已包含你能获得的最佳素材:它自己的实时运动动画。 工作在于忠实地捕获它,选择贯穿其中的路径,并验证结果。

核心原则:录制真实动画,切勿重新创建,并通过测量而非感觉进行编辑。

页面的录制就是一次导览。请明确说明。品牌影片是另一项工作:一个设计好的、带有故事板的动画电影。此技能适用于“我们构建的页面看起来和动起来是什么样子”。

录制前决策

  • 视频要证明什么。 一句话。例如:“新页面自行构建并按设计滚动”。
  • 哪个版本。 录制真实存在并已发布到审查环境的版本。绝不录制尚未发布的版本(未公布的产品页面、草稿),也绝不录制仍在修改中的原型。录制预演环境,而非本地构建版。
  • 格式。 16:9 的 1920x1080 是原生桌面捕获且最安全。不要捏造团队未经 QA 过的竖屏布局。
  • 时长。 简短。15 到 20 秒可展示整个页面的能力。5 秒可展示一个动作。确定视频需要哪一种。
  • 禁止出现的内容。 客户标志、带姓名的引用语、第三方标记、占位符文本、损坏的图片、未经公布的声明。现在就列出这些内容。
  • 分辨率。 在 1080p 下审查。在剪辑获得批准前,不要渲染 4K 母版。

步骤 1:录制真实动画

使用 Chrome 的 CDP screencast,而非逐帧截图。基于滚动值驱动的 GSAP、平滑滚动、canvas 轨迹和定时入场动画都依赖墙上时钟运行。逐帧步进会改变运动效果。

Page.startScreencast  format jpeg, quality 100, maxWidth = viewport width, everyNthFrame 1

在 Apple Silicon 笔记本电脑上,这大约能提供每秒 60 帧(中位间隔 16.7 毫秒)。

  • 加载时入场动画:先启动 screencast,然后重新加载页面,以便将入场动画包含在录制中。在重新加载前修剪掉之前的帧。
  • 滚动:通过关键帧 [秒数, 位置] 驱动滚动。将位置通过单调三次样条(无过冲,保持平直)传递,并使用平滑滚动库的 scrollTo(y, { immediate: true, force: true }) 应用每个值,使页面自身的滚动和动画处理与读者体验完全一致。切勿手动动画化页面的元素。
  • 隐藏而非移除:visibility: hidden 应用于标志和引用语,可保持固定布局的完整性。display: none 会导致布局偏移。
  • 时钟:在页面内部获取开始时间(performance.timeOrigin + performance.now()),以便滚动关键帧和 screencast 时间戳共享同一时钟。
  • 重采样为恒定帧率:输出帧 k 显示在 k / fps 时刻或之前的最新 screencast 帧。

此仓库中的 video/capture.mjs 可通过一个简单的 JSON 计划完成所有这些操作。

步骤 2:通过测量选择路径

凭感觉选择的滚动路径会留下死区(鼠标滚动但屏幕无变化的区域)。找到它们:

  1. 对整个范围进行一次缓慢、稳定的扫描录制。
  2. 在其上运行 video/analyze.py。它会报告冻结运行(相同帧)和最大的帧间变化。
  3. 将冻结运行映射回滚动位置。这些就是死区:快速穿过它们。
  4. 给那些由滚动值驱动的场景(如圆圈变大、卡片构建、计数器计数)分配缓慢、可读的段落。这些场景跟随滚动,因此等待不会完成它们。
  5. 基于时间的动画在越过阈值时开始,需要真实时间完成。在最后一个动画完成前不要结束剪辑。

然后用调整后的路径录制真实镜头,并再次运行 analyze.py。固定场景内短暂的冻结运行是停留,可以接受。但闪烁过程中 0.4 秒的冻结则不行。

检查录制本身的健康状况:你将使用的片段中,screencast 帧之间的最大间隔应低于约 40 毫秒。更大的间隔表示卡顿,需重新录制。

步骤 3:挑选已完成素材

在确定剪辑内容前,每 0.5 到 1 秒查看一次联系人表。拒绝以下内容:

  • 空卡片、损坏的图片、显示图片区域但只有替代文本的内容
  • CMS 列表中的占位符文案
  • 页面绘制时为空白的第一秒;修剪到标题开始出现的位置
  • “禁止出现列表中”的任何内容

如果某个部分未完成,将其排除并通知负责人。包含破损卡片的视频相当于公开的 bug 报告。

步骤 4:编码并标记色彩空间

./encode.sh <framesDir> out.mp4 <firstFrame> <frameCount> 60

screencast 帧是全范围的 BT.601 JPEG。编码将其转换为有限范围的 BT.709 并标记流,以便播放器无需猜测:

scale=in_range=full:in_color_matrix=bt601:out_range=tv:out_color_matrix=bt709,format=yuv420p
libx264 -crf 14 -preset slow -x264-params colorprim=bt709:transfer=bt709:colormatrix=bt709:fullrange=off
-movflags +faststart

yuv420p 和 +faststart 使其在任意平台都能播放并立即开始。通过解码几帧并与源图像逐像素比较来验证结果。不要比较通道平均值:对几百万个 float32 值求平均会产生足够误差,从而虚构出不存在的色偏。每个通道约 3 个级别之差是可以接受的。

步骤 5:QA 视频

  • 从文件中读取时长、帧率、尺寸和色彩标记
  • 每秒钟抽查一帧画面,并以正常速度查看过渡效果
  • 任何帧中均无标志、姓名、占位符、横幅或损坏图片(不仅仅是选定的帧)
  • 无 Cookie 横幅或同意窗口,并且未曾点击过它们:通过页面自身的 CSS 隐藏它们,或录制不显示它们的环境
  • 第一帧是关键。如果页面绘制时为空白,则修剪掉
  • 选择一个页面完整且静止的海报帧(非滚动中)

然后运行 reviewing-page-design 中的冷门 Reviewer 门控检查。

步骤 6:说明你无法验证的内容

声音(若有):“我听不到声音”。平台自身的重新压缩。任何在未测试设备上显示的内容。

当需要设计好的演示视频时

将页面素材组合到每一个视觉元素都作为时间函数(封闭形式的弹簧动画,每次一个叠加概念,两到五个字的字幕,品牌色仅用于名称和结束卡片)的布局中。应用相同规则:页面窗口绝不被遮挡,文本在 360 像素宽度下可读,结尾画面至少停留 1.2 秒。

警示标志

  • 对滚动驱动页面使用逐帧截图捕获
  • 录制仍在修改中的原型,或未发布的页面
  • 包含未完成部分的演示视频
  • 画面中出现客户标志或带姓名引用语
  • 凭感觉选择的滚动路径,且没有后台扫描数据
  • 通过通道平均值比较颜色
  • 在剪辑批准前渲染 4K

Individual skills in this repo

This repo contains 5 individual skills — each has its own dedicated page.

相关技能