HTML 驱动的视频合成——GSAP 动画、TTS 字幕、音频响应、着色器转场
HyperFrames.是一项面向实际任务的技能,主要用于ALHTML是视频的真谛源.;A组成是HTML文件,具有数据*属性的定时,动画的GSAP时程,以及显示的CSS. .;
该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该技能强调把分散的操作要求整理成清晰、可复用的处理流程,使用户能够围绕既定目标快速准备输入、选择执行方式并获得结构化结果。实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;
若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
HTML 是视频的唯一真实来源。一个“合成(composition)”即是一个 HTML 文件,其中通过 data-* 属性定义时间点、使用 GSAP 时间轴实现动画、并借助 CSS 控制视觉样式。HyperFrames 引擎逐帧捕获页面,并利用 FFmpeg 编码为 MP4/WebM 视频。
与 manim-video 互补:对数学/几何类讲解内容(如公式推导、3B1B 风格动画),请使用 manim-video;对动态图形、带字幕的出镜口播、产品导览、社交平台叠加层、着色器转场等一切以真实音视频媒体为驱动的场景,请使用 hyperframes。
请不要在以下场景中使用本能力:
manim-video)meme-generation 或图像模型)npx hyperframes init my-video # 初始化项目结构 cd my-video npx hyperframes lint # 渲染前校验(语法、结构、时序) npx hyperframes preview # 实时重载浏览器预览(端口 3002) npx hyperframes render --output final.mp4 # 渲染为 MP4 视频 npx hyperframes doctor # 诊断环境问题
渲染参数:--quality draft|standard|high · --fps 24|30|60 · --format mp4|webm · --docker(保障可复现性)· --strict。
完整 CLI 参考文档见:references/cli.md。
bash "$(dirname "$(find ~/.hermes/skills -path '*/hyperframes/SKILL.md' 2>/dev/null | head -1)")/scripts/setup.sh"
该脚本执行以下操作:
hyperframes CLI(npm install -g hyperframes@>=0.4.2)。chrome-headless-shell —— 此为必需步骤,确保通过 Chrome 的 HeadlessExperimental.beginFrame 路径获得最佳渲染质量。npx hyperframes doctor 并报告结果。若配置失败,请参阅 references/troubleshooting.md。
动笔编码前,请先从宏观层面明确以下四点:
视觉识别体系关卡(HARD-GATE)。在编写任何合成 HTML 之前,必须明确定义视觉识别体系。禁止使用默认或通用配色(如 #333、#3b82f6、Roboto 等均为跳过此步骤的明显信号)。请按顺序核查:
项目根目录是否存在 DESIGN.md? → 严格采用其中指定的配色、字体、动效规则及“禁止事项”约束。
用户是否指定了风格名称?(例如 “Swiss Pulse”、“暗黑科技风”、“奢侈品牌调性”)→ 生成最小化 DESIGN.md,包含 ## Style Prompt、## Colors(3–5 个带语义角色的十六进制色值)、## Typography(1–2 个字体族)、## What NOT to Do(3–5 条反模式)。
以上均不满足? → 在编写任何 HTML 前,必须回答以下三个问题:
再根据答案生成一份 DESIGN.md。所有合成必须能将其配色与字体溯源至 DESIGN.md 或用户明确指令。
npx hyperframes init my-video --non-interactive
模板选项:blank、warm-grain、play-mode、swiss-grid、vignelli、decision-tree、kinetic-type、product-promo、nyt-graph。可通过 --example 指定模板;也可通过 --video clip.mp4 或 --audio track.mp3 注入初始音视频素材。
请**首先编写英雄帧的静态 HTML+CSS**——暂勿引入 GSAP。容器 .scene-content 必须铺满整个场景(width:100%; height:100%; padding:Npx),并设置 display:flex + gap。使用 padding 向内缩进内容——切勿对内容容器使用 position: absolute; top: Npx(当内容高度超过剩余空间时将导致溢出)。
仅当英雄帧视觉效果确认无误后,再添加 gsap.from() 入场动画(动画目标为当前 CSS 定位)和 gsap.to() 退场动画(动画起点为当前 CSS 定位)。
完整 data-attribute 规范与合成规则详见 references/composition.md。
每个合成必须满足以下要求:
window.__timelines[""] = tl gsap.timeline({ paused: true }) —— 播放由播放器统一控制repeat 值(禁用 repeat: -1,否则将破坏捕获引擎)。推荐计算方式:repeat: Math.ceil(duration / cycleDuration) - 1Math.random()、Date.now() 或依赖系统时钟的逻辑;如需伪随机行为,请使用带种子的 PRNG。async/await、setTimeout 或 Promise。核心 GSAP API(补间、缓动、错落、时间轴)详见 references/gsap.md。
多场景合成必须包含转场。规则如下:
gsap.from(...))。使用 npx hyperframes add 安装着色器转场(如 flash-through-white、liquid-wipe 等)。完整列表请运行:npx hyperframes add --list。
元素(视频需设为 muted playsinline)。npx hyperframes tts "脚本文本" --voice af_nova --output narration.wav。使用 --list 查看可用音色列表。音色 ID 首字母编码语言(a/b=英语,e=西班牙语,f=法语,j=日语,z=中文普通话等)——CLI 会自动推断 phonemizer 区域设置;仅当需覆盖时才显式传入 --lang。非英语语音合成需系统级安装 espeak-ng。npx hyperframes transcribe narration.wav → 输出词级转录文本。根据转录语气选择字幕风格(亢奋型 / 企业型 / 教程型 / 叙事型 / 社交型 —— 对应风格表见 references/features.md)。语言规则:除非已确认音频为英语,否则禁止使用 .en Whisper 模型(.en 模型会对非英语音频进行翻译而非转录)。每组字幕在退出补间结束后,必须有明确的硬性销毁语句:tl.set(el, { opacity: 0, visibility: "hidden" }, group.end);否则字幕组将残留显示于后续组中。for 循环调用 tl.call(draw, [], f / fps) 进行逐帧采样——单个长补间无法响应音频变化。映射关系建议:低频 → scale(脉动)、高频 → textShadow/boxShadow(辉光)、整体振幅 → opacity/y/backgroundColor。避免俗套的均衡器柱状图;让内容决定视觉形式,音频驱动其行为。references/features.md#marker-highlighting。完全支持时间轴寻址,不依赖动画 SVG 滤镜。flash-through-white、liquid-wipe、cross-warp-morph、chromatic-split 等),通过 npx hyperframes add 安装。情绪与能量匹配表详见 references/features.md#transitions。同一合成中禁止混用 CSS 与着色器转场。npx hyperframes lint # 检测缺失的 data-composition-id、轨道重叠、未注册的时间轴 npx hyperframes validate # 在 5 个时间戳点执行 WCAG 对比度审计 npx hyperframes inspect # 视觉布局审查 —— 溢出、出框元素、文字遮挡 npx hyperframes preview # 实时浏览器预览 npx hyperframes render --quality draft --output draft.mp4 # 快速迭代 npx hyperframes render --quality high --output final.mp4 # 最终交付
hyperframes validate 会采样每个文本元素背后的背景像素,并对对比度低于 4.5:1(大号文字为 3:1)的情况发出警告。hyperframes inspect 是布局侧配套工具——在多个时间戳点运行页面,识别静态校验无法发现的问题(例如字幕仅在 4.5 秒时超出安全区域、标题最长变体导致卡片溢出、某元素最终被转场着色器遮盖)。对于含对话气泡、卡片、字幕或精密排版的合成,尤其建议运行 inspect。
请遵循 references/website-to-video.md 中定义的 7 步流程:抓取 → DESIGN.md → SCRIPT.md → 分镜 → 合成 → 渲染 → 交付。
HeadlessExperimental.beginFrame' wasn't found — Chromium 147+ 已移除此协议。请确保使用 hyperframes@>=0.4.2(自动检测并降级至截图模式)。应急方案:export PRODUCER_FORCE_SCREENSHOT=true。详见 hyperframes#294 及 references/troubleshooting.md。chrome-headless-shell) —— 渲染将挂起 120 秒后超时。请运行 npx puppeteer browsers install chrome-headless-shell(setup.sh 已内置此步骤)。hyperframes doctor 将报告实际使用的二进制文件。repeat: -1 —— 将破坏捕获引擎。务必始终计算有限重复次数。gsap.set() —— 页面加载时该元素尚不存在。请改用 tl.set(selector, vars, timePosition),置于时间轴内且时间点 ≥ 该元素的 data-start。
—— 强制换行无法感知渲染字体宽度,易与自然换行叠加造成双倍换行。应使用 max-width 让文本自主换行。例外:短标题需刻意逐字分行时可使用。visibility 或 display 执行动画 —— GSAP 无法补间这两项属性。请改用 autoAlpha(同时处理可见性与透明度)。video.play() 或 audio.play() —— 框架全权管理播放。请勿自行调用。window.__timelines。时间轴构造过程严禁包裹在 async、setTimeout 或 Promise 中。index.html 包裹在 内 —— 此举会使全部内容对浏览器不可见。仅通过 data-composition-src 加载的子合成才可使用 。 + 独立 。渲染前后均需完成以下检查:
npx hyperframes lint --strict && npx hyperframes validate && npx hyperframes inspect(lint 检测结构问题,validate 检测对比度,inspect 检测视觉布局/溢出问题 —— 若出现警告,请查阅 troubleshooting.md)。npx hyperframes init 会将技能脚本复制到项目中,因此路径为项目本地:node skills/hyperframes/scripts/animation-map.mjs输出单一--out /.hyperframes/anim-map
animation-map.json,包含每条补间的摘要、ASCII 格甘特图、错落检测、空闲区(>1 秒无动画)、元素生命周期,以及各类标记(offscreen、collision、invisible、paced-fast <0.2s、paced-slow >2s)。请通读摘要与标记——逐一修复或说明原因。小范围编辑可跳过此步。ls -lh final.mp4。data-duration: ffprobe -v error -show_entries format=duration -of default=nw=1:nk=1 final.mp4。ffmpeg -i final.mp4 -ss 00:00:05 -vframes 1 preview.png。ffprobe -v error -show_streams -select_streams a -of default=nw=1:nk=1 final.mp4 | head -1。若 hyperframes render 失败,请运行 npx hyperframes doctor 并在提交问题时附上其输出。
相关专题
热门下载
相关下载
精品课程
共0课时 | 0人学习
共29课时 | 2.3万人学习
共29课时 | 2.5万人学习
最新文章