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.xml | Label 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.py与backend/requirements.txt对应的是早期独立部署形态;在当前仓库中,这个示例的核心价值已经转移到编辑器库本身——标注配置、任务与结果文件都可直接被前端编辑器消费。如果你只是想在当前仓库中复现该标注场景,重点是读懂并复用config.xml与tasks.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. ..." } ] } } ]可以观察到任务数据对时间戳的三种兼容写法:
start+end(绝对起止秒数);start+duration(起始秒数 + 时长);- 只给
author和text,不提供时间信息——这类段落无法与时间轴精确对齐,但依然可以参与段落分类标注。
编写自己的任务数据时,保持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:结果类型即标签组件类型,paragraphlabels与labels两种,分别匹配两类选择器;- 段落结果(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 多模态组合标注的典型模式:
- 用
Video+Audio双播放器配合sync属性实现音视频时间轴联动,Audio的hotkey提升连续标注效率; - 用
Labels(时间区间标签)对音频打情绪标签,用ParagraphLabels对Paragraphs对话段落做文本分类; - 任务数据以
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),仅供参考