Telegram bot api:GIF 上传/下载大小的问题

Posted

技术标签:

【中文标题】Telegram bot api:GIF 上传/下载大小的问题【英文标题】:Telegram bot api : issue with GIF upload/download size 【发布时间】:2020-09-27 04:33:27 【问题描述】:

面对问题,当我尝试将 GIF 发送到我的机器人时,但机器人无法访问图像的原始大小。似乎电报服务器将其转换为 mp4(这是个好主意,看起来不错),当我尝试下载它时 - 它总是看起来像缩略图,最大边长为 320 像素。

看起来像一个api bug,因为例如这里:

它描述为600x473px,但实际下载的mp4大小是:

所以,试着理解 - 我错在哪里,因为我的项目需要原始 gif 大小...也许这里有任何解决方法?

ps。如果手动将 gif 转换为 mp4 并保存质量和大小,然后提交给 bot - 它的效果很棒,没有任何额外的压缩等,但在使用 bot 之前要求使用是不可接受的。

更新:

复制(你需要你的 bot/bot_token 并且,能够接收带有 json 的 webhook):

1) 通过 Windows 10 电报客户端 (v2.1.10) 将此 gif (https://c2n.me/47Y3H37.gif) 发送到机器人。使用“不压缩发送”。 GIF 大小:600x473, 3.35MB

2) Bot 接收和 Telegram 发送 webhook :


  "update_id": 290360893,
  "message": 
    "message_id": 21,
    "from": 
      "id": 101483786,
      "is_bot": false,
      "first_name": "edited",
      "last_name": "edited",
      "username": "edited",
      "language_code": "en"
    ,
    "chat": 
      "id": edited,
      "first_name": "edited",
      "last_name": "edited",
      "username": "edited",
      "type": "private"
    ,
    "date": 1591962500,
    "animation": 
      "file_name": "9Ywn9p.gif.mp4",
      "mime_type": "video/mp4",
      "duration": 4,
      "width": 600,
      "height": 473,
      "thumb": 
        "file_id": "AAMCAgADGQEAAxVe42t2MTQQrFMyXbskwWiNkHjm3wACKwgAAtZ-GEtFrAh9bgzTOnpJm5QuAAMBAAdtAAMIgQACGgQ",
        "file_unique_id": "AQADekmblC4AAwiBAAI",
        "file_size": 15304,
        "width": 320,
        "height": 252
      ,
      "file_id": "CgACAgIAAxkBAAMVXuNrdjE0EKxTMl27JMFojZB45t8AAisIAALWfhhLRawIfW4M0zoaBA",
      "file_unique_id": "AgADKwgAAtZ-GEs",
      "file_size": 68253
    ,
    "document": 
      "file_name": "9Ywn9p.gif.mp4",
      "mime_type": "video/mp4",
      "thumb": 
        "file_id": "AAMCAgADGQEAAxVe42t2MTQQrFMyXbskwWiNkHjm3wACKwgAAtZ-GEtFrAh9bgzTOnpJm5QuAAMBAAdtAAMIgQACGgQ",
        "file_unique_id": "AQADekmblC4AAwiBAAI",
        "file_size": 15304,
        "width": 320,
        "height": 252
      ,
      "file_id": "CgACAgIAAxkBAAMVXuNrdjE0EKxTMl27JMFojZB45t8AAisIAALWfhhLRawIfW4M0zoaBA",
      "file_unique_id": "AgADKwgAAtZ-GEs",
      "file_size": 68253
    
  

,所以你可以在那里看到,大小是正确的,但是重量 - 不,它只有 68253 字节 = 66.65kb,而不是 ~3.35MB(因为转换而减少了一些)

3)获取的file_id:CgACAgIAAxkBAAMVXuNrdjE0EKxTMl27JMFojZB45t8AAisIAALWfhhLRawIfW4M0zoaBA从这个网络挂接,并试图通过调用GET使用它的API “https://api.telegram.org/bot your_bot_token STRONG> /的GetFile的file_id = CgACAgIAAxkBAAMVXuNrdjE0EKxTMl27JMFojZB45t8AAisIAALWfhhLRawIfW4M0zoaBA?”,您将收到:


  "ok": true,
  "result": 
    "file_id": "CgACAgIAAxkBAAMVXuNrdjE0EKxTMl27JMFojZB45t8AAisIAALWfhhLRawIfW4M0zoaBA",
    "file_unique_id": "AgADKwgAAtZ-GEs",
    "file_size": 68253,
    "file_path": "animations/file_12.mp4"
  

4) 使用此 file_path 下载文件: GET "https://api.telegram.org/file/botyour_bot_token/animations/file_12.mp4" 和...获取此 mp4 文件:https://c2n.me/47Y4oAv.mp4,损失质量、重量和大小 (320x252)

但是当您尝试从 Telegram 客户端下载它时 - 通过单击“另存为” - 工作正常,mp4 具有适当的大小/重量。所以看起来像一个api错误......

update#2 : 尝试通过 tfs 电报支持提交,但也无法使用我的电话号码登录... (https://c2n.me/47Yqswl.png)。 @pavel_durov,你能把它全部解决吗:))

【问题讨论】:

刚刚尝试重现:用鼠标右键单击和打开预览后下载;是的,Telegram 确实将 gif 转换为 mp4,但到目前为止尺寸没有问题,我有原始尺寸(在我的情况下,500x500)。您是直接使用 Telegram API 还是通过某些框架使用?也许它是某种相关的 @AntonZolotukhin 直接,只是通过浏览器重新生成 GET 调用。所以,当我获得准备下载 gif 的链接时 - 它调整了大小。刚复查。但是你是对的,当你试图通过官方客户端下载时,Telegram 提供了高分辨率的 mp4。 刚刚更新了“如何重现”的问题。 @AntonZolotukhin 照片也有问题。我提供了通过 bot api 发送的照片的高分辨率 (2k) file_id。在应用程序中,我只收到 1k 分辨率,即 1280。我不知道我错过了什么。 【参考方案1】:

似乎唯一的解决方法 atm 是将 gif 转换为 mp4(是的,这样的体验令人沮丧),直到修复 the issue。

【讨论】:

不幸的是,在使用前转换不是一个选项 :( 另外,我发现了这个问题,由您提供 - 之前,您可以在那里看到我的评论。无论如何,感谢您的调查,Anton

以上是关于Telegram bot api:GIF 上传/下载大小的问题的主要内容,如果未能解决你的问题,请参考以下文章

Telegram API vs Bot API [关闭]

如何使用 Telegram Bot API 获取 Telegram 频道用户列表

使用 Express、Socket.io 和 Node-Telegram-Bot-Api 结束 Mocha 测试

如何向 Telegram bot API 发送请求?

使用 ktor 将文件上传到电报 bot api

如何通过 Telegram Bot API 在消息中发送嵌入图像和文本