You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Telethon API客户端获取Telegram音频(音乐)专辑封面

获取Telegram音频专辑封面(无需下载音频文件)

核心原因

你看到media.thumbs为空,是因为默认获取消息时Telegram仅返回部分元数据,缩略图(封面)的完整信息未被加载。音频的专辑封面实际存储在音频对应的Document对象的缩略图列表中,只需显式获取完整的文档元数据即可提取。

实现步骤(Python + Telethon)

  1. 从音频消息中提取对应的Document对象
  2. 若初始thumbs为空,调用get_file获取完整文档信息
  3. 筛选出尺寸最大的缩略图(即专辑封面)
  4. 直接获取封面的字节数据,无需下载整个音频文件

示例代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 08:35:24