跳到正文
cccskills
免费在 GitHub 公开中文介绍

caption-qa

按 Netflix、BBC 或 DCMP 标准检查 SRT 和 WebVTT 字幕的阅读速度、行长、显示时长、间隔及重叠,并报告问题并协助调整时间和换行。

原文查看原文说明

Check SRT or WebVTT captions and subtitles against published standards (Netflix English, BBC subtitle guidelines, DCMP Captioning Key) for reading speed, line length, line count, time on screen, gaps and overlaps, then fix failures by retiming before rewording. Use when asked to QA, lint or validate captions, check whether subtitles read too fast, prepare captions for Netflix, broadcast or educational delivery, or add a caption check to CI.

github/awesome-copilot星标 40,567(GitHub 40,567 + cccskills 0)

实测评分 未实测

查看安装方法

适用场景

  • 交付前按标准检查字幕
  • 查找阅读过快或行过长
  • 按平台要求准备字幕
  • 在 CI 中重复检查字幕

中文介绍

功能

按照 Netflix English、BBC 字幕指南或 DCMP Captioning Key 检查 SRT 和 WebVTT 字幕。根据显示文字和持续时间测算阅读速度,并逐条报告行长、行数、屏幕显示时长、字幕间隔及重叠。未指定目标时,采用面向成人内容的 Netflix English 标准,并说明这一前提。发现问题后,优先保留说出的原话,再依次考虑延长显示时间、调整开始时间、在语义片段处拆分字幕或重新换行。修改后可以再次测量,也可编写可重复运行的 Python 3 检查程序并用于 CI。

适用场景

字幕交付前需要确认是否符合标准、查明平台拒收原因,或为 Netflix、电视广播和美国教育媒体准备字幕时,可以使用此技能。它也适合定期检查多个文件,或在 CI 中发现不合格字幕。

使用示例

  • “按 Netflix English 标准检查这个 SRT,并列出有问题的字幕。”
  • “检查字幕阅读速度和行长,在不改动说出内容的前提下修正。”
  • “编写一个能在 CI 中运行的字幕检查程序。”

注意事项

支持的格式是 SRT 和 WebVTT。按帧判断字幕间隔需要帧率;未提供时假定为 24 fps。ASS 文件需先转换为 SRT。数值指标合格并不保证能通过字幕风格审核。

本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。

文档检查

AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。

安全性发送数据、删除文件、执行命令等是否有说明
B部分不足涉及修改字幕和编写 CI 脚本,但未说明覆盖前的确认步骤。
安装难易度所需工具和 API 密钥是否少且有说明
A良好明确说明重复运行检查只需要 Python 3。

不计入评分。 由 AI(OpenAI Codex)于 2026年10月27日 评估。仅供参考,安装前请同时查看原文。

如果您认为评估有误,请申请复核

请写明哪一项有误以及原因。无需登录。我们会对照 SKILL.md 重新评估,并在此处更新结果。

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

包含的文件(1)

  • SKILL.md8.2 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Caption QA

Captions fail delivery and accessibility review on numbers: characters a second, characters a line, time on screen and the gap between captions. Each standard publishes its own limits, and they differ, so "are these captions OK?" has no answer until you know where they are going. This skill picks the right set of limits, measures every cue the same way the published limits are written, and fixes failures without cutting the speaker's words.

When to Use This Skill

  • The user has an .srt or .vtt file and asks whether it is ready to ship, or why a platform rejected it.
  • The user asks whether captions or subtitles read too fast, or have lines that are too long.
  • Captions are headed for Netflix, a broadcaster, or US educational media, and must meet that spec.
  • The user wants caption checks in CI so a bad file fails the build.

Pick the Standard

If the user names no target, use Netflix English (adult) and say that you did.

StandardReading speedLine lengthLinesTime on screenGap between captions
Netflix English, adult20 characters a second42 characters25/6 s to 7 sAt least 2 frames; close gaps under 0.5 s to 2 frames
Netflix English, children's17 characters a second42 characters25/6 s to 7 sSame as adult
BBC subtitle guidelines160-180 words a minute; aim for about 0.3 s a word37 characters (broadcast); online, 68% of the width of a 16:9 frame2-If you leave a gap, at least 1 s, preferably 1.5 s
DCMP Captioning Key (US educational media)130 / 140 / 160 words a minute for lower / middle / upper level-2 (preferred)40 frames (1 s 10 frames) to 6 s-

Sources: Netflix English (USA) Timed Text Style Guide, Netflix subtitle timing guidelines, BBC subtitle guidelines, DCMP Captioning Key: text and presentation rate. The BBC's per-word time and minimum gap are guidance, so report them as suggestions, not failures.

Measure Every Cue the Same Way

  • Characters are letters, digits, spaces and punctuation in the displayed text. Don't count line breaks, formatting tags (<i>, <b>, {\an8}) or the cue number.
  • Reading speed is characters divided by duration (out-time minus in-time), in seconds.
  • Words a minute is words divided by duration, times 60. A word is a run of characters that holds a letter or a digit, so a lone dash isn't one.
  • Gap runs from one cue's out-time to the next cue's in-time. Frame limits depend on the frame rate: 2 frames is 0.083 s at 24 fps but 0.067 s at 30 fps. Ask for the frame rate, or state that you assumed 24 fps.
  • Overlap: a cue that ends after the next one starts is always a failure, under every standard.
  • Read both timestamp forms: 00:00:01,000 (SRT) and 00:00:01.000 or 01.000 (WebVTT). Skip WebVTT NOTE, STYLE and REGION blocks, and treat cue settings after the timestamps (align:start) as part of the timing line.

Workflow

  1. Find the target (platform, broadcaster or audience level) and pick the standard from the table.
  2. Measure every cue, or run the command-line check below and read its output.
  3. Report with a count line first ("212 of 240 captions meet Netflix English, adult"). Then group failures by rule, with cue numbers and timecodes. Show the first few cues of each kind instead of hundreds of lines.
  4. Fix, keeping the words, in this order:
    1. Extend the out-time into the following gap, keeping the minimum gap.
    2. Start the cue earlier if the previous cue ends well before it.
    3. Split a long cue into two at a phrase boundary, each one meeting the minimum time on screen.
    4. Merge a flash cue (under the minimum time) into its neighbor.
    5. Re-break lines: break after punctuation or before a conjunction or preposition, and keep an article with its noun and a first name with a last name.
    6. Edit the wording only when the user asks for edited (not verbatim) captions.
  5. Measure again after fixing. A retime can create a new overlap or a gap under the minimum.

Reference Check Script

When the user wants a repeatable check (a folder of files, or CI), write this script, or adapt it to the chosen standard. It applies the Netflix adult limits from the table, prints each failing caption and exits with 1 when any caption fails, so it can gate a build. It needs only Python 3.

import re
import sys

# Netflix English, adult programs. Change these for another standard.
LIMITS = {"cps": 20, "cpl": 42, "lines": 2, "min_s": 5 / 6, "max_s": 7, "gap_frames": 2}
FPS = 24
T = r"(?:(\d+):)?(\d{1,2}):(\d{1,2})[,.](\d{1,3})"
TIMING = re.compile(T + r"\s*-->\s*" + T)
TAGS = re.compile(r"<[^>]+>|\{\\[^}]*\}")


def seconds(h, m, s, ms):
    return int(h or 0) * 3600 + int(m) * 60 + int(s) + int((ms + "00")[:3]) / 1000


def read_cues(path):
    text = open(path, encoding="utf-8-sig").read().replace("\r\n", "\n")
    for block in re.split(r"\n[ \t]*\n", text):
        lines = block.strip().split("\n")
        for i, line in enumerate(lines[:3]):
            m = TIMING.search(line)
            if m:
                body = [TAGS.sub("", t).rstrip() for t in lines[i + 1:]]
                g = m.groups()
                yield seconds(*g[:4]), seconds(*g[4:]), [t for t in body if t.strip()]
                break


def check(path, lim=LIMITS, fps=FPS):
    cues, failed = list(read_cues(path)), 0
    for n, (start, end, text) in enumerate(cues, 1):
        dur, chars, issues = end - start, sum(len(t) for t in text), []
        if dur > 0 and chars / dur > lim["cps"]:
            issues.append(f"{chars / dur:.1f} characters a second")
        issues += [f"line {j} is {len(t)} characters"
                   for j, t in enumerate(text, 1) if len(t) > lim["cpl"]]
        if len(text) > lim["lines"]:
            issues.append(f"{len(text)} lines")
        if dur < lim["min_s"] or dur > lim["max_s"]:
            issues.append(f"on screen {dur:.2f} s")
        if n < len(cues):
            gap = cues[n][0] - end
            if gap < 0:
                issues.append(f"overlaps the next caption by {-gap:.2f} s")
            elif gap * fps < lim["gap_frames"] - 0.01:
                issues.append(f"gap of {gap * fps:.0f} frames at {fps} fps")
        if issues:
            failed += 1
            print(f"{path} #{n} {start:.3f} -> {end:.3f}: " + "; ".join(issues))
    print(f"{path}: {len(cues) - failed} of {len(cues)} captions pass")
    return failed == 0


if __name__ == "__main__":
    results = [check(p) for p in sys.argv[1:]]
    sys.exit(0 if results and all(results) else 1)

Run it as python3 check_captions.py captions/*.srt. For another standard, change LIMITS, and add a words-a-minute check (words divided by duration, times 60) for the BBC and DCMP. The script doesn't check the advice-level rules (chaining short gaps, the BBC's per-word time); report those separately.

In GitHub Actions:

- run: python3 check_captions.py captions/*.srt

Gotchas

  • Meeting these numbers doesn't certify a file. Netflix and broadcasters also review style: italics, speaker labels, sound descriptions and position.
  • The limits were read from each standard's own page in October 2026. Check the source before quoting a limit as current.
  • Only SRT and WebVTT are covered. Convert ASS first with ffmpeg -i subs.ass subs.srt, which keeps the timing and wraps the text in font tags that the character count ignores.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

扫描现有项目的代码与配置,生成涵盖技术栈、结构、架构、规范、集成、测试和风险的七份文档。为结论标注文件依据和未知项,并指出计划描述与实际实现的差异。

  • 了解陌生代码库
  • 准备项目交接文档
  • 对照设计资料与实际实现
github/awesome-copilot4.1万2026年10月29日 更新

acreadiness-assess

免费有简介

使用AgentRC评估代码仓库对AI智能体的准备情况,并生成可独立打开的HTML报告。查看九个方面的评分和优先改进建议,也可按组织自定评分政策。

  • 引入AI智能体前检查准备情况
  • 根据评估结果安排改进优先级
  • 按组织自定政策评分
github/awesome-copilot4.1万2026年10月29日 更新

使用AgentRC分析项目代码中的语言、框架和开发惯例,生成或更新AI编程代理的指令文件。可集中写入一个文件,也可按主题和项目区域拆分,并在写入前预览改动。

  • 创建VS Code Copilot指令
  • 将开发规则变更写入指令
  • 按单体仓库区域整理规则
github/awesome-copilot4.1万2026年10月29日 更新

acreadiness-policy

免费有简介

按团队或组织标准调整AgentRC准备度评估。可选择或创建JSON策略,调整检查权重、停用无关检查、设置通过率,并在CI流程中设定自动检查门槛。

  • 制定组织共用的评估标准
  • 只评估AI相关的准备情况
  • 调整特定检查项的权重
github/awesome-copilot4.1万2026年10月29日 更新

ad-campaign-analyzer

免费有简介

分析你提供的广告成效数据,找出浪费支出和表现较好的广告,并整理暂停、加预算或继续测试的候选项。还可比较不同平台、评估A/B测试差异,并提出预算调整建议。

  • 找出应暂停的广告或关键词
  • 发现适合增加预算的广告系列
  • 判断A/B测试的数据是否足够
github/awesome-copilot4.1万2026年10月29日 更新

为指定代码文件添加学习注释,解释语法、编程概念和设计选择;可按读者水平调整讲解深度和重复频率,并保持文件结构、编码与语法。

  • 为现有代码添加初学者说明
  • 解释语法或设计选择的原因
  • 按读者经验调整注释内容
github/awesome-copilot4.1万2026年10月29日 更新

查看 github 的全部技能

报告此技能的问题