启动视频
渲染器:launch-video-skills npm 包。完整场景合约:https://github.com/anudeepadi/launch-video-skills#scene-contract
npx launch-video-skills setup:每台机器只需执行一次(headless Chromium + Python 语音包)。需要 Node 18+、Python 3.10+、ffmpeg。首次运行语音时,Kokoro 权重(约 350 MB)和 whisper small.en(约 480 MB)会下载到~/.cache/lvk。npx launch-video-skills new <name>:创建launch-videos/scenes/<name>/index.html,并在其旁边生成launch-videos/kit/。npx launch-video-skills render <scene.html> [flags]:将输出写入./out/。- Chromium 下载卡住 →
export LVK_CHROME=/path/to/chrome-headless-shell(任何本地构建版本)。 - macOS 上通过 python.org 安装的 Python 遇到 SSL 失败 →
export SSL_CERT_FILE=$(python3 -c 'import certifi;print(certifi.where())')。
优秀的启动视频与“AI 垃圾”之间的区别在于 references/craft.md。在构思故事板之前,请先阅读此文件。
步骤
- 从实际产品中获取品牌和事实。 使用 Playwright 获取网站。如实记录标题、副标题、功能名称、网站自身的示例内容(演示线程、提示词、代码、问题列表)以及行动号召。读取计算后的样式,获取字体家族/字重/字间距以及背景/文字/强调色的样本像素颜色(CSS 变量会过时)。将 Logo SVG 和任何图片保存到
launch-videos/scenes/<name>/assets/。仅当字体许可允许重新分发时,才使用网站的字体;否则,使用最接近的捆绑字体(Inter、JetBrains Mono、Space Grotesk)。绝不虚构指标、客户、集成或 UI。如果某内容被标记为“计划中”或“预览”,则忽略或标注。如果无法获得真实的 UI 示例,请停止并说明原因。在场景顶部注释中注明来源 URL 和日期。 - 编写脚本,然后构思故事板。 每个镜头一两行简短文字,取自网站文案;总时长 20–40 秒。当口语形式不同时(如点、缩写)使用
say:say: 'Build A.I. agents'。共 5–6 个镜头,每个镜头一个想法:吸引注意(2 秒内产品或标题出现在屏幕上)→ 首次使用情境 → 产品实际运作(使用 HTML 根据网站自身示例重建真实 UI,绝不使用截图)→ 第二个能力 → 三大支柱或工作原理 → 带 Logo 的行动号召。沉稳品牌:music.style: 'ambient',轻柔音效(0.2–0.6 音量)。开发者工具:'pulse'和重击音效。语音可选;X 上常见纯音乐。 - 编写
launch-videos/scenes/<name>/index.html,基于../../kit/kit.css和kit.js。从模板开始。标记镜头为data-shot="id",不硬编码 --in/--out。语音行放入SCENE.voice.lines(键、镜头、文本/say、at/after、pause拍)。将节拍与语音关联,使用data-on="key"、data-on="key:word"、data-edge="e"。在定义 SCENE 后调用K.layout(),然后从K.at/K.end/K.shot派生 JS 节拍:打字速度 = 文本长度 / 口语持续时间,光标在关键词上点击,打字音效提示来自相同常量。onFrame(t)必须只依赖 t。JS 变换应作用于包装器,且不使用 CSS 动画类。避免使用大型filter: blur、backdrop-filter或全屏混合模式。 - 审查循环。
npx launch-video-skills render launch-videos/scenes/<name>/index.html --sheet 1。每行<- ASR heard:都可能是发音错误:使用say重新拼写并再次检查(whisper 有时会误听正确音频;标记这些情况供人工听取)。检查生成的 PNG 图像是否有:文字覆盖在繁忙图像上、小文字可读性、空帧、过渡中间碰撞、打字在镜头结束前完成、语法高亮出错。使用--stills t1,t2进行完整分辨率检查。迭代时使用品味注释(“太快了”、“不清楚发生了什么”),而非一次性完成。 - 渲染并验证。
npx launch-video-skills render launch-videos/scenes/<name>/index.html --workers 4。然后:ffprobe:检查是否为 h264 + aac,以及预期时长。volumedetect:平均音量约 −19 到 −17 dB,最大音量低于 −1 dB。- 同步:使用 faster-whisper small.en 逐词时间戳转录最终 MP4;每句第一个词的时间戳与日志中输出的时间线偏差在约 0.2 秒内。关键词落在视觉节拍上。
- 连续性:对比工作边界处的帧(帧数 / 工作进程数)。
- 交付。 提供 MP4 文件路径。绝不覆盖之前的剪辑(使用
mv -n或新的--out)。明确说明语音和音乐是合成的,且未经过人工耳朵检查。提供避免“一键生成”类声明的发布文案。付费语音(ElevenLabs、OpenAI、Google)可在包内的lib/tts.py中替换;仅在用户希望获得更自然的朗读效果时提及。