SuperAPI AI 工具集

video-lyrics-subtitle

设计与创作

查看项目

更新于 10-15 08:06

技能介绍

用途

视频歌词字幕生成引擎,面向音乐视频(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)

输入格式支持:

  1. LRC 格式(带时间戳),如 [00:15.00]樱花落尽时 花瓣纷飞如雪
  2. 纯文本格式(等间隔分配),需 --audio 或 --duration 指定总时长,每行歌词等间隔分配时间;空行表示纯音乐段,自动标注 (纯音乐)
  3. 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。其他平台支持、收费与价格信息暂未提供。