Почему при отправке видео через веб-версию Telegram оно приходит получателю некорректно — например, неправильно отображается или не воспроизводится?

Описание проблемы: <br/> При отправке через Telethon видеофайлов размером более 50 МБ в веб‑версии Telegram они отображаются некликабельными и не открываются для просмотра, хотя метаданные (продолжительность и разрешение) указаны корректно. <br/> <br/> При этом на мобильных приложениях и в Desktop‑версии те же файлы воспроизводятся нормально, как и видео до 50 МБ, отправленные через Telethon. Сами файлы исправны: при ручной загрузке через интерфейс Telegram всё работает корректно. <br/> <br/> Вопрос: <br/> Почему это происходит и с чем это связано?
  • 18 февраля 2026 г. 7:01
Ответы на вопрос 2
Коротко — потому что веб‑клиент Telegram ожидает от «видеофайла» возможности прогрессивной (streaming) отдачи по HTTP, а при загрузке больших файлов через API (или при неподходящем контейнере) такой версии/индексации у файла может не быть. В результате Web не позволяет «открыть» видео прямо в браузере, хотя в метаданных (duration / w / h) всё может выглядеть правильно. Мобильные и Desktop‑клиенты либо по‑другому обрабатывают файл, либо скачивают и воспроизводят его локально — поэтому у них проблем нет. Ручная загрузка через UI запускает серверную обработку/оптимизацию и делает файл пригодным для веб‑проигрывания.

Причины более подробно
- Разный путь загрузки/обработки. Маленькие файлы или файлы, залитые через UI, Telegram может автоматически переработать (создать потоковую MP4‑версию, переставить индекс и т. п.). При загрузке больших файлов через MTProto/библиотеки (Telethon) серверной постобработки может не происходить.
- MP4 «индекс» (moov atom). Чтобы браузер мог начать воспроизведение до полной загрузки файла, moov‑атом должен быть в начале файла (так называемый faststart). Если moov в конце, web‑плеер не может начать просмотр до полной загрузки => Telegram Web ведёт себя «некликабельно».
- Отсутствие флага «streamable». Для правильного отображения как видео (а не просто как документа) нужно корректно передать атрибуты (DocumentAttributeVideo) и флаг supports_streaming. Иногда при «большой» загрузке эти атрибуты не выставляются сервером автоматически.

Как это исправить
- Переместить moov‑atom в начало (самый надёжный способ):
  ffmpeg -i in.mp4 -c copy -movflags +faststart out.mp4
  После этого файл обычно воспроизводится в веб‑клиенте.
- При отправке через Telethon явно указывать атрибуты видео и supports_streaming, а также миниатюру. Пример (русская идея, не точный copy‑paste API):
  from telethon.tl.types import DocumentAttributeVideo
  await client.send_file(chat, 'out.mp4',
      attributes=[DocumentAttributeVideo(duration=..., w=..., h=..., supports_streaming=True)],
      thumb='thumb.jpg'
  )
- Если не хочется перерабатывать файл, можно залить его через веб‑интерфейс Telegram — там сервер выполнит нужную подготовку.

Подводя итог: проблема не в Telethon как таковом, а в том, что для отображения/прогрессивного воспроизведения в браузере файл должен быть «streamable» (или обработан сервером). Большие файлы, загруженные через API, иногда такой подготовки не получают — поэтому веб‑клиент не открывает их.
решил вопрос. на самом деле странная хуйня это, но помогло, то что я просто передал обьект превью. раньше и без явной передачи через send file делал и нормально, но почему то перестало работать
Похожие вопросы