python-telegram-bot调用send_voice发送空音频文件问题求助
问题排查与解决方法
1. OGG文件编码不符合Telegram要求
Telegram的Voice消息仅支持Opus编码的OGG文件,且要求单声道、采样率推荐48kHz或16kHz。如果你的文件是Vorbis等其他编码,即使能发送成功,也会出现无法播放的空白状态。
验证方法:
用ffmpeg查看文件编码信息:
ffmpeg -i sample-3.ogg
查看输出中的Audio行,确认是否包含opus字样,例如:
Audio: opus, 48000 Hz, mono, fltp
转码解决:
如果编码不符,用ffmpeg重新转码:
ffmpeg -i sample-3.ogg -c:a opus -ac 1 -ar 48000 fixed_sample.ogg
之后用转码后的fixed_sample.ogg替换原文件测试。
2. 文件读取方式存在隐患
代码中直接使用open()但未妥善管理文件句柄,可能导致文件未完全读取就被系统回收,引发发送内容不完整的问题。
修正代码:
改用with上下文管理器确保文件正确读取和关闭:
async def audio_received(update: Update, context: ContextTypes.DEFAULT_TYPE): with open("sample-3.ogg", "rb") as voice_file: await context.bot.send_voice( chat_id=update.effective_chat.id, voice=voice_file )
3. 文件路径错误
如果脚本运行的工作目录与sample-3.ogg所在目录不一致,会读取到空文件或不存在的文件(部分情况下不会报错,但发送的内容为空)。
解决方法:
使用文件的绝对路径,例如:
# Linux/macOS with open("/home/your_username/sample-3.ogg", "rb") as voice_file: # Windows with open("C:\\Users\\your_username\\sample-3.ogg", "rb") as voice_file:
内容的提问来源于stack exchange,提问作者16ar
相关产品推荐
相关产品推荐

