如何使用Telethon API客户端获取Telegram音频(音乐)专辑封面
获取Telegram音频专辑封面(无需下载音频文件)
核心原因
你看到media.thumbs为空,是因为默认获取消息时Telegram仅返回部分元数据,缩略图(封面)的完整信息未被加载。音频的专辑封面实际存储在音频对应的Document对象的缩略图列表中,只需显式获取完整的文档元数据即可提取。
实现步骤(Python + Telethon)
- 从音频消息中提取对应的
Document对象 - 若初始
thumbs为空,调用get_file获取完整文档信息 - 筛选出尺寸最大的缩略图(即专辑封面)
- 直接获取封面的字节数据,无需下载整个音频文件
示例代码
from telethon import TelegramClient from telethon.tl.types import DocumentAttributeAudio # 初始化客户端(替换为你的API信息) client = TelegramClient('session_name', api_id, api_hash) async def get_audio_cover(message): if not message.media or not hasattr(message.media, 'document'): return None doc = message.media.document # 确认当前文档为音频文件 audio_attr = next((attr for attr in doc.attributes if isinstance(attr, DocumentAttributeAudio)), None) if not audio_attr: return None # 若初始缩略图为空,获取完整文档元数据 if not doc.thumbs: full_doc = await client.get_file(doc) doc = full_doc # 筛选尺寸最大的缩略图(专辑封面) if doc.thumbs: largest_thumb = max(doc.thumbs, key=lambda t: t.width * t.height) # 获取封面字节数据 cover_bytes = await client.download_media(largest_thumb, bytes) # 如需保存为文件,替换bytes为路径:'cover.jpg' return cover_bytes # 使用示例(需在异步环境中运行) async def main(): await client.start() # 替换为你的目标消息 message = await client.get_messages('target_chat', ids=message_id) cover = await get_audio_cover(message) if cover: print(f"获取封面成功,字节长度:{len(cover)}") if __name__ == '__main__': client.loop.run_until_complete(main())
关键说明
- Telegram没有提供专辑封面的公开URL,只能通过MTProto API获取字节数据
- 调用
download_media时传入缩略图对象而非整个音频文档,只会下载封面资源 - 若音频本身无专辑封面,
doc.thumbs会始终为空,此时无法获取封面
内容的提问来源于stack exchange,提问作者Momo
相关产品推荐
相关产品推荐

