Chinese Subtitles API
Captions that read like a human typeset them
Render styled Chinese captions into video through one API. ZapCap handles the parts generic subtitle tools get wrong on Chinese — line breaks without visible spaces, punctuation that can’t start a line, bottom-heavy phrase shapes, and product names that don’t deserve to be split mid-character.
Why generic subtitle APIs break on Chinese
Chinese isn’t English without spaces. It’s a writing system with its own line-break rules, punctuation conventions, and reading-speed expectations. Get them wrong and the captions read awkwardly — even when the translation is perfect.
No visible word spaces
Chinese text isn’t separated by whitespace the way English is. Naive splitters break by character or punctuation, producing single-character lines and orphaned particles.
Punctuation can’t start lines
Full-width punctuation like 。 , ? should not start a new line — kinsoku rules pull them onto the previous line.
Bottom-heavy reading shape
Professional Chinese subtitling prefers a shorter top line over a shorter bottom one — the opposite of English convention. Netflix’s PRC guide formalizes this.
The same translation, two different renderers
Translation: identical. Layout: not. Annotations call out the things that break Chinese captions in practice.
source transcript · 两分钟就好,真的。
好 ,
真的。
真的。
How ZapCap renders Chinese captions
Phrase-aware segmentation
Captions are split at phrase boundaries, not at fixed character counts. Words like 就好, 真的, 产品名 stay whole.
Kinsoku punctuation
Full-width punctuation (, 。 ? !) is pulled onto the previous line. Opening quotes attach to the next.
Bottom-heavy, max two lines
When wrapping is needed, the shorter line lands on top — matching Netflix’s PRC style guide. Three-line cues are split into two cues instead.
Brand-term dictionary
Add product names and approved transliterations to the dictionary — transcription hints that bias recognition toward your brand terms. Carry an approved transcript through and the text renders verbatim.
Simplified + Traditional
Both scripts treated as separate localizations — a content and transcript choice, not an API language code. Set language "zh" on the task and supply the script you want in the transcript.
Font fallback chain
Renders with PingFang SC / Hiragino Sans GB / Microsoft YaHei stacks server-side. No client-side font availability — what you see in the MP4 is what every viewer sees.
Built on published references — not magic
The rules above aren’t bespoke. They’re documented by Unicode, the W3C, and Netflix’s professional subtitling guidelines. ZapCap implements them; this page cites them.
If you’re evaluating us against another captioning vendor, ask whether they implement these. The answers tell you a lot.
- Unicode Line Breaking Algorithm (UAX #14) — the basis for language-aware line breaks, including CJK and SE-Asian languages. unicode.org/reports/tr14
- W3C i18n — Line Breaking overview. w3c.github.io/i18n-drafts
- Netflix · Simplified Chinese timed text style guide — character-per-line limits, two-line max, bottom-heavy preference. partnerhelp.netflixstudios.com
- MDN · CSS line-break — language-aware line-breaking property. developer.mozilla.org
Render Chinese captions in one task call
Set language on the render task. Optional: send an approved translation (skip retranscription) and a brand-term dictionary to bias recognition toward your product names.
- Set language "zh" — Simplified vs Traditional is a transcript choice
- Bring your own translation via the SRT-to-burned-in workflow
- Mix with caption style templates — Chinese with a Beast preset works
- One source video → multiple language renders, consistent style
// Chinese caption render — auto-translate path
// No SDK — call the REST API with fetch.
// fetch IDs from GET /templates
const task = await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: 'POST',
headers: { 'x-api-key': process.env.ZAPCAP_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: '<TEMPLATE_UUID>',
language: 'zh',
renderOptions: {
subsOptions: { emphasizeKeywords: true },
},
// Transcription hints — biases recognition toward your brand terms.
dictionary: ['ACME', 'TurboMax'],
notification: {
type: 'webhook',
notificationsFor: ['render'],
recipient: 'https://acme.com/hooks/zapcap',
},
}),
}).then(r => r.json());
// Bring-your-own translation
const task2 = await fetch(`https://api.zapcap.ai/videos/${videoId}/task`, {
method: 'POST',
headers: { 'x-api-key': process.env.ZAPCAP_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({
templateId: '<TEMPLATE_UUID>',
language: 'zh',
transcript: zhApprovedTranscript,
notification: {
type: 'webhook',
notificationsFor: ['render'],
recipient: 'https://acme.com/hooks/zapcap',
},
}),
}).then(r => r.json());Before you ship Chinese captions
Six checks the rendering pipeline can’t do for you.
- Decide Simplified or Traditional per market. They’re different localizations expressed in your transcript, not different API language codes.
- Define a brand-term dictionary. Product names and approved transliterations bias transcription; bring an approved transcript for copy that must not be re-translated.
- Cap at two lines, bottom-heavy. Split into multiple cues if a single one exceeds the per-line character count.
- Check reading speed. Aim for the Netflix PRC guide’s per-second character count.
- Safe-zone check on 9:16. Chinese caption boxes are visually heavier; overrun shows up faster than on English.
- Native-speaker pass on the rendered MP4, not the source transcript. Layout problems only show up at render time.
Use cases that need Chinese rendering
Chinese subtitle API questions
Yes. Set language "zh" on the render task; Simplified vs Traditional is a transcript choice, not a separate API code. Supply the script you want in the approved transcript.
Render Chinese subtitles through the API
Language-aware line breaks, kinsoku punctuation, a brand-term dictionary, and bring-your-own translation — all in one task call. Pricing is $0.10/min of rendered video.