Steam trailer thumbnail: a 1920x1080 frame from the video itself

Steam wants the trailer poster as a 1920x1080 JPG or PNG taken from the video. Pull it with Sume video frames at max_edge 1920, plus the trailer specs to check.

5 min readSume
All posts

Steam's trailer page asks for a 1920x1080 JPG or PNG thumbnail that is a frame from the video itself, so the cleanest way to make one is to extract it. Sume's video frames returns a still at an exact time you name, as PNG or JPEG, at source size or clamped by max_edge, and the call is unbilled.

The trailer specs below are from Valve's Trailers (Steamworks Documentation), read 2026-10-02. The Sume side is Video frames and Video trim.

What does Steam require for trailers?

The page lists the technical specifications in the table. It does not give a maximum video length.

Steam trailer specs from Steamworks, read 2026-10-02
ItemRequirement
ResolutionUp to 1920 x 1080
Aspect ratio16:9 preferred, 4:3 accepted
Frame rate30/29.97 or 60/59.94 fps
BitrateHigh, 5,000+ Kbps
CodecH.264 video and AAC audio preferred; many formats can be transcoded
Containersmov, wmv or mp4
Thumbnail1920x1080 JPG or PNG, a frame from the video

How do I pull a 1920x1080 frame?

Send the trailer to POST /v1/video-frames with at set to the seconds you want, format of png, and max_edge of 1920. max_edge clamps the long edge, so a 16:9 trailer at 3840 x 2160 comes back at 1920 x 1080, and a 1920 x 1080 trailer comes back unchanged. Omit max_edge to keep the source size.

You can ask for up to 24 times in one request, each at least 0 and strictly below the duration. Each frame is a durable image artifact, and an instant that fails comes back with a null URL without failing the job.

curl -X POST https://api.sume.com/v1/video-frames \
  -H "Authorization: Bearer $SUME_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: steam-poster-001" \
  -d '{
    "video_url": "https://media.sume.com/artifacts/artf_demo/trailer.mp4",
    "at": [3.2, 17.5, 41.0],
    "format": "png",
    "max_edge": 1920
  }'

What if the trailer is long?

Video frames accepts sources up to 300 seconds. A longer trailer fails with duration_out_of_range. Cut the stretch you want a poster from with video trim (its source cap is 1800 seconds) and run frames on that cut, or take the frame from your editing project instead.

A 4:3 trailer, which Steam also accepts, will not yield 1920x1080 by clamping. Check the returned width and height for each frame.

How do I pick a good poster frame?

Do not take the first frame; trailers often open on a logo or a fade. Ask for a spread: for a 90 second trailer, at of 5, 15, 30, 45, 60 and 80 gives six candidates in a single call, or use fps of 0.1 for one frame every ten seconds (fps must be above 0 and at most 2, and the call is capped at 24 frames). The fps path samples mid-bin times, so with fps 0.1 the first frame is at 5 seconds, not 0.

Look for a frame with the game's strongest silhouette, readable at the small sizes the store uses. A frame in motion blur will look poor; step a few tenths of a second either side and re-request. Extraction is unbilled, so shortlisting costs nothing but time.

Then check what you got. The response lists each frame's t, url, width and height; confirm 1920 x 1080 before you upload. For PNG versus JPEG, Steam accepts either, so choose PNG if you will touch the image up and JPEG if you want a smaller file. Keep the frame's time in your notes: Steam asks that the poster come from the video, and the time is your proof of where it came from.

Can Sume check the rest of the Steam specs?

Only partly. Sume's video inspect probes a clip and returns the probe facts, but the docs list no bitrate guarantee, and Sume does not let you set bitrate or codec: requests carrying codec or crf are refused with ffmpeg_fields_rejected. The 5,000+ Kbps target, the 30 or 60 fps rates and the AAC audio are things you verify in your export tool.

Trim can conform frame rate to 24, 25, 30 or 60, which covers the 30 and 60 fps Steam names, but Steam's accepted list says 29.97 and 59.94, which Sume's conform does not offer as separate values. When the source is already a valid rate, leave output out and the clip keeps it.

Sources

Related posts

More in Media tools

All Media tools posts

Written by Sume