Telegram accepts a file in essentially any format, but only some of them render as a playable video — the Bot API documentation states that "Telegram clients support MPEG4 videos (other formats may be sent as Document)."
That parenthesis is the answer to the question most people are really asking. The upload finished. Nothing errored. And the clip landed in the chat as a grey file icon with a download arrow instead of a player with a scrub bar. Nothing is broken; your file simply took the other path.
Uploading and playing are two different questions
Telegram's own FAQ is blunt about what you can put in a chat: you can send "messages, photos, videos and files of any type (doc, zip, mp3, etc), as well as create groups for up to 200,000 people or channels for broadcasting to unlimited audiences."
So the container is not a gate. A .mkv, an .avi, a .wmv — all of them upload. What the extension decides is how Telegram presents the thing on the other end.
Size is not usually the gate either. The FAQ states files "of up to 2 GB in size each (or 4 GB with Premium)" — and that cap applies to the uploader, not the viewer. Telegram's Premium FAQ says "any user can download large 2+ GB files uploaded by premium users."
The formats, in Telegram's own words
Every row here is quoted or paraphrased from a Telegram-owned page. Note how much of it comes from the Bot API — that is where Telegram actually writes format requirements down.
| What you are sending | What Telegram officially states | Where it is stated |
|---|---|---|
| A video that should render as a video | "Telegram clients support MPEG4 videos (other formats may be sent as Document)" | Bot API, sendVideo |
| Video codec values | "Codec used for the video, i.e. "h264", "h265", or "av1"" | MTProto, documentAttributeVideo.video_codec |
| An animation / GIF-style clip | "animation files (GIF or H.264/MPEG-4 AVC video without sound)" | Bot API, sendAnimation |
| Audio that should open in the music player | "Your audio must be in the .MP3 or .M4A format" | Bot API, sendAudio |
| A round video message | "a rounded square MPEG4 video of up to 1 minute long" | Bot API, sendVideoNote |
| A Story posted through the Bot API | 720x1280, "encoded with H.265 codec, with key frames added each second in the MPEG4 format", streamable, "must not exceed 30 MB", duration "0-60" seconds | Bot API, InputStoryContentVideo |
| Anything else | "files of any type (doc, zip, mp3, etc)" | telegram.org FAQ |
| Per-file size ceiling | 2 GB, "or 4 GB with Premium" | telegram.org FAQ |
Read the hedges, because they are load-bearing. The codec line uses "i.e." to give three examples — it is not published as an exhaustive whitelist, and neither Telegram nor this page can tell you that H.264, H.265 and AV1 are the only codecs that will ever play. Likewise sendVideo says other formats "may be sent as Document," not "will be rejected." Any article that hands you a tidy table of supported and unsupported extensions has invented the boundaries of that table.
Why your video shows up as a file icon
There are two separate mechanisms behind the grey icon, and it is worth knowing which one hit you.
1. The format did not qualify as a video. This is the sendVideo clause above: other formats "may be sent as Document." The file is intact and fully downloadable, it just arrives as a Document rather than as a video.
2. Somebody — possibly you — forced it. "Send as file" is not a cosmetic UI toggle; it exists at the protocol level. The MTProto constructor inputMediaUploadedDocument carries a flag called force_file, documented verbatim as "Force the media file to be uploaded as document."
If your clip is already an MP4 and still shows as a file, check whether it was sent through a "send as file" path before you start re-encoding.
One caution on case 2: Telegram's help center says nothing about what "send as file" does to quality, bitrate or resolution. The widely repeated claim that sending as a file preserves 100% of the original quality has no official source. The protocol flag is documented; its effect on the picture is not. Treat any specific claim there as check-the-official-documentation territory.
The fix: re-encode to MPEG4 before you send
Since the presentation decision is made from the file you hand over, the fix is to hand over a different file. Converting to an MP4 container with H.264 video puts you inside the combination Telegram documents, and it costs one pass.
Try it right here
Runs in your browser. Your file is not uploaded anywhere.
This runs inside your browser tab. The file is read from disk, re-encoded locally and handed back — it is never uploaded to a server, which matters when the clip is a private recording you were about to share with one person. The MOV to MP4 converter is the same tool on its own page.
Check the result's size afterwards. A container change is not a compression step, and a re-encode can land larger than the source. If you end up near the ceiling, run the output through video compression as a separate deliberate step. The same "right file, wrong container" pattern shows up elsewhere — see why Discord doesn't play your WebM and what to do when WhatsApp says your video is too large.
Four format gotchas that are documented but rarely explained
Your silent MP4 may be treated as an animation. The MTProto flag nosound_video is documented as "Whether to send the file as a video even if it doesn't have an audio track (i.e. if set, the documentAttributeAnimated attribute will not be set even for videos without audio)." Read the parenthesis backwards: without that flag, a video with no audio track gets the animated attribute — the GIF-style treatment. That is the official explanation for "my MP4 turned into a silent looping GIF."
Streaming is a flag, not an automatic property. documentAttributeVideo has a supports_streaming field — "Whether the video supports streaming" — and the Bot API's sendVideo exposes it as "Pass True if the uploaded video is suitable for streaming." It is a claim made about the file at send time, not something Telegram infers on your behalf. It is also one of the hard requirements for Stories posted through the Bot API, where the video must be 720x1280 and streamable.
Round video messages are their own format. A video note is officially "a rounded square MPEG4 video of up to 1 minute long." Its size parameter is not width by height — it is length, documented as the "diameter of the video message." And it cannot be sent from a link: "Sending video notes by a URL is currently unsupported." (That one-minute figure is the Bot API's; Telegram does not publish the recording limit for the round-video button in the app itself.)
In big channels, your video gets converted server-side. Telegram's file documentation: "When sending videos to big channels, Telegram will automatically convert them, generating multiple versions in multiple qualities and formats." Because that processing takes time, those posts "will not be sent immediately" — they are queued like scheduled messages until conversion finishes. That is the official explanation for an upload bar that completed while the post never appeared. Telegram does not define how large a "big channel" is.
What Telegram does not publish
Naming the gaps is part of the answer here, because most of the confusion online is people filling them in:
- No complete supported-format list. "MPEG4" plus three example codecs is everything Telegram states.
- No compression parameters for normal (non-file) sends — no target bitrate, resolution ceiling or output codec.
- No per-platform differences. The FAQ gives one 2 GB / 4 GB pair, with no iOS-versus-desktop split.
- No stated quality effect of "send as file."
Where you need a number Telegram has not published, check the official documentation rather than a blog that has one. Other platform ceilings are collected in the limits guides.
FAQ
What video formats does Telegram support?
Officially, the Bot API says "Telegram clients support MPEG4 videos (other formats may be sent as Document)." Codec-wise, documentAttributeVideo.video_codec gives three examples — "h264", "h265", or "av1". Telegram does not publish a complete whitelist, so MP4/H.264 is the safe target rather than the only legal one.
Why does my video send as a file instead of a video on Telegram?
Either the format is not one Telegram renders inline — the documentation's "may be sent as Document" case — or the send path set the force_file flag, which Telegram defines as "Force the media file to be uploaded as document." Re-encode to MPEG4 for the first case; re-send without the file option for the second.
Does Telegram support MKV or AVI? You can upload them — Telegram's FAQ says "files of any type." Whether they play inline is a separate question, and Telegram documents MPEG4 as the format its clients support for video, adding only that other formats "may be sent as Document."
What is Telegram's video file size limit? 2 GB per file, "or 4 GB with Premium," per Telegram's FAQ. The ceiling applies to the person uploading: Telegram states that "any user can download large 2+ GB files uploaded by premium users," so free recipients can still open them.
Why did my MP4 turn into a looping GIF?
It probably has no audio track. Telegram's protocol documentation notes that without the nosound_video flag, videos without audio get the animated attribute — the GIF-style loop — instead of the regular video treatment.
Does converting to MP4 lose quality? Any re-encode is lossy, but at sensible settings the loss is far smaller than the difference between a file that plays inline and one that does not. If you want to understand which settings matter, see how to compress a video without losing quality.
Need the converter or the rest of the format tools? See all Clapr tools. Everything quoted here comes from telegram.org and core.telegram.org, checked 16 September 2026. Telegram's Bot API pages repeatedly note that "this limit may be changed in the future" — verify against the official documentation before relying on any number.