Из-за чего видео отправляется не правильно для web версии Telegram?

Ссылка скопирована
1 ответ

Описание проблемы:
Сейчас ситуация такая: при отправке через Telethon видеофайлов весом более 50 МБ возникает проблема с их отображением в Web-версии Telegram. Видео отправляется с корректными атрибутами (указаны продолжительность и разрешение), однако оно не открывается для просмотра — остается некликабельным.

По вводным: при этом на других платформах (мобильные приложения и Desktop-версия) всё работает нормально. Видеофайлы размером менее 50 МБ также отправляются и воспроизводятся без нареканий. Сами видеофайлы, которые отображаются некорректно, полностью исправны: при ручной загрузке через интерфейс Telegram всё работает нормально.

Вопрос:
Из-за чего так происходит или с чем это связанно?

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Юрий Linux Ответ

У Telegram есть разные ограничения и особенности обработки видео в зависимости от клиента. Если файл через Telethon отправляется корректно в Desktop и мобильных клиентах, но в Web остаётся некликабельным, чаще всего проблема в атрибутах документа, MIME type, контейнере/кодеке или в том, что Web-клиент не может обработать способ загрузки большого файла как streamable video.

Сначала проверьте файл через ffprobe:

ffprobe -hide_banner video.mp4

ffprobe -hide_banner video.mp4

Для максимальной совместимости обычно нужен MP4-контейнер, H.264 video, AAC audio, moov atom в начале файла. Если moov atom в конце, браузерный клиент может плохо стартовать воспроизведение. Исправляется так:

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4

ffmpeg -i input.mp4 -c copy -movflags +faststart output.mp4

В Telethon важно отправлять видео как media/document с корректными атрибутами:

from telethon.tl.types import DocumentAttributeVideo
 
await client.send_file(
    entity,
    'output.mp4',
    supports_streaming=True,
    attributes=[
        DocumentAttributeVideo(
            duration=duration,
            w=width,
            h=height,
            supports_streaming=True
        )
    ],
    mime_type='video/mp4'
)

from telethon.tl.types import DocumentAttributeVideo await client.send_file( entity, 'output.mp4', supports_streaming=True, attributes=[ DocumentAttributeVideo( duration=duration, w=width, h=height, supports_streaming=True ) ], mime_type='video/mp4' )

Если файл больше 50 МБ, Web-клиент может вести себя иначе из-за способа предпросмотра и CDN. Ручная загрузка через интерфейс Telegram может добавлять или нормализовать атрибуты, которые вы не передаёте из Telethon. Поэтому сравните объект сообщения после ручной загрузки и после Telethon: attributes, mime_type, size, supports_streaming.

Ещё проверьте, что видео не HEVC/H.265. Мобильный клиент может его воспроизвести, а браузерный Telegram — нет. Для совместимости перекодируйте:

ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4

ffmpeg -i input.mov -c:v libx264 -preset medium -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4

Итог: делайте MP4/H.264/AAC, +faststart, явно задавайте mime_type='video/mp4', supports_streaming=True и корректный DocumentAttributeVideo. Если после этого Web всё равно не открывает файл, сравните raw message с ручной загрузкой — отличие почти всегда видно в атрибутах документа.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно