Skills

Speaker Labeling

视频里有几个人说话、要区分是谁在说或给说话人标名字时用:没区分说话人的文稿按声纹重新转录并区分,再从文稿与来源信息里找证据给每位起真名,写回转写的...

Install

npx skills add JimLiu/baocut --skill speaker-labeling -g -a claude-code -y
Repository
JimLiu/baocut1.6k
Category
Engineering
Updated
3d ago
License
See repository
Context cost
Lightabout 614 tokens
Runs scripts
No, instructions only

What it does

视频里有几个人说话、要区分是谁在说或给说话人标名字时用:没区分说话人的文稿按声纹重新转录并区分,再从文稿与来源信息里找证据给每位起真名,写回转写的 speakers。只改说话人,不改正文的字。只有一个人说话、或用户只要校对错字时不用。

说话人标注

用户要的是:文稿里每句话前面是真名,字幕上看得出谁在说,导出的文稿和配音按人分开。这件事分两步:先分清有几个声音、每句归谁(区分),再给每个声音一个真名(标注)。区分靠语音模型,标注靠证据,两步都不靠猜。

最容易做坏的样子是猜:看到简介里列了两位嘉宾,就把「说话人 1」「说话人 2」按顺序填上去。猜错的名字会出现在每一条字幕和每个导出的文件里,用户往往要看到很后面才发现,比留着「说话人 1」糟得多。

1. 先看现状

用 videos_inspect 找到这个视频的转写(kind 为 speech 的文档;有几份时按来源素材对上用户说的那段),再 documents_read 读它:

  • 正文的 speakers[] 列出每位说话人的 id 和 name,每个词带说话人。
  • 已经区分过(有两位及以上说话人):跳到第 3 节,只做标注。
  • 没区分(只有一位,或词上没有说话人),但用户说视频里不止一个人:做第 2 节。
  • 用户只想换名字、不想重跑时,也只做第 3 节。

2. 区分:按声纹重新转录

区分要重新转录,并取代当前文稿,不另建一份。这一步会丢掉用户在文稿里手改过的字,所以先说清楚再做:

  1. 先告诉用户:重新转录会取代当前文稿,之后在文稿里手改过的字会被丢掉;译文、字幕与配音会按新文稿结转。用户同意再继续。
  2. 用 transcribe 给这个视频、diarize 为 true、target 为 replace;语言与提示(人名、术语)沿用这份文稿的,用户给了新的就用新的。
  3. 模型不能区分时任务照常完成,结果带 diarization-unavailable 警告:告诉用户这个模型分不了说话人,要装「说话人区分」模型包或换能区分的模型;不要假装区分好了。
  4. 文稿转录之后被用户改过时,取代会以 TRANSCRIPT_EDITED 拒绝:把这一点告诉用户,用户确认丢掉那些修改,才加 acceptEdited 重来。
  5. 任务完成后重新 documents_read,看分出了几位、每位说了多少。

3. 标注:给每位起名字

动手前先把每位说话人的证据找齐,再一起定名字:

  • 占位名:转写流程自动起的「说话人 n」及它在别的界面语言里的对应(Speaker 1、Sprecher 1 这类「说话人 + 编号」)、识别服务给的编号标签(SPEAKER_00、S1、spk-1),以及名字为空或等于 id 的。别的名字是用户起的,不动。
  • 证据从哪来:文稿开头一段;每位说话人第一次开口前后的几句;来源素材的标题、发布者与简介(videos_inspect 的 assets[].source);画面上的姓名条:用 videos_frames 取开头一两分钟和每位首次开口处的几帧看,姓名条要明确标着这一位在说话,画面上随便出现的名字不算。
  • 什么算证据:自我介绍(「我是……」「my name is …」);对方引介(「今天请到了……」「welcome, …」);被点名后紧接着这一位的回应;签名式的收尾;来源信息唯一地指明了其中一位。元数据里列出几位嘉宾、但分不出哪个声音是谁时,还要文稿里的证据。发言顺序、说话人编号、话题本身都不算;反过来,标题或简介点出了参与者时更要逐位找证据,把名字对到声音上。
  • 名字怎么写:材料里实际用的形式,通常是全名,没有全名时用出现的那种;保留原来的文字与拼写,不翻译、不音译;不加头衔、敬称、机构、括号、引号或说明;不超过 40 个字符。没有名字、但明确说了角色(主持人、采访者、旁白)时可以用简短的角色标签;不能只凭对话的样子编一个角色。
  • 不猜:拿不准就保留占位名。
  • 一人几个 id:区分可能把同一个人拆成几个 id,或把两个人并成一个。各自有证据时给几个 id 同一个名字,不合并 id;声音差别大、拿不准是不是同一个人时,先问用户。

对比一下(只是示意):

不好:简介写着「嘉宾:张三、李四」,于是「说话人 1」改成张三、「说话人 2」改成李四。

好:00:12 主持人说「今天请到了张三」,紧接着「说话人 2」答「大家好」,所以「说话人 2」是张三;「说话人 1」一直在提问、没人叫过他的名字,简介也没写主持人是谁,保留占位名,或按用户的意思标成「主持人」。

4. 先确认,再写回

Read the whole SKILL.md on GitHub

More in Engineering