发布视频生成器
渲染器: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 获取网站内容。逐字记录标题、副标题、功能名称、网站自带的示例内容(演示贴文、提示词、代码、问题列表)以及 CTA。读取计算后的字体族/字重/字间距样式以及背景/文本/强调色的示例像素颜色(CSS 变量会过期)。将 Logo SVG 和所有图片保存到
launch-videos/scenes/<name>/assets/。仅当网站字体的许可证允许分发时才使用该字体;否则使用最接近的内置字体(Inter、JetBrains Mono、Space Grotesk)。切勿捏造指标、客户、集成或用户界面。如果某功能标记为“计划中”或“预览”,请将其省略或标注清楚。如果无法获取真实的用户界面示例,请停止并说明原因。在场景文件顶部以注释形式注明来源 URL 和日期。 - 先写脚本,再画故事板。 每个镜头用一至两行简短描述,摘取自网站文案;总时长 20–40 秒。当口语形式与书面形式不同时(如点号、缩写),使用
say:例如say: 'Build A.I. agents'。5–6 个镜头,每个镜头一个想法:吸引点(2 秒内让产品或标题上屏)→ 首次使用瞬间 → 产品实际运行(根据网站自有示例用 HTML 重建真实用户界面,绝不用截图)→ 第二个功能 → 三大支柱或工作原理 → 带 Logo 的 CTA。平静品牌使用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中切换;仅在用户希望获得更自然的朗读效果时提及。