Label Studio Video 标签详解:视频标注配置、播放器参数与 FFmpeg 预处理实战
2026/9/13 10:54:55 网站建设 项目流程

Label Studio Video 标签详解:视频标注配置、播放器参数与 FFmpeg 预处理实战

【免费下载链接】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 的<Video>标签用于在标注界面中播放并展示视频文件,支撑视频分类、转写(transcription)、帧级分类、目标跟踪与时间轴分段等典型标注任务。本文以官方 Video 标签文档为骨架,结合前端编辑器源码(Video.js)与仓库内置的视频标注模板(label_studio/annotation_templates/videos/),系统讲解视频格式兼容性要求、FFmpeg 预处理命令、全部标签参数、播放速度控制机制,以及分类、转写、跟踪等完整标注配置示例。

适用场景与数据约束

<Video>标签专门处理video类型的数据,适合两类最常见的标注需求:

  • 视频分类:对整段视频做出类别判断,配合<Choices>等输出控件使用;
  • 视频转写:观看视频并记录文本内容,配合<TextArea>使用。

在此基础上,它也是帧级分类(配合<TimelineLabels>)、目标跟踪(配合<VideoRectangle><Labels>)和时间轴分段(配合<Timeline>)等高级任务的播放基础。从源码结构看,Video 标签模型通过toNames关联查找labelstimelinevideorectanglevideovector等控制标签(见 Video.js),说明它是整个视频标注生态的播放容器。

视频格式与编码:为什么必须做预处理

Label Studio依赖浏览器来播放视频并计算总帧数,因此视频的封装格式与编码必须被浏览器普遍支持。官方推荐的组合是:

  • 容器:MP4
  • 视频编码:H.264(AVC)
  • 音频编码:AAC

该组合在现代浏览器中兼容性最好,能最大程度避免总时长检测错误、播放异常等问题。同时,视频应转换为恒定帧率(CFR),理想值为 30 fps,以避免帧数偏差、重复帧或丢帧问题;文件内所有音视频流的时长必须一致,否则会出现多余的总帧数。这些限制的根本原因在于:编辑器需要把时间映射为离散的帧号(Video.js 中的framelengthcurrentFrame等状态均以帧为基准),帧率与时长不准确会直接导致标注区间错位。

FFmpeg 转码命令详解

官方文档提供了两个 FFmpeg 命令。第一个用于提取视频流的精确时长,第二个用于重新编码为标准格式:

# 提取视频流的精确时长(秒) DUR=$(ffprobe -v error -select_streams v:0 -show_entries stream=duration -of default=nokey=1:noprint_wrappers=1 input.mp4) # 重新编码为推荐格式 ffmpeg -i input_video.mp4 -c:v libx264 -profile:v high -level 4.0 -pix_fmt yuv420p -r 30 -c:a aac -b:a 128k -to $DUR output_video.mp4

各参数含义如下:

参数作用
-i input_video.mp4指定源视频
-c:v libx264使用 H.264 编码器
-profile:v high -level 4.0设置兼容性参数,覆盖大多数设备
-pix_fmt yuv420p采用大多数浏览器兼容的像素格式
-r 30强制恒定 30 fps;若能 100% 确定源视频已是恒定帧率,可省略此参数
-c:a aac -b:a 128k音频编码为 AAC,码率 128 kbps
-to $DUR容器时钟到达视频结束时间戳即停止输出,自动丢弃多余音频尾巴
output_video.mp4转码后可直接用于 Label Studio 的文件

建议转码前用以下命令全面检查视频的所有参数(格式、流信息、帧率、时长):

ffprobe -v error -show_format -show_streams -print_format json input.mp4

Video 标签参数速查

参数类型默认值说明
namestring元素名称(必填)
valuestring视频的 URL(必填),常以$video引用任务数据字段
frameRatenumber24视频每秒帧数,默认 24;可直接使用任务数据,如$fps
syncstring需要同步的(音频/视频)对象名称,用于音视频同步标注
mutedbooleanfalse是否静音播放
heightnumber600视频播放器高度(像素)
timelineHeightnumber64带标注区域的时间轴高度(像素)
defaultPlaybackSpeednumber1播放器加载时的初始播放速度
minPlaybackSpeednumber1允许的最小播放速度,defaultPlaybackSpeed不能低于该值

注意:官方参数速查表中minPlaybackSpeed的文档默认值标为1,但从编辑器源码看,标签模型实际将minplaybackspeed的默认值设为"0.25"(见 Video.js),并在初始化时将最小允许速度钳制在0.2510之间(Video.js)。文档默认值1意味着默认情况下最小速度即为正常速度;若要允许慢放,需显式指定更小的minPlaybackSpeed

参数在源码中的处理细节

  • 帧率归一化frameRate在初始化时会被解析并归一化——若任务数据中无有效值则回退到"24";若值小于 1(如0.5表示每 2 秒一帧),会被转换为1 / frameRate(见 Video.js)。因此你既可以在配置中写死数值,也可以写成frameRate="$fps"引用任务数据字段。
  • 播放速度钳制:源码设定了MIN_PLAYBACK_SPEED = 0.25MAX_PLAYBACK_SPEED = 10minPlaybackSpeed会被限制在[0.25, 10]defaultPlaybackSpeed则被限制在[minPlaybackSpeed, 10]区间内(Video.js),且播放器初始速度直接取defaultPlaybackSpeed。这意味着配置里写的defaultPlaybackSpeed即使超出范围,也会被安全钳制,不会导致播放器异常。

基础用法示例

示例一:最小配置(仅播放视频)

<View> <Video name="video" value="$video" /> </View>

示例二:自定义播放速度

<View> <Video name="video" value="$video" defaultPlaybackSpeed="2" minPlaybackSpeed="1.5" /> </View>

播放器载入后会以 2 倍速启动,且速度调节不能低于 1.5 倍速。注意defaultPlaybackSpeed不能小于minPlaybackSpeed,源码中会将前者钳制到[minPlaybackSpeed, 10]区间。

示例三:视频分类

<View> <Video name="video" value="$video" /> <Choices name="ch" toName="video"> <Choice value="Positive" /> <Choice value="Negative" /> </Choices> </View>

仓库内置的视频分类模板与上述结构一致,并在示例数据中给出了 predictions 结果格式(from_namechoiceto_namevideotypechoices),可直接参考。

示例四:视频转写

<View> <Video name="video" value="$video" /> <TextArea name="ta" toName="video" /> </View>

进阶应用:结合其他标签构建完整标注场景

<Video>标签通常与以下控制标签组合使用,构成完整的视频标注工作流:

视频目标跟踪(VideoRectangle + Labels)

VideoRectangle 标签专门为视频目标跟踪设计,需要与<Video><Labels>配合使用。仓库内置的视频目标跟踪模板:

<View> <Labels name="videoLabels" toName="video" allowEmpty="true"> <Label value="Man" background="blue"/> <Label value="Woman" background="red"/> <Label value="Other" background="green"/> </Labels> <!-- 请仔细指定 FPS,它将用于该项目所有视频 --> <Video name="video" value="$video" framerate="25.0"/> <VideoRectangle name="box" toName="video" /> </View>

该模板特别注明:frameRate(此处写作framerate)会影响所有项目视频的帧号映射,务必按实际视频填写。编辑器仓库中的视频目标跟踪示例也是同样的结构(Labels + Video + VideoRectangle)。

视频帧级分类(TimelineLabels)

帧级分类模板在视频下方的时间轴上逐帧打标签:

<View> <TimelineLabels name="videoLabels" toName="video"> <Label value="Movement" background="#c813ec"/> <Label value="Still" background="#1d81cd"/> <Label value="Slow Motion" background="#54d651"/> </TimelineLabels> <Video name="video" value="$video" timelineHeight="120" /> </View>

其中timelineHeight="120"用于放大带标注区域的时间轴高度(默认 64),方便帧级精细标注。Video 模型中的timelineControl视图(见 Video.js)会通过toNames自动关联类型包含timeline的控制标签。

时间轴分段(Timeline 与音视频同步)

仓库还提供了视频时间轴分段示例:由于 Video 标签本身不直接提供时间段选择控件,该示例通过<Audio>标签的sync机制与 HTML 视频叠加,实现逐段标注。这印证了sync参数的用途——将播放状态(播放/暂停/跳转)同步到指定对象(见 Video.js 中的triggerSync/handleSync等同步动作实现)。

数据准备注意事项

上述模板的示例数据均以"/static/samples/opossum_snow.mp4"作为$video字段值。在实际项目中,value可以是:

  • 直接指向视频文件的 URL(如对象存储、本地文件存储地址);
  • 引用任务数据字段($video),字段值由 数据导入 或外部存储(io_storages)提供。

小结

使用<Video>标签的关键要点:

  1. 格式先行:统一转码为 MP4 + H.264 + AAC、恒定帧率(推荐 30 fps),并保证音视频流时长一致,这是浏览器播放与帧数计算正确的前提;
  2. 参数按需配置frameRate(可用$fps引用任务数据)、timelineHeightmutedsync、播放速度参数等均可在标签上直接声明,播放器初始化时会自动做帧率归一化与速度钳制;
  3. 组合使用:分类用<Choices>、转写用<TextArea>、目标跟踪用<VideoRectangle>+<Labels>、帧级分类用<TimelineLabels>,所有控制标签都通过toName指向<Video>name
  4. 源码可追溯:标签的默认值与参数校验逻辑可在 web/libs/editor/src/tags/object/Video/Video.js 中查看,相关标注模板位于 label_studio/annotation_templates/videos/。

【免费下载链接】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),仅供参考

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

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

立即咨询