音频属性与过滤

更新时间:
复制 MD 格式

本文介绍音频函数中属性与过滤类函数的用法,包括 IS_VALID_AUDIO、AUDIO_METADATA、AUDIO_DURATION、AUDIO_DURATION_FILTER 和 AUDIO_SIZE_FILTER。

本文函数由Python 多模态函数库提供(VVR 11.8+),使用前需在 SQL 作业开头添加:

LOAD MODULE python;
USE MODULES python, core;

音频属性类函数用于校验、读取音频元数据;过滤类函数返回 BOOLEAN,可直接用于 WHERE 条件筛选。

函数一览

函数

类别

说明

IS_VALID_AUDIO

校验

通过媒体头探测或完整解码,按指定校验级别判断编码音频能否继续处理并返回布尔结果。适合在外部音频接入、批量回灌或 ASR 前置质量检查,例如先用 metadata 低成本粗筛,再用 decode 排除截断、空音频和解码大小超限的数据。

AUDIO_METADATA

元数据

读取音频的采样率、声道数、帧数、时长、格式、编码器、码率和对象大小等元数据。适合用于音频盘点、质量统计和按属性路由,例如按采样率选择预处理链路,或按格式识别异常数据来源。

AUDIO_DURATION

元数据

计算并返回音频的秒级时长。适合按音频长短分桶、估算处理成本或制定切分策略,例如把超长录音送入固定时长切分,将短录音直接交给 ASR。

AUDIO_DURATION_FILTER

过滤

判断音频时长是否位于指定闭区间,可只设下限、只设上限或同时设置。适合在模型推理或训练前过滤过短、过长样本,例如排除低于 1 秒的无效录音,或拦截超过模型输入上限的音频。

AUDIO_SIZE_FILTER

过滤

按字节判断 BYTES 或 URI 音频对象是否位于指定闭区间,不读取媒体内容。适合在下载、解码或发送到下游服务前控制资源消耗,例如提前拦截超大对象以降低网络和内存压力。

音频属性与过滤

IS_VALID_AUDIO

检查编码音频是否可以读取。该函数不接受解码后的波形。

IS_VALID_AUDIO(audio_input [, validation])

参数

类型

默认值

说明

audio_input

BYTESSTRING 或音频片段引用 ROW

必填

编码音频字节、URI 或音频片段引用。

validation

STRING NOT NULL

'metadata'

校验模式:'metadata' 只探测容器或文件头;'decode' 完整解码。

返回类型: BOOLEAN NOT NULL

  • 返回 FALSE 的情况(可用于 WHERE 过滤脏数据):

    • 输入为 NULL

    • 字节流损坏、截断、格式不识别等可识别的媒体数据错误

  • 抛异常导致作业失败的情况(需要在作业外保证前置条件):

    • URI 无法访问(路径不存在、无权限、网络失败)。

    • 音频片段引用非法(边界越界、引用格式错误)。

    • 依赖缺失、非媒体内部错误。

URI 或片段引用输入必须先在业务侧保证可达,不能靠 IS_VALID_AUDIO 兜底过滤。

-- 字节输入:URI 类问题不适用,只筛媒体损坏
SELECT * FROM raw_audio WHERE IS_VALID_AUDIO(audio_bytes, 'decode');

-- URI 输入:URI 不可达会让作业失败,不会被过滤掉
SELECT * FROM audio_files WHERE IS_VALID_AUDIO(uri, 'decode');
说明

decode 模式的内部解码上限固定为 1 GiB,与 AUDIO_DECODE 的 max_decoded_bytes 默认值一致,暂不支持通过参数调整。PCM 解码后大于 1 GiB 的合法音频会被判为 FALSE。

AUDIO_METADATA

读取编码音频或波形的元数据。

AUDIO_METADATA(audio_input)

参数

类型

默认值

说明

audio_input

BYTESSTRING、音频片段引用 ROW 或音频波形 ROW

必填

要读取元数据的音频。

返回类型: 音频元数据 ROW

  • 输入为 NULL 或编码音频损坏时返回 NULL。URI 访问失败、非法波形、依赖错误等异常仍会抛出。

  • 对音频片段引用,framesduration_ms 按引用区间裁剪,size 仍是完整编码对象的大小。

  • 对音频波形,formatcodecbit_ratesizeNULL

  • 该函数没有 on_error 参数。

-- 推荐:显式单次调用,避免依赖优化器行为
SELECT
  meta.sample_rate,
  meta.duration_ms
FROM (
  SELECT AUDIO_METADATA(audio_bytes) AS meta FROM raw_audio
);

-- 或使用 CTE:
WITH decoded AS (
  SELECT AUDIO_METADATA(audio_bytes) AS meta FROM raw_audio
)
SELECT meta.sample_rate, meta.duration_ms FROM decoded;

AUDIO_DURATION

读取音频时长。

AUDIO_DURATION(audio_input)

参数

类型

默认值

说明

audio_input

BYTESSTRING、音频片段引用 ROW 或音频波形 ROW

必填

要读取时长的音频。

返回类型: DOUBLE,单位为秒。

实现先取得毫秒时长再除以 1000.0。输入为 NULL、编码数据损坏或无法确定时长时返回 NULL;URI 访问等非媒体数据错误仍会抛出。该函数没有 on_error 参数。

SELECT AUDIO_DURATION(audio_bytes) AS duration_seconds
FROM raw_audio;

AUDIO_DURATION_FILTER

判断音频时长是否在指定的闭区间内。

AUDIO_DURATION_FILTER(audio_input, min_seconds [, max_seconds])

参数

类型

默认值

说明

audio_input

BYTESSTRING、音频片段引用 ROW 或音频波形 ROW

必填

要过滤的音频。

min_seconds

DOUBLE

必填

最小时长,包含边界且必须大于或等于 0。三参数形式中可为 NULL

max_seconds

DOUBLE

NULL

最大时长,包含边界且必须大于或等于 0。

返回类型: BOOLEAN NOT NULL

至少一个边界必须非 NULL;同时指定时,max_seconds 必须大于或等于 min_seconds。输入为 NULL、编码音频损坏或时长未知时返回 FALSE。仅设置上限时,使用 NULL 占位:

SELECT *
FROM raw_audio
WHERE AUDIO_DURATION_FILTER(
  audio_bytes,
  CAST(NULL AS DOUBLE),
  30.0
);

AUDIO_SIZE_FILTER

判断编码音频对象的字节数是否在指定的闭区间内。该函数不读取或解码媒体内容,因此数据损坏但大小符合条件时仍返回 TRUE

AUDIO_SIZE_FILTER(audio_input, min_bytes [, max_bytes])

参数

类型

默认值

说明

audio_input

BYTESSTRING

必填

编码音频字节或 URI;不支持片段引用和音频波形。

min_bytes

INTBIGINT

必填

最小字节数,包含边界且必须大于或等于 0。三参数形式中可为 NULL

max_bytes

INTBIGINT

NULL

最大字节数,包含边界且必须大于或等于 0。

返回类型: BOOLEAN NOT NULL

至少一个边界必须非 NULL,并且上限不得小于下限。字节输入直接取长度,URI 输入读取文件大小。输入为 NULL 时返回 FALSE;文件不存在、URI 不可访问或 URI 指向目录时抛出异常。

SELECT *
FROM raw_audio
WHERE AUDIO_SIZE_FILTER(
  audio_bytes,
  NULL,
  10485760
);