我正在尝试使用本地 OGG 文件发送语音消息。语音消息已发送,但当尝试在电报中播放文件时,它似乎是空的。知道为什么吗?这是我正在使用的代码:
async def audio_received(update: Update, context: ContextTypes.DEFAULT_TYPE):
await context.bot.send_voice(
chat_id=update.effective_chat.id, voice=open("sample-3.ogg", "rb")
)
if __name__ == "__main__":
application = (
ApplicationBuilder()
.token("MY_TOKEN")
.build()
)
audio_handler = MessageHandler(filters.VOICE, audio_received)
application.add_handler(audio_handler)
application.run_polling()
非常感谢您的帮助!
根据 Telegram 的 sendVoice 文档,音频文件应满足以下条件:
.ogg
文件,既然你提到编码可能已经解决了这个问题,我将再次从这个答案中获取答案:
async def audio_received(update: Update, context: ContextTypes.DEFAULT_TYPE):
# ffmpeg -i sample-3.ogg -loglevel panic \
# -c:a libopus -b:a 32k -vbr on \
# -compression_level 10 -frame_duration 60 -application voip \
# output.ogg
subprocess.run([
'ffmpeg', '-i', 'sample-3.ogg', '-loglevel', 'panic',
'-c:a', 'libopus', '-b:a', '32k', '-vbr', 'on',
'-compression_level', '10', '-frame_duration', '60', '-application', 'voip',
'output.ogg', '-y' # -y confirms overriding files with the same name
])
await context.bot.send_voice(
chat_id=update.effective_chat.id, voice=open("output.ogg", "rb")
)