Telegram Bot API:缺少语音消息音频频谱图。一个错误?

Posted

技术标签:

【中文标题】Telegram Bot API:缺少语音消息音频频谱图。一个错误?【英文标题】:Telegram Bot API: voice message audio spectrogram is missing. A bug? 【发布时间】:2019-10-20 05:59:26 【问题描述】:

我正在开发一个 Telegram 机器人,我有一个关于 sendvoice API 发送语音(音频)消息的问题。

我推送一个从MP3源文件转换而来的OGG文件,使用ffmpeg进行转换,命令如下:

$ ffmpeg -loglevel panic -i \
    /path/to/la_piattaforma_telegram_è_perfetta.mp3 \
    -c:a libopus -compression_level 10 -frame_duration 60 -vbr on -application voip \
    /path/to/la_piattaforma_telegram_è_perfetta.ogg -y

顺便说一句,MIME 类型显示正确:

$ file --mime-type -b \ 
/path/to/la_piattaforma_telegram_è_perfetta.ogg
audio/ogg

音频文件按预期正确播放,但我遇到的(小)问题是电报客户端(桌面/安卓/任何)不显示“波形”(音频频谱图,如下图蓝色小部件中所示),而是将波形可视化为一条线。

知道如何显示波形图吗?是否需要任何特定的 OPUS 格式才能实现良好的可视化?

$ mediainfo /path/to/la_piattaforma_telegram_è_perfetta.ogg
General
Complete name                            : /path/to/la_piattaforma_telegram_è_perfetta.ogg
Format                                   : Ogg
File size                                : 5.37 KiB
Duration                                 : 2 s 79 ms
Overall bit rate                         : 21.2 kb/s

Audio
ID                                       : 1485113069 (0x588506ED)
Format                                   : Opus
Duration                                 : 2 s 79 ms
Channel(s)                               : 1 channel
Channel positions                        : Front: C
Sampling rate                            : 16.0 kHz
Compression mode                         : Lossy
Writing library                          : libopus unknown-fixed

缺少波形可视化可能是因为音轨是单声道(1 声道)?

【问题讨论】:

您好,我也有同样的问题,您能解决这个问题吗?谢谢, 不 :( 我认为那是因为音轨是单声道的。对我来说这是一个 TG API 错误。 【参考方案1】:

我解决了这个问题。 这是我的错/错误(主要是)。我现在回答我自己,分享我刚刚找到的解决方案。

Telegram SendVoice API docs 表示要发送的音频文件必须是使用 OPUS 编码的 .OGG 文件,

因此,如我的问题中所述,我使用 ffmpeg 将原始(源)文件(即 .MP3)转换为 .OGG 所需格式。

不幸的是,对于我的程序中的一个错误,我发送了 MP3 原始音频而不是转换后的 OGG :(

奇怪的是,Telegram API 接受 MP3 音频格式没有错误,但在这种情况下不显示频谱图(而是只显示一条实线)。

现在,通过发送正确的 .OGG 文件,我得到了预期的频谱图!

顺便说一句,为了挑剔,Telegram API 上仍然存在一个与 API 端点文档规范相关的小错误(sendVoice 确实接受 ALSO .MP3 而不仅仅是 .OGG 文件)。

【讨论】:

以上是关于Telegram Bot API:缺少语音消息音频频谱图。一个错误?的主要内容,如果未能解决你的问题,请参考以下文章

Telegram bot api:错误代码 429,错误:请求太多:稍后重试

如何使用 Telegram Bot API 发送表情符号?

AWS Lambda - 使用 MySQL 的 Telegram Bot - 循环消息 \ 相同消息

Telegram Bot(用 python 编码)与 AWS API Gateway 集成

getUpdates Telegram bot API 中忽略的偏移量参数

我的 Telegram Bot 无法读取另一个 Telegram Bot 发送的消息