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

Flask保存iOS上传音频后ffprobe获取时长异常问题求助

iOS上传WAV音频至Flask后端后ffprobe读取时长异常

问题场景

用Flask开发Web应用,前端iOS设备录制音频后上传到Flask路由,后端保存音频的代码如下:

# Save the audio file to a unique file
filename = f"audio_{datetime.now().strftime('%Y%m%d%H%M%S')}{extension}"
audio_path = os.path.join('uploads', filename)
audio_file.save(audio_path)
print(f"Saved audio file to {audio_path}.")

异常现象

  • 服务器uploads文件夹中的音频实际播放时长为3秒,但用服务器上的ffprobe验证时,输出显示时长仅约0.99秒,后续转码操作也只处理前1秒的音频
  • 将该文件下载到本地后,本地ffprobe能读取到正确的3秒时长,且本地与服务器上的文件MD5哈希完全一致
  • 排查发现生产服务器(Python Anywhere)的ffprobe版本与本地使用的版本不同,怀疑是版本差异引发了这个问题

问题分析

这种情况基本是不同版本ffprobe对WAV文件的解析逻辑差异导致的。iOS录制的WAV可能采用了特定的编码或文件头格式,旧版本ffprobe对这类格式的兼容性不足,无法正确识别完整的音频时长。

解决建议

  • 升级服务器ffprobe版本:如果Python Anywhere允许自定义安装软件,可以将服务器上的ffmpeg(包含ffprobe)升级到与本地一致的版本,或者最新的稳定版,以此解决兼容性问题
  • 指定格式解析参数:使用ffprobe时,通过-f wav参数强制指定按WAV格式解析,命令示例:
    ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 -f wav /path/to/your/audio.wav
    
  • 预先转换音频格式:在后端保存音频后,先将其转成兼容性更好的标准WAV格式(比如PCM 16位编码),再进行后续转码操作,ffmpeg命令示例:
    ffmpeg -i /path/to/uploaded/audio.wav -acodec pcm_s16le -ar 44100 /path/to/converted/audio.wav
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:45:05