Telegram video sticker: 512 px, 3 s, 256 KB, WEBM VP9 with Sume

Telegram video stickers need a 512 px side, 3 s, 30 fps, 256 KB, no audio, WEBM VP9. Sume trims and resizes but outputs MP4, so one step stays outside.

5 min readSume
All posts

A Telegram video sticker is a WEBM clip, VP9-encoded, with one side exactly 512 pixels, no audio, at most 3 seconds, at most 30 fps and at most 256 KB. Sume's video trim can do the cut, drop the audio, set the 512 side and pick the frame rate, but it returns an H.264 MP4, so the last conversion to WEBM VP9 has to happen in a tool you run yourself.

The sticker rules come from Telegram's Stickers page, read 2026-10-02. The Sume side is documented in Video trim.

What are the exact Telegram video sticker rules?

Telegram's page gives these requirements for video stickers. The same page lists video emoji separately, at exactly 100x100 pixels.

Telegram video sticker requirements, read 2026-10-02
RequirementValue
DimensionsOne side exactly 512 px, the other 512 px or less
DurationNo more than 3 seconds
Frame rateUp to 30 fps
File sizeNo more than 256 KB
FormatWEBM, VP9 codec
AudioNo audio stream
PlaybackShould loop

Which parts can Sume's video trim do?

Video trim takes one Sume-hosted clip, a start, and exactly one of end or duration, and writes a new MP4. For a sticker use duration of 3 or less, audio: "drop", and an output conform. The conform accepts width and height from 256 to 2160 and an fps of 24, 25, 30 or 60, and it only works with precision: "exact", the default.

A conform with only one of width or height keeps the aspect ratio, so {"height": 512} on a vertical clip or {"width": 512} on a wide clip gives a 512 side without stretching. If you send both, the clip is scaled to exactly that size, which stretches it when the ratios differ. For a square sticker send {"width": 512, "height": 512} only on an already square source.

curl -X POST https://api.sume.com/v1/video-trim \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: sticker-trim-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
    "start": 4.0,
    "duration": 3,
    "audio": "drop",
    "output": { "width": 512, "fps": 30 }
  }'

What stays outside Sume?

Two requirements are not reachable from Sume. First, the container and codec: the trim is documented as an exact re-encode to libx264 in yuv420p, and the server compiles the ffmpeg command, so a request that carries codec or crf fields is refused with ffmpeg_fields_rejected. There is no WEBM or VP9 output. Second, the 256 KB ceiling: Sume does not expose a bitrate control, so you cannot target a file size.

For 3 seconds, 256 KB is about 700 kbps on average (256 x 1024 x 8 / 3 is roughly 699,000 bits per second). Re-encode the Sume MP4 to VP9 with a tool you control and watch the size. Treat that number as a budget, not a promise from Telegram's page.

What does a clean workflow look like end to end?

Start by picking the three seconds. Run video inspect on the source with frames: false to read the probe, including whether the clip has an audio track, or sample stills with video frames to find the moment. Then trim with the settings above and poll the job with GET /v1/jobs/:id/status until it is complete. The result is kind: video_trim with video_url, duration_seconds, actual_start_seconds, precision and audio. With precision: "exact", the start is frame-accurate, so what you picked is what you get.

Next, download the MP4 and convert it. Any VP9-capable encoder works; the two numbers to control are the pixel size, which is already set, and the average bitrate, which you tune until the file is under 256 KB. Then verify against the table from Telegram's page: one side 512, no audio stream, at most 3 seconds, at most 30 fps.

Costs are small. The trim is a flat $0.02 per job in the published rate, there is no model inference, and a failed validation is refused at admit, such as video_trim_range_empty for a range that is empty or longer than 900 seconds. If you are cutting many stickers from one source, give each a different Idempotency-Key and reuse a key only to retry the identical request.

How do I make it loop and check it?

Telegram asks for a loop. Sume does not detect loop points, so choose start and duration where the last frame matches the first, for instance a spinning product or a breathing idle pose. Pull the first and last frames with video frames at 0 and a time just under the duration and compare them. Frame times must be at least 0 and strictly below the duration.

Before conversion, confirm the trim result: the job result reports duration_seconds, audio and the applied output. If the clip you cut was already silent, audio: "drop" is harmless. The full run is trim, wait for the job, download the MP4, convert, test in Telegram.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume