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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:13:09