You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
音频处理
音频片段切分(时长)
复制全文
音频片段切分(时长)

算子介绍

描述

音频按时长切分,支持按固定时长分割音频片段

核心功能

  • 按指定时长切分音频为多个片段
  • 支持多输入格式:
  • 本地文件路径
  • TOS/S3存储路径
  • 二进制数据流
  • 支持片段二进制输出或TOS存储
  • 支持最小片段时长过滤

格式支持

  • MP3 (.mp3)
  • WAV (.wav)
  • FLAC (.flac)
  • OGG (.ogg)
  • AAC (.aac)
  • M4A (.m4a)

Daft 调用

算子参数

输入

输入列名

说明

audio_paths

可选,包含音频文件路径的列

audio_binaries

可选,包含音频二进制数据的列

audio_formats

可选,包含音频格式字符串的列,指定 audio_binaries 时必须指定该列

output_basenames

可选,包含指定文件名的列

输出

一个结构体数组,包含音频切分结果:

  • segments: 片段路径列表
  • binaries: 片段二进制数据列表(可选)

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

output_tos_dir

str

切分后的音频片段保存到 TOS 的路径

output_segments_binary

bool

False

是否返回切分后音频片段的二进制数据

segment_duration

float

5.0

每个片段的时长(单位:秒)

min_segment_duration

float

0.0

最小片段时长(单位:秒)

output_format

str or None

全局指定输出音频格式(如"mp3"、"wav"等),优先级高于输入文件后缀和audio_format列。

调用示例

下面的代码展示了如何使用 Daft(适用于分布式)运行算子对音频按时长切分。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.audio import AudioSplitByDuration
from daft.las.functions.udf import las_udf

if __name__ == "__main__":

    # 更改完切分的音频会保存到指定的TOS路径下,因此,需要设置好环境变量以保证有权限写入TOS,包括:ACCESS_KEY,SECRET_KEY,TOS_ENDPOINT,TOS_REGION,TOS_TEST_DIR
    TOS_DIR = os.getenv("TOS_TEST_DIR", "tos_bucket")
    output_tos_dir = f"tos://{TOS_DIR}/audio/audio_split_by_duration"

    if os.getenv("DAFT_RUNNER", "native") == "ray":
        import logging

        import ray

        def configure_logging():
            logging.basicConfig(
                level=logging.INFO,
                format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                datefmt="%Y-%m-%d %H:%M:%S.%s".format(),
            )
            logging.getLogger("tracing.span").setLevel(logging.WARNING)
            logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
            logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

        ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
        daft.context.set_runner_ray()
    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com")
    samples = {
        "audio_path": [f"https://{tos_dir_url}/public/shared_audio_dataset/sample.mp3"],
    }
    ds = daft.from_pydict(samples)

    constructor_kwargs = {
        "output_tos_dir": output_tos_dir,
        "output_segments_binary": True,
        "segment_duration": 10.0,
        "min_segment_duration": 1.0,
    }

    ds = ds.with_column(
        "split_results",
        las_udf(AudioSplitByDuration, construct_args=constructor_kwargs)(col("audio_path")),
    )

    ds.show()
    # ╭────────────────────────────────┬────────────────────────────────────────────────────────────╮
    # │ audio_path                     ┆ split_results                                             │
    # │ ---                            ┆ ---                                                       │
    # │ Utf8                           ┆ Struct[segments: List[Utf8], binaries: List[Binary]]      │
    # ╞════════════════════════════════╪════════════════════════════════════════════════════════════╡
    # │ https://las-cn-beijing-publi-… ┆ {segments: [tos://tos_bucket/audio/audio_split_by_duration… │
    # ╰────────────────────────────────┴────────────────────────────────────────────────────────────╯
最近更新时间:2026.01.08 19:15:09
这个页面对您有帮助吗?
有用
有用
无用
无用