使用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
相关产品推荐
相关产品推荐

