我正在try 使用本地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()

非常感谢你的帮助!

推荐答案

根据Telegram关于sendVoice的文档,音频文件应满足以下要求:

  • 是一个.ogg的文件,
  • 用OPUS编码,
  • 大小低于50MB(可能会改变),并且,
  • 根据this answer,拥有从32KB到64KB的比特率.

既然你提到编码可能已经解决了这个问题,我将再次从this answer开始回答:

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

Python相关问答推荐

如何根据另一列值用字典中的值替换列值

如何使用scipy从频谱图中回归多个高斯峰?

线性模型PanelOLS和statmodels OLS之间的区别

计算组中唯一值的数量

无法定位元素错误404

我如何使法国在 map 中完全透明的代码?

Pandas计数符合某些条件的特定列的数量

计算每个IP的平均值

Scrapy和Great Expectations(great_expectations)—不合作

Polars将相同的自定义函数应用于组中的多个列,

numpy.unique如何消除重复列?

Python Pandas—时间序列—时间戳缺失时间精确在00:00

Polars map_使用多处理对UDF进行批处理

将一个双框爆炸到另一个双框的范围内

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

Pandas在rame中在组内洗牌行,保持相对组的顺序不变,

如何使用pytest在traceback中找到特定的异常

Python:从目录内的文件导入目录

替换包含Python DataFrame中的值的<;

无法使用请求模块从网页上抓取一些产品的名称