python-telegram-bot中InlineQueryResultAudio音频缩略图不显示问题
解决InlineQueryResultAudio音频缩略图不显示的问题
核心原因
Telegram的InlineQueryResultAudio组件不会自动解析谷歌云盘上MP3文件的内嵌封面元数据,且默认不会主动抓取音频文件里的封面图,必须通过显式参数指定,同时要确保资源能被Telegram服务器正常访问。
解决办法
1. 显式添加thumb_url参数
这是最直接有效的方案,把封面图单独上传到公开可访问的存储(比如将谷歌云盘文件设为公开共享),然后在构造InlineQueryResultAudio时传入缩略图地址:
修改后的代码示例:
from uuid import uuid4 from telegram import InlineQueryResultAudio def build_inline_query_result_article_songs(result, url_song, artistt, thumb_url): iid = str(uuid4()) r = InlineQueryResultAudio( id=iid, title=result.title(), audio_url=url_song, performer=artistt.title(), thumb_url=thumb_url, # 新增缩略图地址参数 thumb_width=300, # 可选:指定缩略图宽度,适配Telegram显示 thumb_height=300 # 可选:指定缩略图高度 ) return r
2. 确认谷歌云盘链接的公开权限
不管是音频文件还是缩略图,必须确保它们的谷歌云盘链接是公开可访问的。如果链接需要登录验证或仅限特定用户访问,Telegram服务器无法抓取到资源,缩略图自然显示不出来。
3. 验证MP3内嵌封面的有效性(可选)
如果想尝试靠内嵌封面解决,先确认MP3的元数据是否正确:
用ffmpeg检查音频文件的封面信息:
ffmpeg -i your_song.mp3 -hide_banner
如果输出里能看到类似Stream #0:1: Video: mjpeg, yuvj420p(pc, bt470bg/unknown/unknown), 300x300 [SAR 1:1 DAR 1:1], 90k tbr, 90k tbn的图像流,说明封面嵌入成功。但即使如此,Telegram的InlineQuery组件也大概率不会自动读取这个封面,所以还是优先用thumb_url方案。
内容的提问来源于stack exchange,提问作者youssef farhan
相关产品推荐
相关产品推荐

