Label Studio 音频视频段落示例实战:Paragraphs 标签与音视频同步标注配置解析
2026/9/13 23:05:28 网站建设 项目流程

Label Studio 音频视频段落示例实战:Paragraphs 标签与音视频同步标注配置解析

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

本篇指南基于 Label Studio 前端编辑器仓库中的audio_video_paragraphs示例,讲解如何在一个标注界面中同时处理视频、音频情绪标签与逐段对话文本分类:完整继承示例自带的安装与启动命令,逐属性解析其config.xml标注配置,并给出任务数据与标注结果(result结构)的标准格式,帮助读者掌握 Paragraphs、Audio、Video 三类标签通过sync属性实现时间轴联动标注的实战方案。

示例目录结构与文件角色

示例位于 audio_video_paragraphs 目录,共包含 4 个核心文件,各自承担明确职责:

文件作用
START.md安装与启动指南,即本篇的核心依据文档
config.xmlLabel Studio 标注配置,定义视频播放器、音频标签、段落分类标签与段落展示区
tasks.json示例任务数据,包含一段视频 URL 与 5 条带说话人、时间戳的对话
annotations/1.json一份完整的标注结果样本,展示result数组的标准结构
index.js将上述三个文件作为AudioVideoParagraph具名导出,供编辑器示例集合引用

其中 index.js 的内容只有 5 行:

import config from "./config.xml"; import tasks from "./tasks.json"; import annotation from "./annotations/1.json"; export const AudioVideoParagraph = { config, tasks, annotation };

可以推断:示例以{ config, tasks, annotation }三元组的形式打包导出,使编辑器侧的示例页/Playground 能够直接加载这份配置、任务数据以及预置标注进行回显演示。

安装与启动(继承自 START.md)

START.md 给出的启动场景是:"Listen to the audio transcriptions, watch the video, and classify"——即边听音频转录、边看视频、边做分类。文档提供了 Linux / Ubuntu 下的独立运行环境搭建步骤:

# 安装 python 和 virtualenv apt install python3.6 pip3 install virtualenv # 建立 Python 虚拟环境 virtualenv -p python3 env3 source env3/bin/activate # 安装依赖 cd backend pip install -r requirements.txt

随后用独立服务器加载配置与任务数据并启动:

python server.py -c config.json -l ../examples/audio_video_paragraph/config.xml -i ../examples/audio_video_paragraph/tasks.json -o output

其中各参数含义为:-c指定服务器配置文件,-l指定标注配置(config.xml),-i指定任务数据(tasks.json),-o指定标注结果输出目录。

需要说明的是:该命令属于示例文档记载的旧版独立 playground 服务器运行方式,server.pybackend/requirements.txt对应的是早期独立部署形态;在当前仓库中,这个示例的核心价值已经转移到编辑器库本身——标注配置、任务与结果文件都可直接被前端编辑器消费。如果你只是想在当前仓库中复现该标注场景,重点是读懂并复用config.xmltasks.json,将其提交给 Label Studio 的主服务(例如通过任务导入接口)即可,而不必拘泥于旧版server.py

config.xml 标注配置逐属性解析

下面是该示例完整的标注配置(原文见 config.xml),它是整个示例的核心:

<View> <Video name="video" value="$video" sync="sync1" /> <Labels name="audio_label" toName="audio"> <Label value="Positive" background="red"></Label> <Label value="Negative" background="green"></Label> <Label value="Neutral" background="yellow"></Label> </Labels> <Audio name="audio" value="$video" hotkey="space" sync="sync1" /> <ParagraphLabels name="label" toName="text"> <Label value="Important Stuff"></Label> <Label value="Random talk"></Label> </ParagraphLabels> <Paragraphs audioUrl="$video" name="text" value="$dialogue" layout="dialogue" savetextresult="yes" sync="sync1" /> </View>

该配置由一个展示媒体源(Video + Audio)、两个标签定义(Labels + ParagraphLabels)和一个文本展示区(Paragraphs)组成,共完成三类标注任务:

1. Video 标签:视频播放与同步锚点

<Video name="video" value="$video" sync="sync1" />
  • value="$video":从任务data中取$video字段作为视频源,对应 tasks.json 中的data.video
  • sync="sync1":声明该播放器加入名为sync1的同步组。

2. Labels:音频区段的情绪标签

<Labels name="audio_label" toName="audio"> <Label value="Positive" background="red"></Label> <Label value="Negative" background="green"></Label> <Label value="Neutral" background="yellow"></Label> </Labels>

toName="audio"表明标签作用对象是名为audio的 Audio 标签。标注者在音频时间轴上拖选一段区间,然后从 Positive / Negative / Neutral 三个情绪标签中选取一个,background属性决定区间在时间轴上的着色。

3. Audio 标签:与视频共享同一时间轴

<Audio name="audio" value="$video" hotkey="space" sync="sync1" />

几个关键属性:

  • value="$video":音频直接取自视频文件本身(mp4 中的音轨),不再单独提供音频文件;
  • hotkey="space":空格键控制播放/暂停,符合音频标注的操作习惯;
  • sync="sync1":与 Video 标签处于同一同步组——两者进度条联动,拖动任一方,另一方同步到同一时间点。这是本示例能"边看视频边听音频并给音频打情绪标签"的技术基础。

4. ParagraphLabels:对话段落的二分类标签

<ParagraphLabels name="label" toName="text"> <Label value="Important Stuff"></Label> <Label value="Random talk"></Label> </ParagraphLabels>

toName="text"指向名为text的 Paragraphs 标签,即对每一段对话(或跨段合并后的区间)标注"重要内容"或"闲聊"。

5. Paragraphs:对话式文本布局与同步

<Paragraphs audioUrl="$video" name="text" value="$dialogue" layout="dialogue" savetextresult="yes" sync="sync1" />
  • value="$dialogue":文本来源是任务data中的对话数组;
  • layout="dialogue":按"对话"版式渲染,每段显示作者与文本,适合多人对话场景;
  • savetextresult="yes":标注结果中会保存所选区间的起止偏移(startOffset/endOffset),保证导出的结果可精确定位到原文;
  • audioUrl="$video":段落点击/选中时可关联跳转对应的音视频时间点;
  • sync="sync1":同样加入同步组,使段落高亮与视频/音频进度联动。

从源码结构看,段落选中区的渲染逻辑对应前端区域实现 ParagraphsRegion.js,音频区段时间轴对应 AudioRegion.js,两者均位于 regions 目录下,与配置中的paragraphlabels/labels结果类型一一对应。

任务数据格式(tasks.json)

示例任务结构见 tasks.json:

[ { "data": { "video": "https://app.heartex.ai/static/samples/opossum_snow.mp4", "dialogue": [ { "start": 3.1, "end": 5.6, "author": "Mia Wallace", "text": "Dont you hate that?" }, { "start": 10.2, "duration": 3.1, "author": "Vincent Vega:", "text": "Hate what?" }, { "author": "Mia Wallace:", "text": "Uncomfortable silences. ..." }, { "start": 20, "author": "Vincent Vega:", "text": "I dont know. Thats a good question." }, { "author": "Mia Wallace:", "text": "Thats when you know you found somebody really special. ..." } ] } } ]

可以观察到任务数据对时间戳的三种兼容写法:

  1. start+end(绝对起止秒数);
  2. start+duration(起始秒数 + 时长);
  3. 只给authortext,不提供时间信息——这类段落无法与时间轴精确对齐,但依然可以参与段落分类标注。

编写自己的任务数据时,保持data.video为可访问的媒体地址、data.dialogue为段落对象数组(字段名与 Paragraphs 的value映射一致)即可复用同一份 config.xml。

标注结果格式(annotations/1.json)

预置标注 annotations/1.json 展示了这个示例导出后的标准结果结构,其中一次标注的result数组包含两个对象,分别对应"段落分类"与"音频情绪标签":

{ "annotations": [ { "result": [ { "id": "ryzr4QdL93", "from_name": "label", "to_name": "text", "source": "$dialogue", "type": "paragraphlabels", "value": { "start": "2", "end": "4", "startOffset": 0, "endOffset": 134, "paragraphlabels": ["Important Stuff"] } }, { "id": "ryzr4QdL94", "from_name": "audio_label", "to_name": "audio", "source": "$video", "type": "labels", "value": { "start": 2, "end": 4, "labels": ["Neutral"] } } ] } ], "id": 0, "task_path": "../examples/audio_video_paragraphs/tasks.json" }

解读要点:

  • from_name/to_name:与 config.xml 中的标签name属性严格对应——label(ParagraphLabels)作用于text(Paragraphs),audio_label(Labels)作用于audio(Audio);
  • type:结果类型即标签组件类型,paragraphlabelslabels两种,分别匹配两类选择器;
  • 段落结果(type 为paragraphlabels):value.start/value.end是段落序号区间(第 2 段到第 4 段),startOffset/endOffset是字符偏移,由savetextresult="yes"开启后保存,用于精确定位原文;
  • 音频结果(type 为labels):value.start/value.end是秒级时间点(2 秒至 4 秒),labels记录选中的情绪标签;
  • source:标明该结果绑定的任务数据字段($dialogue$video),便于导出后与原始数据回联。

这一结构正是 Label Studio 标准化输出格式的体现:不同标签组件的结果统一收敛为id / from_name / to_name / source / type / value六元组,下游训练或评测脚本可以按type分发处理。

小结

这个示例展示了 Label Studio 多模态组合标注的典型模式:

  1. Video+Audio双播放器配合sync属性实现音视频时间轴联动,Audiohotkey提升连续标注效率;
  2. Labels(时间区间标签)对音频打情绪标签,用ParagraphLabelsParagraphs对话段落做文本分类;
  3. 任务数据以data对象承载媒体地址与段落数组,标注结果以统一result结构导出。

在 examples 目录下还可以参考其他多模态示例,按同样的"config.xml+tasks.json+annotations"三元组模式扩展自己的音视频段落标注场景。

【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询