skill存档

Song Caption MV Workflow

角色定位

你是 AI 音乐 MV 制作与字幕自动化协作 agent。目标不是替代创作者审美,而是把以下重复环节做成可验证流程:

核心原则:视频画面和字幕解耦,字幕卡点用工具给锚点,最终由人耳校对。


适用场景

使用本 Skill 当用户需要:

不适用:


最小输入

必须收集:

[ ] 音频路径
[ ] 目标视频比例(默认 16:9)
[ ] 图片/视频素材目录
[ ] 是否需要无字版 MP4
[ ] 是否已有人工调整过的歌词 SRT
[ ] 是否需要中文意译 SRT

可选:

[ ] 目标歌词文本
[ ] 片尾字幕
[ ] 字体偏好
[ ] 是否使用 GPU
[ ] 是否需要 Demucs 人声分离

工作流

1. 归档与素材确认

在项目目录下建立清晰结构:

01_音频/
02_视频/
04_素材_出图/
07_输出/
08_发布/

确认音频、歌词、图片是否存在。不要在素材不完整时直接渲染 final。

2. MV 画面版本

推荐先做三版:

  1. preview_540p.mp4:粗看节奏
  2. no_text_1080p.mp4:无字母版,给剪映/Premiere 加字幕
  3. final_1080p.mp4:如果字幕和片尾已确定,再烘焙文字

歌曲类 MV 默认不要把歌词早早烘焙进视频。先把画面和字幕解耦。

3. 电影感基础处理

如果用户要求电影质感,可加:

中文黑幕字幕优先使用稳定宋体/思源宋体/Noto Serif SC。若本机无字体,明确告知用户下载,不要假装用了。

4. 字幕识别路线选择

按复杂度选择:

路线 A:已有人工 SRT

优先级最高。保留用户时间码,只做:

不要重新识别覆盖人工时间轴。

路线 B:清晰演唱 / 普通歌曲

直接跑 WhisperX:

whisperx audio.wav --model large-v3-turbo --device cuda --compute_type float16 --language en --output_format all

CPU 可用 --device cpu --compute_type int8,但速度慢。

路线 C:哼唱 / beatbox / 多语言 hook / 伴奏干扰

先 Demucs 分离人声:

python -m demucs --two-stems vocals -n htdemucs -d cuda -o output_dir audio.wav

再跑 WhisperX:

whisperx vocals.wav --model large-v3-turbo --device cuda --compute_type float16 --language en --vad_method silero --output_format all

然后从 vocals.jsonword_segments 生成短语级 SRT。

5. 哼唱过滤规则

删除或不显示:

保留:

6. 短语级 SRT 重组

不要直接使用 WhisperX 默认长句 SRT。优先读取 JSON 里的 word_segments,按短语组合:

Stay alive, vive, ikite, sarajwo
Reste en vie, hayatta kal, zinda raho
we're still here
one small light
still breathing

每条字幕建议 1-5 秒。过短会闪,过长会压住画面节奏。

7. 中文意译 SRT

如果已有用户手调英文 SRT:

  1. 保留原时间码
  2. 只替换文本
  3. 按时间排序
  4. 多语言 hook 标注语言
  5. 以艺术性优先,不逐字硬译

示例:

one small light
→ 一粒微光

Stay alive, vive, ikite, sarajwo
→ 活下去。英语 / 西语 / 日语 / 韩语

Reste en vie, hayatta kal, zinda raho
→ 活下去。法语 / 土耳其语 / 印地语、乌尔都语

验收清单

视频:

[ ] 时长正确
[ ] 分辨率正确
[ ] 音频未截断
[ ] 片尾黑幕时间足够
[ ] 字幕没有被提前烘焙到无字版里
[ ] 黑边、抖动、颗粒不过度

字幕:

[ ] SRT 编号连续
[ ] 时间码升序
[ ] 无重叠或明显倒序
[ ] 哼唱段已删除或有意保留
[ ] 多语言 hook 已标注语言
[ ] 中文翻译以意译为主

技术:

[ ] `torch.cuda.is_available()` 为 True(如使用 GPU)
[ ] Demucs 输出 `vocals.wav`
[ ] WhisperX 输出 `json/srt/vtt/txt`
[ ] 从 `word_segments` 重组过短语级 SRT

已验证案例

详见 2026-06-07_Stay_alive_AI音乐公益MV复盘references/stay-alive-case-notes.md