python-telegram-bot中send_video失效但send_animation正常的原因与解决办法
python-telegram-bot send_video无反应无报错的原因及修复方案
可能原因1:视频不符合Telegram的格式/大小限制
Telegram Bot发送视频有明确规则:
- 单文件最大限制为50MB(通过file_id转发时,还受原文件的权限、大小约束)
- 仅支持MP4格式,且视频编码需为H.264、音频编码需为AAC;像MKV、AVI这类格式,即使能被Telegram接收,Bot调用
send_video时会静默失败。
修复办法
- 先检查目标视频的格式与大小,确保符合要求
- 如果视频不兼容,可改用
send_document发送(文档模式无水印,支持最大2GB文件),修改代码如下:
elif message.video: # 用send_document替代send_video,兼容更多格式和大文件 bot.send_document(chat_id=chat_id, document=message.video.file_id, caption=message.caption, parse_mode=ParseMode.HTML) update.message.reply_text("Video has been forwarded successfully.")
可能原因2:file_id的权限或有效性问题
虽然message.video.file_id来自用户消息,但部分场景下这个file_id无法直接用于Bot的send_video操作(比如原视频是私密频道内容,Bot无访问权限)。
修复办法
先将视频下载到本地,再发送本地文件:
import os from telegram import InputFile elif message.video: # 下载视频到临时文件 file = bot.get_file(message.video.file_id) temp_file = f"temp_video_{message.video.file_id}.mp4" file.download(temp_file) # 发送本地文件 with open(temp_file, 'rb') as f: bot.send_video(chat_id=chat_id, video=InputFile(f), caption=message.caption, parse_mode=ParseMode.HTML) # 清理临时文件 os.remove(temp_file) update.message.reply_text("Video has been forwarded successfully.")
可能原因3:python-telegram-bot版本兼容性问题
不同版本的库对send_video的参数要求有差异,旧版本可能需要显式指定supports_streaming=True,否则会静默失败。
修复办法
- 升级到最新稳定版库:
pip install --upgrade python-telegram-bot
- 若暂时不想升级,尝试添加参数:
elif message.video: bot.send_video(chat_id=chat_id, video=message.video.file_id, caption=message.caption, parse_mode=ParseMode.HTML, supports_streaming=True) update.message.reply_text("Video has been forwarded successfully.")
额外排查步骤
- 开启DEBUG级日志,查看是否有隐藏警告:
import logging logging.basicConfig(level=logging.DEBUG)
- 测试发送一个已知合规的小型MP4视频,确认是代码问题还是特定视频的问题。
内容的提问来源于stack exchange,提问作者user23470475
相关产品推荐
相关产品推荐

