首页 / 全部技能 / 内容创作 / presentation-video
内容创作 · iart-ai/data-animation-skills

presentation-video

This skill should be used when the user asks to "make an animated presentation", "turn a pitch deck into a video", "convert slides/a deck to video", "make a presentation video", "build a deck video", "narrate a slide deck as a video", or "auto-advance slides synced to a voiceover". Covers rebuilding slides as motion graphics with staggered build reveals, slide-to-slide transitions, and timing locked to per-slide narration.

L4 高权限 · 分级授权与审计V1 已固定执行命令联网读写文件Dual-pass Audit
Author iart-aiGitHub iart-ai/data-animation-skills ↗Stars 6License MIT(仓库根 LICENSE:「MIT License」/「Copyright (c) 2026 iart.ai」;.claude-plugin/plugin.json 与 README「## License」同声明 MIT)Commit 8ce2709c39
管控等级描述 skill 的能力与建议配套的管控措施,不代表质量或安全认证,也不表示可用或不可用。是否使用由用户和管理者决定。不同 agent 宿主对权限的约束各不相同,请勿假定宿主一定会提供安全兜底。第三方 skill 版权归原作者,使用风险由使用者自行承担。

1实现原理 · 为什么它能做到

核心主张是重建而非录屏:录屏继承静态外观、鼠标抖动与硬切,重建才拿到帧确定性、可缓动转场、任意分辨率清晰与音频驱动的时长。

skills/presentation-video/SKILL.md
A screen-recording inherits the deck's static look, mouse jitter, and abrupt slide cuts. Rebuilding in code (Remotion) buys: per-frame-deterministic reveals, transitions that actually ease, text that stays crisp at any resolution, and slide durations driven by audio length.
工作模型是「deck 是脚本,视频是新产物」。

叙事优先:先定一句话脊梁,每页只讲一件事,页标题是论断而非标签。

skills/presentation-video/SKILL.md
- **One throughline (the spine).** State the deck's single takeaway in one sentence. Every slide must advance that sentence; if a slide doesn't, cut it or move it to an appendix.
自动播放的视频没有主讲人救场,结构必须自己承载逻辑。

唯一铁律:旁白掌控时钟——每页时长=该页音频实测长度+少量 handle,禁止目测。

skills/presentation-video/SKILL.md
**Each slide lasts exactly as long as its narration audio, plus a small handle.** Measure every voiceover clip's real duration, convert to frames, and make that the slide's length.
reference 在 calculateMetadata 里并行量测并换算帧数(HANDLE=0.4s)。

每页音频挂在自己组件内:声画由同一 Sequence 定位,物理上不可能漂移。

skills/presentation-video/references/slide-components.md
Because the audio lives inside the same component that draws the visuals, and both are placed by the sequencer at the same start frame, voice and picture physically cannot drift.
用结构性论证排除失步,而不是靠人工校准。

转场帧预算要记账:TransitionSeries 的转场是重叠而非新增时间,会吃掉邻页帧。

skills/presentation-video/references/sequencing.md
A `<TransitionSeries.Transition>` does **not** add time — it overlaps its neighbors, consuming frames from the end of the outgoing slide and the start of the incoming one.
旁白必须完整播完的页要把转场长度补回预算。

页内 build 揭示要与旁白同步:元素在被念到的时刻出现,读者不领先三行。

skills/presentation-video/SKILL.md
The point of a build is pacing: show each element when the narration reaches it, so the viewer reads the line being spoken — not three lines ahead.
因此揭示节奏由旁白派生,而不是固定网格。

可读性是硬线:正文 ≥28–32px @1080p、标题 56–80px、对比 ≥4.5:1、内容留在中心 90%。

skills/presentation-video/SKILL.md
- **Type scale, not deck scale.** A deck viewed on a laptop ≠ a video viewed in a feed. Bump body to ≥ 28–32px at 1080p; titles 56–80px.
配套纪律:挤不下就拆页,绝不缩小字号。

验证环:先读 compositions 拿总时长,再从「每页的驻留段」取样而不是在转场上取样。

skills/presentation-video/SKILL.md
- Use `npx remotion compositions` to read the deck's `durationInFrames`/`fps` and pick the end frame; sample a still **inside each slide's hold**, not on a transition, to judge the built state.
检查项含越出中心 90%、正文字号过小、对比过低。

转场要承载逻辑(因此/但是/所以),安静的 fade 给「以及」,大 push 只给章节分隔。

skills/presentation-video/SKILL.md
- **Transitions carry logic, not just motion.** The cut between slides should answer "so what's next?" — therefore, but, which means, here's the proof.
把转场从装饰升级为论证标记。

2核心能力

01旁白驱动时长(calculateMetadata 并行量测 → 帧 + HANDLE)
02叙事结构工具(spine / 一页一意 / tension→resolution 的 pitch 五幕)
03slide 组件库(useEnter / TitleCard / BulletList / Slide / SectionDivider)
04TransitionSeries 编排(按邻居类型选 fade 或 slide,divider 用大转场)
05转场帧预算记账(把被吃掉的帧补回该页)
06可读性检查清单(字号/对比/安全区/数字用 tabular-nums)
07批量渲染多份 deck(一份模板 × 每客户/地区一个 JSON)
08失败模式清单(猜时长、音频挂在 deck 级、每刀重转场、一页塞太多、字体缺失)

3外部依赖

KindDependency / Endpoint
packageremotion(AbsoluteFill/Sequence/Audio/spring/interpolate)
package@remotion/media-utils(getAudioDurationInSeconds 量测旁白)
package@remotion/transitions(TransitionSeries / linearTiming / fade / slide)
package@remotion/google-fonts(reference 建议的字体加载方式;选择它会在渲染期访问 Google Fonts)
clinpm / npx(安装并运行 Remotion 工程、读 compositions、渲染)
networkiart.ai(reference 尾部推广链接,具 utm 参数;仅读者点击才请求)

4管控建议与判定依据

建议配套管控措施
面向 Agent
分级或逐次授权,建议在沙箱运行
面向管理者
审批流程、可回滚、全程审计
判定依据(文件路径与关键语句摘要)
  • scripts/: 执行本地脚本或命令: skill 目录内无自带脚本;SKILL.md/reference 指示 agent 执行 `npm i remotion @remotion/tra
  • 网络端点: 声明外部网络访问: 执行期无业务 API 调用;旁白音频为本地文件,由 Remotion 本地读取量测。
  • 本地工作目录: 文件读写与工件输出: 在用户工程内写 `out/f-title.png`/`out/f-mid.png`/`out/f-end.png`、`out/deck.mp4`、`o
审计说明: 。触发项是分级范式「依赖第三方插件、镜像、远程包」:skill 目录为纯 Markdown(无脚本、无凭证读取、无 env 读取),但交付路径必须安装并执行远程包 remotion + @remotion/media-utils + @remotion/transitions;此外 reference 明确建议用 @remotion/google-fonts 加载品牌字体,选择该路径会在渲染期向 Google Fonts 发起请求。同仓 `remotion-video` 已按同口径判橙,此处与之一致。**明确不成立的项**:无凭证/cookie/环境变量读取(token 扫描零实质命中);不向外部生成服务上传素材(旁白与画面全程本地);无 TLS 降级、无 `--no-verify`、无沙箱关闭、无反自动化绕过。触发条件:仅在安装工程、渲染视频或选用 Google Fonts 字体时发生。

5第二遍独立确认

  • [ok] 音频量测与 HANDLE 数值是否两处一致 — SKILL.md 代码块 `const HANDLE = 0.4; // breathing room after the voice ends` 与 sequencing.md 的 `const HANDLE = 0.4; // seconds of breathing room after each voice line` 同值。
  • [ok] theme 数值是否与 reference 一致 — SKILL.md 示例 theme(bg #0B0B12 / fg #F5F5F7 / accent #6C5CE7 / titlePx 72 / bodyPx 30 / maxWidthPct 90)与 slide-components.md 的 theme.ts 逐项相同。
  • [ok] 转场帧预算的声明与实现 — SKILL.md「A transition borrows frames from both neighbors, so add its length back into the slide budget」与 sequencing.md 的记账规则(slide.durationInFrames += TRANSITION)同口径。
  • [discrepancy] @remotion/google-fonts 的声明层级 — @remotion/google-fonts 只出现在 sequencing.md 的 pitfalls(作为可选建议),SKILL.md 既未列入依赖面、也未提示渲染期可能访问 Google Fonts;照抄该建议会产生未声明的出网行为。
  • [ok] SKILL.md 内联组件与 reference 组件是否冲突 — SKILL.md 的 Bullet 用 spring(...durationInFrames: 12) + interpolate(p,[0,1],[18,0]),reference 用 useEnter() 封装同一动效;属精简版与封装版的关系,非矛盾。
  • [unlocatable] 旁白生成方式是否被声明 — SKILL.md workflow 第 2 步写「Generate/record narration per slide.(One audio file per slide (TTS or recorded).)」但未指名任何 TTS 服务或端点——属用户自备素材;「无 TTS 端点」这一结论无法在源码内定位到明确声明,故记 unlocatable(非档位依据)。

6结论

  • 时长来自音频实测而非目测,从根上避免旁白被截断或留白
  • 声画同步靠结构保证(音频挂在页组件内),不靠人工校准
  • 叙事结构被当成一等公民(spine、一页一意、转场承载逻辑)
  • 转场帧预算有记账规则,避免静默吃掉旁白时间
  • 可读性有可判定硬线,并给出「拆页而不是缩字」的处置
  • 适合: 把 pitch deck、webinar、课程模块转成自动播放旁白视频的场景:需要时长严格跟随旁白、每页一个论点、品牌锁、可按客户/地区批量出片。
    不适合: 没有旁白音频(本 skill 全部时长逻辑建立在音频上)或只需要一页式信息图/图表视频(用 animated-infographic、chart-animation);纯录屏需求。
    Install Agent-Ready
    ① Verified Mirror 2026-09-28
    Option A · Direct DownloadDownload presentation-video.tar.gz
    sha256: c9a450ffb476b92f…
    Option B · Copy Guide for Agent
    install.json
    agent 读 JSON 指南后会自动从本站下载安装,无需更多说明。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 8ce2709c39.