音频片段切分-时间戳
更新时间:2026-05-18
音频片段切分(时间戳)
简介
音频片段切分处理器,按给定的时间戳区间列表将音频文件分割为多个片段,基于 FFmpeg 实现。
功能描述
- 根据传入的时间戳区间
[[start, end], ...]精确切分音频片段 - 每条数据可对应不同的时间戳区间列表,适用于语音识别后的精细切分场景
- 支持本地路径输入或二进制数据输入
- 可选择同时返回片段的二进制内容
- 可指定输出格式,默认保留原始格式(codec copy 模式)
- 可将片段上传至 BOS 存储目录
算子参数
输入
| 输入 | 含义 |
|---|---|
| timestamp_ranges | 时间戳区间数组(必填),每行为 [[start1, end1], [start2, end2], ...] 格式(秒) |
| audio_paths | 音频文件路径数组(可选,与 audio_binaries 二选一) |
| audio_binaries | 音频二进制数据数组(可选,与 audio_paths 二选一) |
| audio_formats | 音频格式标识数组,如 "mp3"(binary 输入时需提供) |
| output_basenames | 输出子目录名数组(可选) |
输出
| 输出字段 | 类型 | 含义 |
|---|---|---|
| segments | list[string] | 切分后各片段的文件路径列表 |
| binaries | list[binary] | 切分后各片段的二进制内容(仅 output_segments_binary=True 时有值) |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| output_bos_dir | str | "" | 片段上传目标 BOS 目录,为空则保存到本地 |
| output_segments_binary | bool | False | 是否同时返回片段的二进制内容 |
| output_format | str 或 None | None | 输出格式,None 表示保留原始格式(codec copy) |
调用示例
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.audio.audio_split_by_timestamps import AudioSplitByTimestamps
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 "audio_path": [
20 "/tmp/test_interview1.mp3",
21 "/tmp/test_interview2.mp3",
22 ],
23 # 每条数据对应不同的时间戳区间
24 "timestamp_ranges": [
25 [[0.0, 5.2], [8.1, 15.6], [20.0, 30.0]],
26 [[0.5, 10.0], [12.3, 25.8]],
27 ],
28 }
29 ds = daft.from_pydict(samples)
30 constructor_kwargs = {
31 "output_segments_binary": False,
32 }
33 ds = ds.with_column(
34 "split_result",
35 aihc_udf(
36 AudioSplitByTimestamps,
37 construct_args=constructor_kwargs,
38 num_cpus=1,
39 concurrency=2,
40 batch_size=4,
41 )(col("timestamp_ranges"), col("audio_path")),
42 )
43 ds = ds.with_column("segments", col("split_result")["segments"])
44 ds.show()
评价此篇文章
