Communitygithub.com

iamaanahmad/captions-subtitles

创建、编辑、翻译并烧录字幕——使用Whisper转录语音,编写SRT/VTT/ASS文件,设置样式,并为短视频平台(如Shorts、Reels、TikTok)制作单词高亮硬字幕。适用于所有字幕、隐藏式字幕、转录稿或无障碍需求。

captions-subtitles 是什么?

这个技能是一个强大的字幕与隐藏式字幕工具包,用户可以通过Whisper(openai-whisper或faster-whisper)从音频或视频中转录语音,生成SRT、VTT或ASS格式的字幕文件。它特别强调处理质量:允许用户校对专有名词和产品名称,优化转录本,并根据可读性规则(如每行最大字符数、阅读速度限制、按短语断句等)调整时间码。该技能还支持硬字幕烧录(使用FFmpeg的subtitles或ass滤镜)以及为短视频创建单词高亮样式(使用ASS中的\(k)卡拉OK标签)。此外,它涵盖了交付方案:为YouTube等平台输出独立的.srt/.vtt文件,为社交媒体输出烧录版本,并为MP4添加软字幕轨道。该技能适用于Claude Code、Cursor和其他支持自定义技能的AI代理平台。它通过综合使用Whisper、FFmpeg和ASS样式脚本,高效地解决了常见的字幕工作流程中的多个痛点,包括转录、校对、样式设计和格式交付。

兼容平台~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/iamaanahmad/agents-video-editing-skills/tree/HEAD/skills/captions-subtitles

在你喜欢的 AI 中提问

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

文档

字幕与隐藏式字幕

大多数社交视频在静音状态下被观看。字幕是剪辑的一部分,而非额外内容。

1. 转录

# openai-whisper(pip install openai-whisper)
whisper audio.mp3 --model small --language en --output_format srt --output_dir captions/

# faster-whisper(pip install faster-whisper):更快、内存占用更低、带词级时间戳
python - <<'PY'
from faster_whisper import WhisperModel
model = WhisperModel("small", compute_type="int8")
segments, info = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
for s in segments:
    for w in s.words:
        print(f"{w.start:.2f}\t{w.end:.2f}\t{w.word}")
PY

为获得更好效果,先提取纯净音频:

ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav

模型大小在准确性与速度之间权衡:base < small < medium < large。英语使用small或medium,口音较重或非英语语言使用large。

如果脚本已存在(你根据它生成了画外音),不要相信转录本的措辞。使用脚本文字,仅用Whisper进行时间对齐(强制对齐)。这样可以保持姓名和数字的准确性。

2. 修正文本

校对专有名词、产品名称和数字。Whisper经常误听这些内容。如果主题专业,请向用户请求术语表。

3. 编写字幕文件

SRT:

1
00:00:00,000 --> 00:00:02,400
大多数构建在周五失败。

2
00:00:02,400 --> 00:00:05,100
原因如下。

可读性规则:

  • 最多2行,每行约42个字符(竖屏视频约20个字符)。
  • 阅读速度低于每秒17个字符;最小显示时长1秒。
  • 在短语处换行,不要打断短语。切勿将姓名分割到不同字幕中。
  • 字幕时间不可重叠。保持2帧间隔或无缝衔接。

4. 烧录

# 通过force_style进行软样式设置(SRT)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" -c:a copy out/captioned.mp4

# ASS提供完全控制(卡拉OK单词高亮、位置、动画)
ffmpeg -i in.mp4 -vf "ass=captions.ass" -c:a copy out/captioned.mp4

Windows路径注意事项:在滤镜中,对驱动器冒号进行转义并使用正斜杠(subtitles='C\:/work/captions.srt'),或者从包含文件的文件夹运行FFmpeg并使用相对路径。

5. 短视频的单词高亮样式

生成一个ASS文件,每个事件包含一个词组(2至4个单词),并使用\k卡拉OK标签或按词颜色覆盖,使当前活动单词改变颜色。典型外观:粗体无衬线字体、白色文字、3至4像素黑色描边、活动单词使用品牌强调色,位于下部三分之一处,而非最底部(平台UI会遮挡)。

起始可用的最小ASS头部:

[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920

[V4+ Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding
Style: Default,Arial,72,&H00FFFFFF,&H0000D7FF,&H00000000,&H64000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,520,1

[Events]
Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
Dialogue: 0,0:00:00.00,0:00:01.20,Default,,0,0,0,,{\k30}大多数 {\k40}构建 {\k30}失败

ASS中的颜色格式为&HAABBGGRR(蓝-绿-红顺序,alpha在前)。

6. 交付

  • 为社交媒体平台提供烧录版本。
  • 为YouTube、LinkedIn和网页播放器提供独立的.srt或.vtt文件(观众可切换和翻译)。
  • MP4中的软字幕轨道:-i captions.srt -c copy -c:s mov_text。

翻译

翻译字幕文本,而非时间码。根据每种语言保持行长度限制(德语和芬兰语文本较长,需重新换行)。视频公开时,请让母语者检查翻译。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能