本文介绍音频函数中属性与过滤类函数的用法,包括 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 条件筛选。
函数一览
函数 | 类别 | 说明 |
校验 | 通过媒体头探测或完整解码,按指定校验级别判断编码音频能否继续处理并返回布尔结果。适合在外部音频接入、批量回灌或 ASR 前置质量检查,例如先用 | |
元数据 | 读取音频的采样率、声道数、帧数、时长、格式、编码器、码率和对象大小等元数据。适合用于音频盘点、质量统计和按属性路由,例如按采样率选择预处理链路,或按格式识别异常数据来源。 | |
元数据 | 计算并返回音频的秒级时长。适合按音频长短分桶、估算处理成本或制定切分策略,例如把超长录音送入固定时长切分,将短录音直接交给 ASR。 | |
过滤 | 判断音频时长是否位于指定闭区间,可只设下限、只设上限或同时设置。适合在模型推理或训练前过滤过短、过长样本,例如排除低于 1 秒的无效录音,或拦截超过模型输入上限的音频。 | |
过滤 | 按字节判断 |
音频属性与过滤
IS_VALID_AUDIO
检查编码音频是否可以读取。该函数不接受解码后的波形。
IS_VALID_AUDIO(audio_input [, validation])参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 编码音频字节、URI 或音频片段引用。 |
|
|
| 校验模式: |
返回类型: 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)参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 要读取元数据的音频。 |
返回类型: 音频元数据 ROW。
输入为
NULL或编码音频损坏时返回NULL。URI 访问失败、非法波形、依赖错误等异常仍会抛出。对音频片段引用,
frames和duration_ms按引用区间裁剪,size仍是完整编码对象的大小。对音频波形,
format、codec、bit_rate和size为NULL。该函数没有
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)参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 要读取时长的音频。 |
返回类型: 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])参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 要过滤的音频。 |
|
| 必填 | 最小时长,包含边界且必须大于或等于 0。三参数形式中可为 |
|
|
| 最大时长,包含边界且必须大于或等于 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])参数 | 类型 | 默认值 | 说明 |
|
| 必填 | 编码音频字节或 URI;不支持片段引用和音频波形。 |
|
| 必填 | 最小字节数,包含边界且必须大于或等于 0。三参数形式中可为 |
|
|
| 最大字节数,包含边界且必须大于或等于 0。 |
返回类型: BOOLEAN NOT NULL。
至少一个边界必须非 NULL,并且上限不得小于下限。字节输入直接取长度,URI 输入读取文件大小。输入为 NULL 时返回 FALSE;文件不存在、URI 不可访问或 URI 指向目录时抛出异常。
SELECT *
FROM raw_audio
WHERE AUDIO_SIZE_FILTER(
audio_bytes,
NULL,
10485760
);