python-telegram-bot send_voice安卓正常,iOS/Mac无法播放求助
解决Telegram机器人语音在iOS/MacOS无法播放的问题
核心问题分析
Telegram的reply_voice接口对音频格式的跨平台兼容性要求严格,iOS/MacOS对非标准编码的音频容错性远低于Android,必须严格遵循官方推荐的OGG OPUS编码格式(即使文档标注支持其他格式,实际iOS端仅对OPUS编码的OGG有稳定支持)。
具体解决步骤
强制转换为OGG OPUS标准格式
用FFmpeg将源音频转换为Telegram兼容的OGG OPUS格式,以下是经过验证的参数:# 替换原转换命令 subprocess.run([ "ffmpeg", "-n", "-i", f"{telegram_username}_response_audio.mp3", "-c:a", "libopus", "-b:a", "64k", "-vbr", "on", "-ar", "48000", "-ac", "1", f"{telegram_username}_response_audio.ogg" ], check=True)参数说明:
-c:a libopus:指定使用iOS原生支持的OPUS编码-b:a 64k -vbr on:启用可变比特率,平衡音质与文件大小-ar 48000:OPUS推荐采样率,兼容性最优-ac 1:单声道配置,进一步提升跨平台适配性
移除手动指定的duration参数
手动传入的duration如果与实际音频时长不符,会导致iOS端解析失败,让Telegram自动识别时长即可:await update.message.reply_voice( voice=open(f"{telegram_username}_response_audio.ogg", 'rb'), reply_to_message_id=message_id # 移除duration参数 )验证转换后音频的合法性
用ffprobe检查转换后的音频是否符合标准:ffprobe -v error -show_format -show_streams your_audio.ogg确认输出中
codec_name为opus、format_name为ogg。
额外注意事项
- 避免用AAC格式发送Voice消息:Telegram虽标注支持AAC,但iOS端对其封装格式要求苛刻,极易出现解析失败。
- 用
subprocess.run替代subprocess.call:通过check=True可直接捕获转换错误,便于排查问题。
内容的提问来源于stack exchange,提问作者Zeeshan Ghazanfar
相关产品推荐
相关产品推荐

