Communitygithub.com

borjaperfra/launch-video-kit

为用 Remotion 制作的视频添加配音、音乐、字幕或镜头运动,使用本仓库的各个组件。当需要借助 TTS 生成画外音、选择或延长音乐轨道、将人声与音乐混合、在界面上添加可读的字幕,或在重建为 HTML 的 UI 上移动虚拟摄像机时使用。

launch-video-kit 是什么?

此技能专注于视频制作中除设计之外的关键部分:音频、字幕和摄像机。它提供了一套有序的工作流程,首先通过 `gen-voice.mjs` 生成并测量 TTS 语音的时长(以帧为单位),以此确定场景时间;随后使用 `analyze-music.mjs` 和 `loop-music.mjs` 选择并延展音乐,确保音频混音质量;最后添加字幕和摄像机运动。该技能强制实施关键规则,例如每个语音文件对应一行、仅对屏幕未显示的文字添加字幕、控制背景音乐闪避系数(DUCK.base 不超过 ~0.85)以及避免摄像机持续漂移。它支持在 Claude Code、Cursor、Codex 等 AI 编码代理中使用,并需要 ffmpeg、ffprobe 及 Node 20+ 环境。该技能强调用客观测量(如音量检测)替代主观判断,并提供 Shell 命令用于验证混音的峰值电平,以及生成联系 sheet 来替代逐帧审查。它还处理了 Windows Git Bash 下的兼容性问题,并提醒 Remotion 中 `staticFile()` 和 `durationInFrames` 的常见陷阱。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/borjaperfra/launch-video-kit/tree/HEAD/.claude/skills/launch-video-kit

在你喜欢的 AI 中提问

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

文档

launch-video-kit 是做什么的?

视频中非设计部分的六个组件:音频、字幕和摄像机。README 是参考文档(解释每项决策的原因及其支撑数据)。以下是工作顺序及容易忽略的规则。

顺序很重要

  1. 先处理语音,再进行剪辑。 gen-voice.mjs 会打印每一行的实际时长(以帧为单位)。这些数字决定了场景的时间点。如果先进行剪辑,那么实际每条语音都会打乱剪辑,导致需要重做。
  2. 然后处理音乐,根据能量曲线选择窗口(analyze-music.mjs),并在必要时延长(loop-music.mjs)。
  3. 接着进行剪切,将其绑定到分析结果输出的小节网格上。
  4. 最后添加字幕,此时你已知道哪些句子有屏幕上的标题,哪些没有。

容易自动违反的规则

  • 每个语音文件对应一行。 永远不要使用长录音。
  • 只给屏幕上未显示的文字添加字幕。 如果句子已经出现在标题中,再添加字幕会导致同一位置出现重复文本。
  • 字幕的 dur 是阅读时间,而不是语音的持续时间。手动裁剪范围,确保前后不重叠,也不与后面的标题重叠。
  • DUCK.base 不超过 ~0.85。 库中的音轨通常为 0 dB,任何叠加效果都会导致削波。
  • 摄像机:保持静止,或者进行短距离移动。 既不要持续漂移(分散注意力),也不要生硬切换(跳跃)。并且每个场景应从上一场景结束时的取景开始。
  • 拼接两侧的界面使用相同的组件。 如果一个场景是手动绘制的,它会在某个细节上产生差异,在切换块时会突然出现那个差异。
  • 在时间数组上迭代,而非内容数组。 在内容数组上循环,但索引较短的时间数组,一旦移除一个节拍,渲染就会崩溃。

进行验证而非猜测

智能体无法看到或听到视频。所有看似主观的内容都有对应的数字指标:

# 按片段检查混音:语音与音乐的混合应与单独语音的音量相当
ffmpeg -hide_banner -ss 27 -t 4 -i out.mp4 -af volumedetect -f null /dev/null

# 全局峰值必须低于 -1 dB
ffmpeg -hide_banner -i out.mp4 -af volumedetect -f null /dev/null

# 使用联系 sheet 替代逐帧审查
ffmpeg -v error -i f_%d.png -vf "scale=560:-1,tile=5x4" -frames:v 1 sheet.png

loop-music.mjs 会自动验证其拼接点:如果某个拼接点不在静音区域,它会发出警告,此时需要选择另外两个间隙。

环境要求

  • 需要在 PATH 中包含 ffmpeg 和 ffprobe,以及 Node 20 或更高版本。
  • 在 Windows 下的 Git Bash 中:ffmpeg 不支持 glob 模式,且 drawtext 因缺少 fontconfig 而无法使用。请使用编号序列。此外也没有 bc。
  • Remotion 的 staticFile() 对空格和重音敏感:请将资源重命名为 ASCII 字符。
  • 在 <Sequence> 内部,useVideoConfig().durationInFrames 是该序列的时长,而不是整个视频的。不要将其与绝对帧混淆。

无法实现的功能

TTS 只有语音,没有呼吸声。叹息、笑声和效果音需要单独录制。合成哔哔声可以通过 ffmpeg 生成,README 中有一个示例。

相关技能