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

python-telegram-bot send_voice安卓正常,iOS/Mac无法播放求助

解决Telegram机器人语音在iOS/MacOS无法播放的问题

核心问题分析

Telegram的reply_voice接口对音频格式的跨平台兼容性要求严格,iOS/MacOS对非标准编码的音频容错性远低于Android,必须严格遵循官方推荐的OGG OPUS编码格式(即使文档标注支持其他格式,实际iOS端仅对OPUS编码的OGG有稳定支持)。

具体解决步骤

  1. 强制转换为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:单声道配置,进一步提升跨平台适配性
  2. 移除手动指定的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参数
    )
    
  3. 验证转换后音频的合法性
    用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:12:46