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

使用PyTelegramBotAPI发送带自定义缩略图的视频媒体组时出现BufferedReader无法JSON序列化错误

使用PyTelegramBotAPI发送带自定义缩略图的视频媒体组时出现BufferedReader无法JSON序列化错误

我之前也碰到过一模一样的问题,其实错误原因很清晰:你直接把open()返回的BufferedReader对象传给了InputMediaVideo的thumbnail参数,而PyTelegramBotAPI在处理send_media_group时,需要把InputMedia数组转换成JSON格式发给Telegram API,但BufferedReader是无法被JSON序列化的,这就导致了报错。

解决方法

你只需要用telebot.types.InputFile来包装你的视频和缩略图文件(尤其是缩略图),让API助手能正确处理文件上传和序列化逻辑:

方法1:包装文件句柄

watermarked_video_path = f"/data/watermarked_{video.video.file_id}.mp4"
thumbnail_path = "/data/thumbnail.jpg"

# 用InputFile分别包装视频和缩略图的文件对象
video_input = telebot.types.InputFile(open(watermarked_video_path, 'rb'))
thumbnail_input = telebot.types.InputFile(open(thumbnail_path, 'rb'))

test = telebot.types.InputMediaVideo(video_input, thumbnail=thumbnail_input)
self.bot.send_media_group(chat_id, [test])

方法2:直接传入文件路径(更简洁,新版本库支持)

如果你的PyTelegramBotAPI版本足够新,还可以直接把文件路径传给InputFile,不用手动打开文件:

watermarked_video_path = f"/data/watermarked_{video.video.file_id}.mp4"
thumbnail_path = "/data/thumbnail.jpg"

test = telebot.types.InputMediaVideo(
    telebot.types.InputFile(watermarked_video_path),
    thumbnail=telebot.types.InputFile(thumbnail_path)
)
self.bot.send_media_group(chat_id, [test])

额外建议

  • 建议升级到最新版本的PyTelegramBotAPI,旧版本可能对InputMedia的参数处理存在兼容问题:
    pip install --upgrade pyTelegramBotAPI
    
  • 你之前不带缩略图能正常运行,是因为此时InputMediaVideo对象里没有包含无法序列化的BufferedReader类型,JSON转换能顺利完成。

备注:内容来源于stack exchange,提问作者Kemical

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:09:34