| name | netflix-subtitle-processor |
| description | Process Whisper SRT files to Netflix Timed Text specifications. Validates timing, reading speed, character limits. Supports English, Chinese, Japanese, Korean, Spanish. |
| user_invocable | true |
Netflix Subtitle Processor
Post-process Whisper-generated SRT files to meet Netflix Timed Text Style Guide specifications.
Quick Start
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py validate video.srt
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py fix video.srt video_fixed.srt
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py clean video.srt video_clean.srt
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py report video.srt
Workflow Integration
This skill complements openai-whisper-guide for professional subtitle production:
Audio/Video → Whisper (transcription) → Netflix Processor (compliance) → Netflix-ready SRT
Recommended Pipeline
whisper audio.mp3 --model turbo --output_format srt --max_line_width 42 --max_line_count 2
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py validate audio.srt
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py fix audio.srt audio_netflix.srt
python3 ~/.claude/skills/netflix-subtitle-processor/scripts/netflix_subs.py validate audio_netflix.srt
Commands
validate
Check SRT file against Netflix specifications.
python3 netflix_subs.py validate input.srt [--lang en] [--kids] [--json]
Options:
--lang: Specify language (auto-detected if omitted)
--kids: Use children's content limits (lower CPS)
--json: Output results as JSON
Exit codes:
0: All entries pass
1: Issues found
fix
Auto-fix common issues and write corrected SRT. Keeps all entries.
python3 netflix_subs.py fix input.srt output.srt [--lang en]
Fixes applied:
- Extends subtitles shorter than 833ms minimum
- Splits lines exceeding character limits (smart punctuation breaks for CJK)
- Fixes overlapping subtitles
- Adjusts gaps between subtitles
- Limits to 2 lines per subtitle
clean
Remove unfixable entries, output only valid ones. Use when you need guaranteed compliance.
python3 netflix_subs.py clean input.srt output.srt [--lang en] [--kids]
Behavior:
- Applies all fixes from
fix command
- Removes entries that still have issues (e.g., CPS too high)
- Re-indexes remaining entries
- Reports which entries were removed and why
report
Generate detailed validation report.
python3 netflix_subs.py report input.srt [--lang en] [--kids]
Netflix Specifications
| Language | Code | Max Chars/Line | Adult CPS | Kids CPS |
|---|
| English | en | 42 | 17 | 15 |
| Chinese | zh | 16 | 9 | 7 |
| Japanese | ja | 13 | 4 | 4 |
| Korean | ko | 16 | 12 | 10 |
| Spanish | es | 42 | 17 | 15 |
Common timing rules (all languages):
- Min duration: 833ms (5/6 second)
- Max duration: 7 seconds
- Min gap between subtitles: 83ms (2 frames @ 24fps)
- Max lines per subtitle: 2
Options
Language Detection
Language is auto-detected from content. Override with --lang:
python3 netflix_subs.py validate video.srt
python3 netflix_subs.py validate video.srt --lang zh
python3 netflix_subs.py validate video.srt --lang ja
Children's Content
Use --kids flag for stricter CPS limits:
python3 netflix_subs.py validate video.srt --kids
python3 netflix_subs.py clean video.srt output.srt --kids
JSON Output
Get machine-readable results:
python3 netflix_subs.py validate video.srt --json
Stdin/Stdout
Use - for piping:
cat video.srt | python3 netflix_subs.py validate -
python3 netflix_subs.py fix video.srt - > output.srt
Troubleshooting
"CPS too high" after fix
Some subtitles have too much text for their duration. Options:
- Manually shorten the text
- Use
clean command to remove problematic entries
- Extend the subtitle duration (may cause overlap)
Overlapping subtitles
The fix command automatically resolves overlaps by shortening the previous subtitle. If this causes issues, manually adjust timing.
Chinese/Japanese character counting
Full-width characters (CJK) count as 2 characters. Line breaks for CJK try to split at punctuation (。,!?) before falling back to midpoint.
Remaining issues after fix
The auto-fix handles timing and line breaks. Issues requiring manual attention:
- Content too dense (high CPS with correct timing)
- Complex multi-line reformatting
References