Design Video Chapters

Medium35 min
1 / 30
understanding6 min read

Video Chapters Context and Platform Goals

How Video Chapters Context and Platform Goals (understanding) informs Video Chapters architecture and interviewer depth.

Video Chapters Context and Platform Goals

Video chapters are navigation metadata: time-indexed markers on the progress bar, a chapter list, and shareable deep links. YouTube popularized auto chapters from speech; Spotify uses episode markers on long podcasts; Apple TV surfaces skip sections in educational content.

Quantified constraints

Assume 2B weekly plays, 800K new long-form uploads/day, median 14 minutes, target 6–10 chapters per video, p95 auto-chapter latency under 5 minutes after ASR completes.

Interviewers want you to separate read path (tiny JSON manifest at player init) from write path (ASR → segmentation → title generation → publish). Mention creator manual overrides and version binding to transcodeGeneration.

Reference implementation sketches
javaOne Dark Pro
1public final class ChapterJobKey {
2 private final String videoId;
3 private final String transcodeVersion;
4 private final int modelVersion;
5 public String dedupeKey() {
6 return videoId + ":" + transcodeVersion + ":chapters-v" + modelVersion;
7 }
8}
pythonOne Dark Pro
1from dataclasses import dataclass
2
3@dataclass(frozen=True)
4class ChapterBoundary:
5 start_ms: int
6 confidence: float
7 source: str
8
9def merge_boundaries(candidates: list[ChapterBoundary], min_gap_ms: int = 10_000) -> list[int]:
10 ordered = sorted(candidates, key=lambda c: c.start_ms)
11 starts: list[int] = []
12 last = -min_gap_ms
13 for c in ordered:
14 if c.start_ms - last >= min_gap_ms:
15 starts.append(c.start_ms)
16 last = c.start_ms
17 return starts
typescriptOne Dark Pro
1interface ChapterMarker {
2 startMs: number;
3 title: string;
4 durationMs?: number;
5}
6
7export function seekToChapter(
8 player: { seek: (ms: number) => void },
9 chapter: ChapterMarker,
10): void {
11 player.seek(chapter.startMs);
12}
Failure and edge cases

For Video Chapters Context and Platform Goals, document what happens when ASR returns empty text, when creators delete a mid-video chapter leaving a gap, when transcodeVersion increments mid-playback, and when CDN serves an expired manifest during a viral spike. State explicit degraded behavior: hide markers rather than show wrong times.

Observability

Emit metrics chapter_job_latency_seconds, manifest_cache_hit_ratio, publish_conflict_total, and segmentation_confidence_histogram tagged by channel tier. Trace publish path with videoId and transcodeVersion on every span.

Why interviewers care

Video Chapters interviews reward crisp scope, explicit trade-offs, and failure stories—not generic microservice diagrams.

Interview checkpoint

Name one failure story for Video Chapters Context and Platform Goals that proves you understand real outages, not happy-path diagrams.

Key Highlights

  • Chapters are time-indexed navigation metadata bound to a specific video version
  • YouTube/Spotify/Apple use auto + manual chapter workflows at upload scale
  • Player UX: scrubber markers, chapter list, deep links, and search snippets
Interview Tip
State chapter read QPS and time-to-auto-chapters SLO before drawing boxes.
What Impresses
Versioned manifest, keyframe-aligned seek, and idempotent transcode hooks.
Avoid This
Do not store chapters without transcodeVersion — re-encode breaks seek.

Section Rescue Kit

Buzzwords to use:

Chapter manifestTopic segmentation

Safe statements:

  • "Let me separate chapter metadata reads from async ASR/segmentation writes."
  • "I will size ASR pool from new upload minutes per hour and target time-to-chapters."
Design Video Chapters - System Design | WinJob | WinJob