How do I caption a Shorts series in two languages in one batch?
Run one Sume caption job per episode and language: $0.20 each for clips up to 60 seconds, so a 10-episode season in two languages is $4.00.

Submit one POST /v1/video-captions job per episode per language and set language on each. A clip of at most 60 seconds costs $0.20 in Sume prices, so ten episodes in two languages is 20 jobs and $4.00.
YouTube's Help page on Shorts series describes a series as a Shorts-only playlist with seasons and episodes, with each episode at most 180 seconds (read 2026-10-07). Captions are the cheapest way to make every episode in that playlist readable with the sound off.
What the job takes
video_url is required and must be a public HTTPS video URL. style, font, language and script_text are optional. language is only a speech-to-text hint (en, es and so on); it never selects the style or the font. If you send script_text, Sume aligns your script instead of guessing the words.
The job fails with caption_no_speech on a silent clip, with next_action: use_overlay_captions; the silent micro-drama post covers that case.
| Episodes | Languages | Jobs | Price each | Total |
|---|---|---|---|---|
| 10 | 1 | 10 | $0.20 | $2.00 |
| 10 | 2 | 20 | $0.20 | $4.00 |
| 50 | 2 | 100 | $0.20 | $20.00 |
A tidy batch
Burn the language you shoot in first, then the second language as a separate output file named with the episode number. Do not translate by re-running the first job; the second language needs its own script_text or its own audio.
Use design overrides to keep the same colors across the whole season; a bad value is a 400 at request time, so you do not pay for a wrong render. The price applies to videos of at most 60 seconds under the current rule, so confirm it on the captions page for longer episodes.
- Same
styleanddesignfor every episode in a season. - One job per language per episode, never one job for both.
- Keep the caption output URL next to the episode record.
Quality checks before you ship the batch
Run the first episode in each language alone before you queue the rest. Check the line length on a phone-sized preview, the color contrast on your brightest scene, and the safe margins at the bottom of the frame. A fix after one job costs $0.20; a fix after fifty costs ten dollars and a lot of waiting.
If your script is known, pass it as script_text. Speech-to-text alone can mis-hear names, and a recurring character name is exactly the word that appears in every episode. A script lets the aligner time your spelling instead of guessing.
Keep the language hint honest. language tells speech-to-text what to expect; it does not translate. A Spanish caption track needs Spanish speech or Spanish script_text, and the style or font choice is separate. The micro-drama post covers the case in which there is no speech at all.
Naming and storage
Name each output by season, episode and language, for example s01e03-es. A flat folder of fifty files called captioned.mp4 is the usual way a batch goes wrong, and it costs more to fix than the $0.20 jobs cost to run.
Store the request body next to the output. If you change the season style later, you can replay the same body with a new style and compare the two renders.
Sources
Related posts
More in Media tools
- Captions for a video with loud background music: script text or cues
Music can bury speech and trip speech-to-text. Sume documents three ways to supply your own wording: script_text, a words array or cues. Which to pick.
- ChatGPT Sora clip as reference video: Omni takes 3 s each, trim
Sora 2 left the API but a ChatGPT clip can still seed a new render. Gemini Omni Flash 1.1 on Sume takes up to 3 reference videos, each 3 s at most.
- Content ID on a Short over one minute blocks it globally: keep a cut
YouTube says a video over one minute with an active Content ID claim is blocked globally. Keep a 59-second video-trim cut of every long Short as a fallback.
- Crop a 16:10 MacBook screen recording to 9:16: width 0.3516
A 16:10 recording needs crop width 0.3515625 for 9:16: 900x1600 at 2560x1600, but 674x1200 at 1920x1200 because 675 is odd. The request and the rounding.
Written by Sume