48 or 50 fps for YouTube: Sume output.fps accepts 24, 25, 30, 60
YouTube lists 24, 25, 30, 48, 50 and 60 fps as common rates. Sume Timeline's output.fps takes 24, 25, 30 or 60, so omit it for 48 or 50 sources. Why.

YouTube lists 24, 25, 30, 48, 50 and 60 frames per second as common rates, and Sume Timeline's output.fps field accepts only 24, 25, 30 or 60. For a 48 or 50 fps source, leave output.fps out. Timeline then renders at the rate of the sources, and that keeps 48 or 50. YouTube's encoding page (read 2026-10-08) also says to encode at the rate the content was recorded, which is the same advice.
The two lists
The left list is from YouTube's upload encoding page. The right list is from the Sume Timeline docs.
| Rate | On YouTube's common list | Accepted by output.fps |
|---|---|---|
| 24 | Yes | Yes |
| 25 | Yes | Yes |
| 30 | Yes | Yes |
| 48 | Yes | No; omit output.fps |
| 50 | Yes | No; omit output.fps |
| 60 | Yes | Yes |
What omitting does
The Timeline docs say that without output.fps the job renders at the rate of the sources. The longest video sources decide the rate, stills have no rate, and 30 applies only when no source has a rate. If you do set a rate that differs from a source, the job repeats or drops a frame every few frames, which judders on motion, and it reports output_fps_resamples_sources with the rate the sources wanted.
So a 50 fps source set to output.fps 25 or 30 is resampled with that warning, and a 50 fps source with the field omitted passes through at 50. Mixed-rate sources are the one case to check: pick the rate by hand only if you accept the resample.
A check before you render
Use POST /v1/timeline-1.0/plan, which is unbilled, and then read warnings on the finished job. If output_fps_resamples_sources appears, either remove output.fps or make the sources share one rate. Video trim also takes an output block with fps of 24, 25, 30 or 60, so the same limit applies there. The 23.976 case is in this post.
- 48 or 50 fps sources: omit output.fps.
- One rate across all sources: set it only if it matches.
- Mixed rates: expect output_fps_resamples_sources.
A worked example with mixed sources
Say a project has two 50 fps clips and one 30 fps clip. The docs say the longest video sources decide the rate when output.fps is omitted, so the answer depends on which clips are longest. If the 50 fps clips fill most of the time, the output is 50 fps and the 30 fps clip is resampled, with output_fps_resamples_sources reported. If you set output.fps to 30, the two 50 fps clips are resampled instead.
The honest fix is to shoot or generate at one rate. When that is not possible, choose the rate of the clip that carries the motion, and accept a resample on the clip that is mostly static. Stills have no rate and never force a resample.
Sources
Related posts
More in Developers
- 4K 3840x2160 for YouTube: Sume Timeline output stops at 2160 per edge
YouTube lists 35-45 Mbps for 4K. Sume Timeline allows even width and height from 256 to 2160, so 3840x2160 is refused. What you can render instead.
- 60 clips on hosted MCP: three jobs_wait batches of 20, 3 calls total
jobs_wait takes 1 to 20 job_ids. For 60 clips that is three batch waits instead of 60. Add include_results to skip the separate result reads too.
- 720x1280 vs 1080x1920 for a 60 s Short: 40 MB vs 63 MB
YouTube lists 5 Mbps for 720p and 8 Mbps for 1080p. A 60 second Short is 40.38 MB vs 62.88 MB with audio. Set output.width and height in Sume Timeline.
- A 12-minute video job costs 24 status reads at 30 s and 360 at 2 s
Poll cadence arithmetic for Sume video jobs: 30-second polls, the 2-second SDK floor, and the 20-minute client deadline, with a runnable calculation.
Written by Sume