#5703 wave.Error: unknown format: 3

203.10* Posted at: 4 hours ago

:
Traceback (most recent call last):
File "videotrans\util\ListenVoice.py", line 21, in run
File "videotrans\tts\__init__.py", line 207, in run
File "videotrans\tts\_base.py", line 133, in run
File "videotrans\tts\_base.py", line 220, in _item_task
File "videotrans\tts\_cosyvoice.py", line 23, in _run
File "wave.py", line 509, in open
File "wave.py", line 163, in init
File "wave.py", line 143, in initfp
File "wave.py", line 268, in _read_fmt_chunk
wave.Error: unknown format: 3


=
system:Windows-10-10.0.19045-SP0
version:v4.05
frozen:True
language:zh
root_dir:D:/win-pyvideotrans-v4.05

1 Replies

该报错是因为 CosyVoice 配音渠道返回的音频格式为 IEEE float(格式代码 3),而 Python 内置的 wave 模块仅支持标准 PCM int16 格式(格式代码 1)。

解决方案:

  1. 更换配音渠道
    使用更稳定的本地/在线渠道,例如 Qwen-TTSF5-TTSEdge-TTS,这些渠道输出为标准 WAV 格式,不会触发此错误。
  2. 升级或修复 CosyVoice 本地服务

    • 检查 CosyVoice 本地 API 的输出参数,确保它输出 sample_width=2(即 int16)的 WAV 文件。
    • 如果使用 CosyVoice 官方部署,请更新至最新版本,并确认其在 inference.pyapi.py 中导出音频时为 PCM_16 编码。
  3. 手动转换音频格式
    若必须使用 CosyVoice,可在 videotrans/tts/_cosyvoice.py 第 23 行的 _run 方法中,在读取返回的音频数据前,通过 ffmpegsoundfile 库将其转换为标准 WAV:

    import soundfile as sf
    import numpy as np
    data, samplerate = sf.read(raw_audio_bytes)
    # 转 int16 并保存为标准 WAV
    sf.write(tmp_file, np.int16(data * 32767), samplerate)

    (可根据实际情况调整代码位置)

请查阅相关文档:

Post Your Reply
Open source and free maintenance is not easy. If this project is helpful to you, please consider making a small donation to help the project continue to maintain and update. Dondate: ko-fi.com/jianchang512

Related resource