用途
视频歌词字幕生成引擎,面向音乐视频(MV)的字幕制作。核心流程为:从歌词文本 + 时间轴信息生成 SRT/ASS 字幕文件,再通过 FFmpeg 烧录到视频中。
触发词包括:歌词字幕、lyrics subtitle、字幕烧录、字幕生成、SRT、ASS、bilingual subtitle、双语字幕、字幕文件、字幕制作。
核心 Pipeline
lyrics.txt + audio.mp3 → generate_srt.py(生成 SRT 时间轴) → generate_ass.py(可选:生成 ASS 高级样式 / KTV 效果) → burn_subtitles.sh(FFmpeg 烧录到视频) → final_with_subtitles.mp4
主要能力
generate_srt.py — SRT 字幕生成
用法:python3 scripts/generate_srt.py <lyrics_file> [options]
选项:
- lyrics_file:歌词文件路径(LRC 或纯文本)
- --audio <file>:音频文件,用于获取总时长(纯文本歌词时必须)
- --duration <seconds>:总时长(秒),替代 --audio
- --bilingual <cn_file>:中文翻译文件,生成双语 SRT
- --json-timeline <file>:带时间轴的 JSON 文件
- -o / --output <file>:输出 SRT 文件路径(默认 stdout)
输入格式支持:
- LRC 格式(带时间戳),如 [00:15.00]樱花落尽时 花瓣纷飞如雪
- 纯文本格式(等间隔分配),需 --audio 或 --duration 指定总时长,每行歌词等间隔分配时间;空行表示纯音乐段,自动标注 (纯音乐)
- JSON 时间轴格式,通过 --json-timeline 传入带 sections[].lines[] 结构的 JSON 文件,支持精确的 start/end 时间
SRT 生成规则:每行歌词对应一条 SRT 条目;空行 / 纯音乐段自动标注 (纯音乐);双语模式原文行在上、翻译行在下,同一条目内用 \N 分隔;时间格式为 HH:MM:SS,mmm(SRT 标准)。
示例:
- LRC 歌词 → SRT:python3 scripts/generate_srt.py lyrics/lyrics.lrc -o subtitles/lyrics.srt
- 纯文本歌词 + 音频时长 → SRT:python3 scripts/generate_srt.py lyrics/lyrics.txt --audio audio/song_final.mp3 -o subtitles/lyrics.srt
- 双语字幕:python3 scripts/generate_srt.py lyrics/lyrics.txt --audio audio/song_final.mp3 --bilingual lyrics/lyrics_cn.txt -o subtitles/lyrics_bilingual.srt
- JSON 时间轴 → SRT:python3 scripts/generate_srt.py lyrics/lyrics.txt --json-timeline script/chloe_lyrics_parsed.json -o subtitles/lyrics.srt
generate_ass.py — ASS 高级字幕生成
用法:python3 scripts/generate_ass.py <srt_file> [options]
选项:
- srt_file:输入 SRT 文件路径
- --style <ktv|simple>:样式模式(默认 simple)
- --font <name>:字体名称(默认 Noto Sans CJK SC)
- --fontsize <size>:字体大小(默认 48)
- --primary-color <hex>:主文字颜色(默认 #FFFFFF)
- --outline-color <hex>:描边颜色(默认 #000000)
- --back-color <hex>:背景色(默认 #80000000 半透明黑)
- -o / --output <file>:输出 ASS 文件路径(默认同名 .ass)
ASS 样式:
- simple 模式:底部居中显示,白色文字 + 黑色描边,半透明背景条
- ktv 模式:逐字高亮效果(\kt 标签),播放时文字从灰色变为亮色,适合 KTV / 卡拉 OK 场景
示例:
- 简单样式:python3 scripts/generate_ass.py subtitles/lyrics.srt -o subtitles/lyrics.ass
- KTV 样式:python3 scripts/generate_ass.py subtitles/lyrics.srt --style ktv -o subtitles/lyrics.ass
- 自定义字体和颜色:python3 scripts/generate_ass.py subtitles/lyrics.srt --font "Source Han Sans CN" --fontsize 52 --primary-color "#FFD700" -o subtitles/lyrics.ass
burn_subtitles.sh — FFmpeg 字幕烧录
用法:bash scripts/burn_subtitles.sh <video_file> <subtitle_file> [output_file]
功能:自动检测字幕格式(SRT / ASS);调用 FFmpeg 硬字幕烧录;默认输出文件名 <video>_with_subtitles.mp4;FFmpeg 路径 ~/tools/ffmpeg。
FFmpeg 命令:
- SRT 硬字幕:ffmpeg -i video.mp4 -vf "subtitles=lyrics.srt" -c:a copy output.mp4
- ASS 硬字幕:ffmpeg -i video.mp4 -vf "ass=lyrics.ass" -c:a copy output.mp4
示例:
- 烧录 SRT 字幕:bash scripts/burn_subtitles.sh video/phase1_preview.mp4 subtitles/lyrics.srt video/final_with_subtitles.mp4
- 烧录 ASS 字幕:bash scripts/burn_subtitles.sh video/phase1_preview.mp4 subtitles/lyrics.ass video/final_with_subtitles.mp4
使用方式
脚本位于 scripts/ 子目录下:
- scripts/generate_srt.py:从歌词文本 + 时间轴生成 SRT 字幕
- scripts/generate_ass.py:SRT → ASS 转换(支持 KTV 高亮)
- scripts/burn_subtitles.sh:FFmpeg 烧录字幕到视频
标准输入:
- 歌词原文:lyrics/lyrics.txt(纯文本或 LRC 格式带时间戳)
- 中文翻译:lyrics/lyrics_cn.txt(可选,用于双语字幕)
- 音频文件:audio/song_final.mp3(用于获取总时长,纯文本歌词时)
- 视频文件:video/*.mp4(烧录目标)
适用场景
音乐视频(MV)歌词字幕制作,包括单语字幕、双语字幕、KTV 逐字高亮字幕,以及将字幕烧录进视频成品。
项目文件结构
所有 MV 项目遵循以下文件结构:
~/clawd/projects/MediaClaw/output/<project-name>/ ├── lyrics/ # 歌词(必须有) │ ├── lyrics.txt # 歌词原文(纯文本或LRC) │ ├── lyrics_cn.txt # 中文翻译(可选) │ └── lyrics.json # 带时间轴的JSON(程序生成) ├── subtitles/ # 字幕文件(程序生成) │ ├── lyrics.srt # SRT格式 │ ├── lyrics_bilingual.srt # 双语SRT │ └── lyrics.ass # ASS格式(KTV效果) ├── audio/ # 音频 │ └── song_final.mp3 # 最终版音频 ├── video/ # 视频 │ ├── clips/ # 各clip片段 │ └── final_with_subtitles.mp4 # 最终带字幕视频 ├── frames/ # 参考帧图片 └── script/ # 剧本/计划 ├── mv_script.json # MV脚本 └── edit_plan.json # 剪辑计划
文件命名规范:歌词原文固定为 lyrics/lyrics.txt;中文翻译固定为 lyrics/lyrics_cn.txt(可选);SRT 字幕固定为 subtitles/lyrics.srt(单语);双语 SRT 固定为 subtitles/lyrics_bilingual.srt;ASS 字幕固定为 subtitles/lyrics.ass(KTV 效果);最终视频固定为 video/final_with_subtitles.mp4。禁止随意命名(如 sub01.srt、lyrics_raw_v2.txt、final_v3_new.mp4)。
完整工作流示例
设置项目路径
PROJECT=~/clawd/projects/MediaClaw/output/chloe-sakura-mv SKILL=~/clawd/skills/video-lyrics-subtitle
1. 生成 SRT 字幕(从 LRC 歌词)
python3 $SKILL/scripts/generate_srt.py
$PROJECT/lyrics/lyrics.txt
--json-timeline $PROJECT/script/sakura_mv_final.json
-o $PROJECT/subtitles/lyrics.srt
2. 生成 ASS 字幕(KTV 风格)
python3 $SKILL/scripts/generate_ass.py
$PROJECT/subtitles/lyrics.srt
--style ktv
-o $PROJECT/subtitles/lyrics.ass
3. 烧录字幕到视频
bash $SKILL/scripts/burn_subtitles.sh
$PROJECT/video/phase1_preview_sakura_mv.mp4
$PROJECT/subtitles/lyrics.ass
$PROJECT/video/final_with_subtitles.mp4
限制
纯文本歌词必须通过 --audio 或 --duration 提供总时长,否则无法等间隔分配时间。FFmpeg 路径固定为 ~/tools/ffmpeg。其他平台支持、收费与价格信息暂未提供。