python-telegram-bot 发送语音文件为空

1 投票
1 回答
30 浏览
提问于 2025-04-12 20:13

我正在尝试使用一个本地的OGG文件发送语音消息。语音消息确实发送成功了,但在Telegram里播放这个文件时,似乎是空的。你知道这是为什么吗?这是我使用的代码:

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()

非常感谢你的帮助!

1 个回答

1

根据Telegram的文档关于sendVoice功能,音频文件需要满足以下条件:

  • 必须是一个.ogg格式的文件,
  • 需要使用OPUS编码,
  • 文件大小要小于50MB(这个限制可能会改变),并且,
  • 根据这个回答,比特率要在32kb到64kb之间。

因为你提到编码可能解决了这个问题,所以我会再次引用这个回答

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")
    )

撰写回答