You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将大容量音频数据保存为w64格式

Python 保存numpy音频数组为W64格式方法

W64格式突破了标准RIFF WAV的4GB文件大小上限,完全适配你总时长83小时的音频存储需求,推荐用soundfile库实现写入,该库也是librosa的底层IO依赖,和你现有读取逻辑兼容性最好,不会出现采样率、精度不匹配的问题。

第一步:修正原有读取代码的问题

你给出的读取代码有三处容易运行报错的问题,先做修正:

  • 列表推导式存在语法笔误:for f i sorted 应为 for f in sorted
  • 没有拼接文件完整路径:如果root不是当前Python工作目录,librosa会找不到目标文件
  • 没有过滤非音频文件:如果目录下存在隐藏文件、其他格式文件,读取会直接报错

修正后的读取代码:

import os
import librosa
import numpy as np

x = np.array([
    librosa.load(os.path.join(root, f), sr=16000)[0]
    for f in sorted(os.listdir(root))
    if f.lower().endswith('.wav')
])

第二步:安装依赖

如果你的环境没有装soundfile,执行以下命令安装:

pip install soundfile

第三步:写入W64文件

场景1:将所有音频合并为单个长W64文件

W64是单文件音频格式,如果要把10000段30秒音频拼接为完整的83小时长音频,直接调用soundfile.write并显式指定格式为W64即可:

import soundfile as sf

# 将二维的分段音频数组展平为一维长序列
combined_audio = x.flatten()

sf.write(
    file="full_audio.w64",
    data=combined_audio,
    samplerate=16000,
    subtype="PCM_16", # 保持和原WAV一致的16位采样精度,无音质损失
    format="W64" # 显式指定格式,避免依赖后缀识别出错
)

场景2:批量将原WAV文件转为独立W64文件

如果你不需要合并音频,只是想把原文件逐个转成W64格式规避大小限制,不需要把所有音频加载到内存拼接,逐文件读写即可,内存占用更低:

import os
import librosa
import soundfile as sf

output_root = "./w64_files"
os.makedirs(output_root, exist_ok=True)

for f in sorted(os.listdir(root)):
    if not f.lower().endswith('.wav'):
        continue
    audio, sr = librosa.load(os.path.join(root, f), sr=16000)
    output_name = os.path.splitext(f)[0] + ".w64"
    sf.write(
        os.path.join(output_root, output_name),
        data=audio,
        samplerate=sr,
        subtype="PCM_16",
        format="W64"
    )

注意事项

  • 不要使用scipy.io.wavfile模块写入W64,该模块不原生支持W64格式,写入超过4GB的文件会出现截断损坏。
  • 写入时显式指定format="W64"参数,不要只靠.w64后缀让库自动识别格式,避免部分版本的soundfile识别错误写成标准WAV格式。

内容的提问来源于stack exchange,提问作者Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:57:18