时间戳片段合并
更新时间:2026-05-18
时间戳片段合并
简介
时间戳片段合并算子,对秒级时间区间列表进行规范化、小间隙合并和最大时长约束切分,适用于语音识别(VAD/ASR)后的片段整理场景。
功能描述
- 对输入的时间区间列表进行格式规范化(支持多种嵌套格式)
- 可选:先合并相邻区间之间的小间隙(pre_merge_gap_seconds)
- 使用"最大间隙优先"算法,将超长连续区间按最大间隙切分,保证每段不超过 max_span_seconds
- 可选:对仍超过 max_span_seconds 的区间强制等分(enforce_chunking=True)
- 支持设置全局起始时间偏移(start_time)
- 输入为 None 或空时返回空列表,不抛出异常
算子参数
输入
| 输入 | 含义 |
|---|---|
| timestamps | 时间区间列表数组,每行为 [[start1, end1], [start2, end2], ...] 格式(秒),支持多种嵌套格式 |
输出
| 输出 | 含义 |
|---|---|
| merged_timestamps | 合并后的时间区间列表(list[list[float32]]),每个元素为 [start, end] |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| start_time | float | 0.0 | 全局时间偏移量(秒),所有区间起点不小于此值 |
| pre_merge_gap_seconds | float | 0.0 | 预合并间隙阈值(秒),相邻区间间距小于此值时合并为一段 |
| max_span_seconds | float | 20.0 | 单个输出区间的最大时长(秒),超过此值时按最大间隙优先算法切分 |
| enforce_chunking | bool | False | True 表示对仍超过 max_span_seconds 的区间强制等分切块 |
调用示例
Plain Text
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.other.timestamps_merge import TimestampsMerge
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18 samples = {
19 # 每行为一个音频文件对应的时间戳区间列表(如 VAD 结果)
20 "vad_timestamps": [
21 [[0.5, 3.2], [3.5, 8.1], [9.0, 15.6], [16.0, 18.0], [18.5, 35.0]],
22 [[0.0, 5.0], [5.5, 25.0], [26.0, 30.0]],
23 ]
24 }
25 ds = daft.from_pydict(samples)
26 constructor_kwargs = {
27 "pre_merge_gap_seconds": 0.5, # 间距 < 0.5s 的区间合并
28 "max_span_seconds": 20.0, # 单段最长 20s
29 "enforce_chunking": False,
30 }
31 ds = ds.with_column(
32 "merged_timestamps",
33 aihc_udf(
34 TimestampsMerge,
35 construct_args=constructor_kwargs,
36 num_cpus=1,
37 concurrency=4,
38 batch_size=64,
39 )(col("vad_timestamps")),
40 )
41 ds.show()
评价此篇文章
