Communitygithub.com

视频添加内容卡片

在已理解的视频项目中,创建基于时间戳的标题、下部三分之一、统计数据、对比、列表、引用、章节卡片或行动呼吁,这些内容被制作为 HyperFrames HTML 图形。

视频添加内容卡片 是什么?

此技能(video-add-content-cards)针对已分析过的视频项目,将经过验证的语义时刻转化为一套连贯的 HyperFrames 图形叠加层。它依赖于 `video-understand` 技能提供的已验证语义证据和时间线,并严格遵守这些来源,而不会重新转录或分析视频内容。该技能支持多个平台(包括 Claude Code 和 Cursor),并具备完整的依赖检查,确保已安装 ffmpeg、Python 和 Node.js >= 22。其核心工作流程包括:在交互式采访中确定主题和卡片类型,基于共享理解草拟卡片计划,然后进行详细编辑选择以优化副本、布局(如指标聚焦、并排列)和位置。它通过生成一个基于浏览器的审查页面来促进用户审核,用户可以在该页面选择卡片、编辑文本、选择视觉处理方案,并验证排除区域(如人脸和字幕位置)。最后,该技能会生成一个包含 HTML 和透明叠加视频的单一 HyperFrames 合成产物,并支持通过多种示例模板(如 almanac、teal 和 air 主题)确保视觉一致性。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/WhiteTowerAI/cut-as-code/tree/main/skills/video-add-content-cards

在你喜欢的 AI 中提问

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

文档

视频添加内容卡片 是做什么的?

将已批准的语义时刻转化为一个连贯的 HyperFrames 图形叠加层。使用共享的证据和规范时间线;不要在此技能内重新转录或重新分析源内容。

依赖项

/video-understand 是前置技能。请先运行它,以便卡片使用经过验证的语义证据和规范时间线。 在开始之前,请确认它已安装。如果没有安装,请警告用户缺少此前置依赖项,并在处理媒体之前停止。

需要 ffmpeg 在 PATH 环境变量中,以及 Python 和 Node.js >= 22(用于按需获取的 npx hyperframes)。hyperframes render/snapshot 驱动一个无头 Chrome——它管理自己的 chrome-headless-shell,并在缓存的版本不可用时回退到系统 Chrome(设置 CHROME 可覆盖)。在处理媒体之前请检查这些。

输入

  • work/project.json:操作修订和依赖项
  • work/understand/understanding.json:已审查的语义时刻和证据
  • work/timeline.json:源到节目的映射,如果没有剪辑,则为恒等时间线
  • 可选的已选调色修订,当对比度或调色板需要针对该外观进行判断时

如果没有剪辑或调色,该技能仍然有效。当字幕激活时,请先运行它们,依赖于它们当前的修订,并将其占用的区域视为硬排除区域。内容卡片必须在图形运动之前添加,当两者都激活时。这些相对规则适用于每个选择的配对。仅声明实际使用的依赖项,并将其当前修订记录在 based_on 中。

在整个卡片提示期间(包括进入和退出),将每个主要或前景人物、说话者、演示者、受访者或语义重要人物的可见面部和头部轮廓视为硬排除区域。偶然的背景人物(不是叙事或视觉焦点)可以豁免;对于不确定的情况应予以保护。如果卡片与受保护的面部或头部相交,请先重新定位,然后缩放或重新设计。当没有符合要求的位置时,跳过该卡片。

工作文件

work/content-cards/cards-plan.json          # 持久的编辑计划
work/cache/content-cards/index.html         # 代码即编辑的组合
work/cache/content-cards-overlay.mov        # 透明渲染贡献
review/03-content-cards/card-stills/        # 每个卡片一个有用的静态帧
review/03-content-cards/content-cards-preview.mp4  # 可选的短提示窗口
review/03-content-cards/content-cards-summary.md
review/03-content-cards/content-cards-review.html  # 本地候选审查板
review/03-content-cards/content-cards-review-assets/  # 每个候选一个源帧
review/03-content-cards/content-cards-review.json  # 经过验证的人工选择

可重复使用的审查页面已提交至 skills/video-add-content-cards/assets/content-cards-review.html。 填充的 HTML、屏幕截图、叠加层和预览渲染都是可重现的。 将计划保留在 cache/ 之外。它必须包含每个可见字符串、时间、位置、 视觉处理值、渲染器组合路径、渲染器资源路径以及源 FPS,这些是删除 work/cache/ 后重新生成可丢弃的 HTML 和 Alpha 资源所必需的。记录一个计划级别的 renderer_recipe,其中包含源示例/模板、组合输出路径、渲染引擎以及每个本地运行时资源的输出路径、确切版本、来源和 SHA-256。不包含持久配方的缓存 HTML 文件或下载的脚本不满足重新生成要求。

工作流程

1. 起草前访谈

首先阅读 understanding.json 和活动时间线。统计符合条件的图形时刻数量,并在访谈前计算建议的卡片数量:

min(符合条件的时刻数, max(1, round(节目分钟数 / 0.75)))

这是一个目标值,不是自动截断规则。在提出任何问题之前,请首先使用当前操作系统的原生命令亲自打开真实的动画示例。仅运行一个命令:

# Windows PowerShell
Start-Process (Resolve-Path 'skills/video-add-content-cards/examples/gallery-animated.html')
# macOS
open skills/video-add-content-cards/examples/gallery-animated.html

# Linux 桌面
xdg-open skills/video-add-content-cards/examples/gallery-animated.html

如果命令失败,请诊断并重试。不要用 URI 替代此操作,或要求用户找到并点击该文件。画廊比较了所有六个主题,并可以使用其原生选择器聚焦一列:

主题起始字符
almanac暖奶油色,衬线体,深思熟虑
teal深色广播风格,青色点缀
editorial纪录片风格,墨色和琥珀色
dotgrid像素单体,技术风
apex高能量运动风,红色点缀
air透明 Lexend 排版,无底板或遮罩

每次只问一个问题,按此顺序:

  1. 此编辑应使用哪个主题?
  2. 此编辑应使用多少目标卡片数?提供计算出的建议值作为默认值。
  3. 必须包含哪些卡片类型?提供 intro、key-quote、stat、list 和 outro;默认为无。

提问后 + 停止。在第三个答案之后,总结主题、目标数量、必需类型以及用户提供的任何备注;请求确认。如果用户取消,则保留分析结果,将操作状态设为 draft,不创作或渲染卡片。

2. 从共享理解中草拟卡片

python skills/video-add-content-cards/scripts/build_cards_plan.py `
  work/understand/understanding.json `
  work/timeline.json `
  work/content-cards/cards-plan.json `
  --target-card-count 6 `
  --theme editorial `
  --must-include-type stat `
  --notes "保留产品名称原样"

该脚本将保留的语义时刻映射到节目时间,并省略被剪辑移除的时刻。它保留源范围和证据引用,将持续时间限制在包含的片段内,并将副本/位置/视觉处理标记为 draft。stat 以 metric-spotlight 开始;list 以 side-by-side 开始;候选审查可以保留正常布局或将列表切换为 parallel-columns。 确认的访谈存储在 cards-plan.json 中作为 brief。对于多个值重复 --must-include-type;省略不适用的标志。较旧的可选 brief 字段仍然接受是为了兼容性,但不是正常访谈的一部分。

3. 做出编辑选择

阅读每个卡片时间点的证据。更正 ASR 名称和数字,淘汰弱候选,编写简洁的副本,选择能避开受保护面部、可见头部轮廓和字幕的位置,并批准视觉处理。切勿将分析器文本视为最终副本。

将所有屏幕上文本存储在 copy.display 下(例如 eyebrow、title 和 detail),而不仅仅是摘要或建议的标题。仅在对合成的静态帧根据上述受保护面部和头部定义进行审查后,将 placement.face_clearance 设置为 verified,并将该静态帧的协议相对路径存储在 placement.review_still 中。将 HyperFrames 组合、Alpha 资源和精确的有理 FPS 存储在 renderer 下。

使用以下映射作为起点:

语义种类卡片类型
hookintro
key-point, quote, questionkey-quote
statstat
listlist
ctaoutro

repetition、tangent 和 risk 是编辑证据,不是自动的卡片。

保留五种规范的卡片类型。将以下可选布局存储在 visual_treatment.layout 下,而不是创建新的顶层卡片类型:

规范卡片类型允许的布局
statdefault, metric-spotlight, bar-chart, pie-chart, line-chart
listdefault, side-by-side, parallel-columns

仅当一个有证据支持的数字、百分比、金额、倍数、年份或持续时间值得强调时,才使用 metric-spotlight。将数字放在简洁的上文和下文之间,适应长值而不重叠,并保持数字在视觉上居中于这些标签之间。对于二到四个平行的、对比的、对立的或对应的简短概念,使用 side-by-side 或 parallel-columns。首选短短语;使用审查来选择适合可用画面并避开拍摄对象的布局。

仅当保留的转录提供完整、有证据支持的数据集时,才使用图表。在创作图表数据之前,请阅读 reference/chart-data.md。手动将维度、度量、单位、周期、有序点以及每个点的转录证据存储在 data 下;切勿从分析器摘要推断值或组合来自不同视频的点。对于 2-6 个可比类别,使用 bar-chart;对于已被证明全体的 2-6 个互斥部分,使用 pie-chart;对于 3-8 个有意义的有序点,使用 line-chart。当必需的值、标签、分母、时间顺序或单位缺失时,使用 metric-spotlight、普通 stat 卡片或不使用卡片。 对于图表布局,将冗长的解释压缩为简洁的支持性副本,同时不改变其含义。图表应主要传达关键值及其变化或关系。不要列举或重述图表中已可见的值、标签、周期或单位。

在此阶段保留所有有证据支持的候选。目标是简要中的目标卡片数,但当证据支持时,允许更强或更稀疏的集合。

4. 审查并应用候选选择

在候选计划存在后,生成一个特定于项目的浏览器审查。传递与计划的 source_range 对齐的源视频和活动时间线。脚本将每个证据中点限制在其包含的保留片段内,然后用每个候选的一个对应源帧填充已提交的模板:

python skills/video-add-content-cards/scripts/build_review_page.py `
  work/content-cards/cards-plan.json `
  review/03-content-cards/content-cards-review.html `
  --video input/source.mp4 `
  --timeline work/timeline.json `
  --captions-plan work/captions/captions-plan.json

当项目没有活动的字幕操作时,省略 --captions-plan。当有活动的字幕计划时,审查帧会显示其实际占用的顶部、中心或底部区域。

立即使用当前操作系统的原生命令亲自打开填充后的审查。仅运行一个命令:

# Windows PowerShell
Start-Process (Resolve-Path 'review/03-content-cards/content-cards-review.html')
# macOS
open review/03-content-cards/content-cards-review.html

# Linux 桌面
xdg-open review/03-content-cards/content-cards-review.html

如果命令失败,请诊断并重试;不要要求用户定位文件。页面显示每个源帧、卡片 ID、节目时间、可编辑副本、视觉处理和位置。图表布局还显示可编辑的结构化数据和点证据引用。在批准之前,对照其显示的证据审查每个值。 每个候选默认未选中,位置设置为 bottom。更改位置会在真实帧上移动灰色卡片代理,以便在批准之前可见碰撞风险。用户选择卡片、编辑副本、选择处理和位置,点击 复制摘要,然后将可见的摘要粘贴回对话中。

提问后 + 停止。 等待粘贴的选择摘要。不要从未经检查的草稿候选创作 HTML。 将摘要转换为 review/03-content-cards/content-cards-review.json:为每个计划卡片写入一个条目,将摘要 ID 标记为已选择,并带有其选择的副本、视觉处理和位置,并将所有其他 ID 标记为未选择,带有其当前草稿副本和空位置。将审查选择存储为名为 visual_treatment 的字符串字段。然后应用已验证的审查:

python skills/video-add-content-cards/scripts/apply_cards_review.py `
  work/content-cards/cards-plan.json `
  review/03-content-cards/content-cards-review.json

应用步骤拒绝未知、重复或缺失的卡片 ID、空的选择副本、无效位置以及与规范卡片类型不兼容的处理,而不会更改计划。成功后,它保留选择的卡片并将其副本、位置、视觉处理以及顶层审查标记为 approved。在继续之前,将得到的选择数量与简短目标进行比较。

对于选择的图表布局,应用步骤还会验证完整的结构化数据,并将 data.status 标记为 approved。任何无效的选择图表会在计划被复制之前拒绝整个审查。选择非图表布局会移除未使用的草稿图表数据。应用后,面部和字幕的清除状态保持待定,直到组合与真实合成帧进行检查。

5. 创作一个 HyperFrames 组合

使用一个 index.html 和一个暂停的 GSAP 时间线。每个批准的卡片成为一个由计划的 program_start_s 和 duration_s 键控的 .clip。保持运动可寻址,并从数据属性(而非挂钟计时器)派生时间。

对于图表提示,仅在该暂停时间线中以绝对组合时间进行动画。条形图从一个零基线揭示;饼图扇区按点顺序揭示,几何形状与值成比例;折线路径在其点出现之前按 X 轴顺序绘制。使用相对于源的尺寸和固定布局框,以便寻址、标签和动态值永远不会导致布局跳跃。建议的持续时间为条形图和饼图 5-6 秒,折线图 6-8 秒,始终限制在保留的片段内。

从最接近的存储库示例开始:

  • examples/index-almanac.html
  • examples/index-apex.html
  • examples/index-dotgrid.html
  • examples/index-editorial.html
  • examples/index-teal.html
  • examples/index-air.html

在所有卡片中保持同一视觉语言,使用相对于源的尺寸,并保持与所选调色的足够对比度。五个不透明面板主题可以使用卡片或遮罩来保证可读性。air 必须保持场景和文本容器透明,仅依靠字体、大小和与背景的颜色对比。在切换镜头或画面中,不允许 air 卡片遮挡拍摄对象的面部。

按计划顺序将渲染帧逐个放入 work/cache/content-cards/index.html。在所有剪辑和轨道上保持相同的 <video> 和 <canvas> 引用尺寸。可选地包含一个标记为 content-cards 的第三个 <clip> 轨道,该轨道包含一个完成所有叠加功能的 <div>。

在所有卡片上放置一个短暂的进入动画(0.2-0.33 秒)。所有静态卡片获得 0.15 秒的退出淡出。图表卡片获得 0.33 秒的退出淡出。将 GSAP 时间线锚定在第一个剪辑开始处,以便 gasped flock seek_only_start 或等效的 seek 行为跳转到特定剪辑,而无需遍历所有之前的剪辑。

对于所有提示,包括静态提示,所有可见元素必须在其 .clip 的持续时间内保持动画。所有提示必须正确淡入其第一个卡片,并将其动画持续时间匹配为 duration_s - (enter + exit)。所有提示必须在 duration_s 结束时完全淡出。

按计划顺序将渲染帧逐个放入 work/cache/content-cards/index.html。对所有剪辑和轨道使用相同的 <video> 和 <canvas> 引用尺寸。可选地包含一个标记为 content-cards 的第三个 <clip> 轨道,该轨道包含一个完成所有叠加功能的 <div>。然后打开合成并使用其原生 seek 命令预览:

python skills/video-add-content-cards/scripts/render_composition.py preview `
  --plan work/content-cards/cards-plan.json `
  --html work/cache/content-cards/index.html

此命令启动一个 HTTP 服务器,打开预览 URL,并挂起直到用户关闭。预览只工作在步骤 5 的未锁定合成上。当预览可见时,检查每个剪辑。在关闭预览之前,不要开始渲染、快照或要求用户确认。

如果 render_composition.py preview 失败,检查依赖项、文件路径问题或无法访问的端口。不要替代此原生预览命令或要求用户定位文件。

6. 渲染并快照

在预览满足预期后,生成透明叠加(alpha)RGB+Alpha QuickTime:

python skills/video-add-content-cards/scripts/render_composition.py render `
  --plan work/content-cards/cards-plan.json `
  --html work/cache/content-cards/index.html `
  --overlay work/cache/content-cards-overlay.mov `
  --fps 29.97

FPS 必须与卡片计划 renderer.rational_fps 匹配。此步骤将 HyperFrames 组合编码为具有优秀 Alpha 通道的无损动画。

其次,为每个卡片生成一个有用的静态帧:

python skills/video-add-content-cards/scripts/render_composition.py snapshot `
  --plan work/content-cards/cards-plan.json `
  --html work/cache/content-cards/index.html `
  --output review/03-content-cards/card-stills/ `
  --fps 29.97

此步骤在每个卡片的 program_start_s + duration_s * 0.3 处捕捉帧到 PNG。在继续之前,打开一些仍然与面部和头部排除区域定义重叠的静态帧。对于有风险的静态帧,重新打开合成 HTML,调整位置外部的安全边距,重新渲染组合,然后重新快照。

7. 打包并集成

将最终叠加文件路径写入计划:

{
  "based_on": {
    "understand": "profane_cyclone",
    "captions": null
  },
  "plan": [ ... ],
  "renderer": {
    "composition": "work/cache/content-cards/index.html",
    "alpha_asset": "work/cache/content-cards-overlay.mov",
    "rational_fps": [2997, 100]
  },
  "review": { ... },
  "summary": { ... }
}

当项目的其余部分需要时,集成步骤会将透明叠加应用到底层视频,而不是此技能的一部分。

确认

/video-understand 是强制性的。 如果缺失,在提出任何问题之前停止,说明该问题。 如果 ffmpeg、Python 或支持的 Node 版本缺失,在操作媒体之前停止并说明。

当满足最短卡要求时无需确认。使用 npx hyperframes 获取 Chrome 是自动的。

在步骤 4 的用户选择输入之后,不再进行进一步的人类确认步骤。

Individual skills in this repo

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

相关技能