使用Python的Pyrogram/Telethon库发送Telegram视频异常求助
解决Pyrogram/Telethon发送视频后网页端显示异常(0:00时长、好友无法查看)问题
1. 手动指定视频元数据参数
大视频经常会出现库自动读取元数据失败的情况,直接手动传入时长、分辨率等参数,让Telegram能正确识别视频属性:
- Pyrogram 示例:
from pyrogram import Client import cv2 # 提前读取视频真实元数据 video_path = "large_video.mp4" cap = cv2.VideoCapture(video_path) duration = int(cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) cap.release() async def send_video(): async with Client("my_account") as app: await app.send_video( chat_id="目标聊天ID", video=video_path, duration=duration, width=width, height=height, supports_streaming=True # 强制开启流媒体支持,大视频必备 )
- Telethon 示例:
from telethon import TelegramClient from telethon.tl.types import InputMediaVideo import cv2 video_path = "large_video.mp4" cap = cv2.VideoCapture(video_path) duration = int(cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS)) width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) cap.release() async def send_video(): async with TelegramClient("my_account", api_id, api_hash) as client: media = InputMediaVideo( file=video_path, duration=duration, w=width, h=height, supports_streaming=True ) await client.send_file("目标聊天ID", media)
提示:用cv2读取元数据比依赖库自动识别更稳定,避免大文件读取超时或解析错误。
2. 确保视频编码符合Telegram规范
Telegram对视频编码有明确要求,推荐使用H.264视频编码 + AAC音频编码,分辨率不超过4K,帧率控制在30fps以内。用FFmpeg转码示例:
ffmpeg -i input_video.mp4 -c:v libx264 -c:a aac -crf 23 -preset medium -vf "scale=1920:1080" output_video.mp4
参数说明:libx264是标准兼容的视频编码器,aac适配全平台音频播放,crf 23平衡画质与文件大小,scale将分辨率统一到1080P适配大多数场景。
3. 调整上传分块与超时设置
大视频上传时,默认的分块大小或超时限制可能导致元数据丢失,手动调整参数:
- Pyrogram:初始化客户端时设置更长超时,发送时指定更大分块
app = Client("my_account", timeout=30) # 发送视频时指定分块大小为64MB await app.send_video(..., chunk_size=67108864)
- Telethon:初始化时设置超时,发送时强制按视频类型上传(而非文档)
client = TelegramClient("my_account", api_id, api_hash, timeout=30) await client.send_file(..., force_document=False)
4. 修复视频文件元数据
部分原始视频存在损坏的元数据片段,先用FFmpeg修复:
ffmpeg -i input_video.mp4 -c copy -map 0 -movflags +faststart output_video_fixed.mp4
-movflags +faststart会把元数据移到文件开头,让Telegram能快速识别视频属性。
内容的提问来源于stack exchange,提问作者kostomeister
相关产品推荐
相关产品推荐

