Subtitle Style Mockups / Static Frames / Comparison Samples
0. Research First, Then Deliver
Summary of public research on girl-group PV subtitles (2024 KCI paper + K-pop Y2K Seoul style guide):
- Graphic Emphasis: large, irregular strokes with thick-thin contrast, decorative letters (Blackpink / XG poster style);
- Mix & Match: serif + sans-serif + condensed + italic mixed, editorial magazine feel;
- Minimalism: clean sans-serif, no decoration, white space, appearing with the beat (NewJeans / aespa kinetic typography);
- Futurism: digital sans-serif + glitch / RGB offset / scan lines;
- Y2K Chrome + Stickers: chrome bubble lettering, candy colors (hot pink + aqua), sticker collage, sparkle stars;
- Handwritten Diary Feel: marker/highlighter + sticky notes + doodles (NewJeans youthful vibe).
1. Six Adapted Styles for Final Video (S1–S6)
| Code | Style | Key Elements | Best For |
|---|---|---|---|
| S1 | Y2K Chrome + Stickers | Bungee chrome gradient + pink badge + sparkle stars | Most "girl-group" feel; pink/aqua can swap to violet-pink |
| S2 | Minimal Dynamic | Anton white large text, offset, thin lines, Silkscreen small text | Standard lyrics version; safest, doesn't overpower background |
| S3 | Glitch Futurism | RubikGlitch + Anton, RGB offset, scan lines, HUD corners | Break / transitions |
| S4 | Mix & Match Editorial | Georgia Italic × Bebas Neue × Archivo Black, tape, GO! color blocks, sticky notes | Youthful/editorial feel, paragraph transitions |
| S5 | Graphic Emphasis | Anton giant text + white sticker outline + pink offset + stripes | Chorus burst, short words |
| S6 | Handwritten / Marker | Permanent Marker + pink fluorescent block + sticky notes + ♥★ arrows | Interlude / close-up embellishments |
2. Generate Static Frames (PIL + NumPy, No AI Libraries)
Scripts:
字幕\build\kpop_styles.py— S1–S6 six 2560×1080 static frames (2025 research version)字幕\build\art_frames.py— Early 6 artistic text schemes (glitch slices, neon breakdown, 3D giant text, collage, outline echo, vertical layout)字幕\build\gothic_art.py— Full-screen gothic (rejected by user, kept for archive)
Font directory: 字幕\build\fonts\ (Anton, ArchivoBlack, BebasNeue, Bungee, Monoton, PermanentMarker, RubikGlitch, Silkscreen, PirataOne, UnifrakturCook) + C:\Windows\Fonts (Georgia / Georgia Italic / Microsoft YaHei / Impact / Arial Black).
Download fonts (Google Fonts GitHub raw works):
https://raw.githubusercontent.com/google/fonts/main/ofl/<family>/<File>.ttf
Common Effect Functions (PIL / NumPy)
- Text Layer: per-character rendering with tracking (
text_img),stroke_width/stroke_fillfor outline; - Chrome Text: vertical multi-segment gradient applied to alpha mask (
gradient_fill) + diagonal highlight band; - Sticker Outline: dilate alpha with
MaxFilter(3)N times, then recolor; - Offset / Glitch: translate RGB channels separately (
chroma), random horizontal band displacement (glitch_slices), scan lines; - 3D Text: offset and layer the same text multiple times, with a deep-purple to lavender gradient from far to near;
- Halftone: grid dot overlay (
halftone); - Handwritten Highlighter: semi-transparent rounded rectangle behind text +
GaussianBlur; - Sticky Notes / Tape: semi-transparent rectangle + thin line texture + rotation;
- Sparkle Stars / Hearts: 4-point star polygon, double-circle + triangle heart shape;
- Grain:
np.random.normaloverlay at 1–3 levels to prevent banding.
3. Dynamic Samples (ASS Animation)
- 5s Three Styles:
字幕\build\styles_anim.py→公众号/输出/字幕风格参考/小样_S2_5s.mp4etc.; - S4/S6 30s:
字幕\输出\S4S6_30s\(two sub-agents each produce one version, see below); - Flare FLARE:
flare.py+flare_video.py; Neon:neon_wide.py; - Avoid Neon Completely:
avoid_side2.py.
Animation Patterns: slam in (\fscx118→100 + \t + \blur), rotate-fall-in (\frz + \t), slide in (\move), fade in, color block zoom/wipe (\p1 + \fscx), sticky note slide up, beat pulse (every 0.447s for 134BPM beat).
4. Comparison Delivery Standards
- Single Sample: 2560×1080 / 30fps / H.264 crf16 / faststart; 30s = 900 frames, 5s = 150 frames.
- Comparison Video:
vstacktop/bottom, each strip scaled to 1280×540, output 1280×1080 (or 3 strips → 1280×1620), overlay labels with ASS. - Keyframe Table: 2×2 / 2×3 / 3×3 grid, each cell 853×360 or 1280×540, with style name and timestamp label.
- Explanation md: style description + file table + timeline + known limitations.
- Examples:
字幕\输出\字幕风格参考\(6-style static + S2/S4/S6 5s comparison),字幕\输出\S4S6_30s\(two 30s versions + comparison).
5. Parallel Sub-Agent Workflow ("Sub-Agents Work Separately")
- Master agent prepares shared base footage (cropped + slightly darkened) →
_base_30s.mp4; copiesfonts/to output directory; writes cue sheet (relative time). - One sub-agent per style, prompt must include:
- Absolute path to base footage, output directory, output filename (
S4_30s.mp4/S6_30s.mp4); - Font directory, ffmpeg path, hard ASS rules (time format, Style color values with no trailing
&,fontsdirrelative, ASCII filenames); - Line-by-line timeline (8 lines) + style description + "No Chinese / Don't cover faces" constraints;
- Self-check requirements (ffprobe for 30s, extract frames to check text, no Chinese, faces clear).
- Absolute path to base footage, output directory, output filename (
- Each sub-agent writes only files with its own prefix, no overwriting; reports back layout/animation/encountered issues.
- Master agent collects all: runs
s4s6_compare.pyto produce comparison video + keyframe table + unified explanation md; then extracts frames itself for final acceptance check.
6. Selection Recommendations (Violet-Pink Neon Stage + Winged Character)
- Safest: S2 Minimal Dynamic;
- Most Girl-Group Flavor: S1 Y2K Chrome (swap colors to violet-pink theme);
- Paragraph Transitions: S4 Mix & Match;
- Burst: S5;
- Interlude / Close-up: S6;
- Break: S3.
- User explicitly rejected: full-screen gothic, blood-red color scheme. Do not produce gothic-style directions.
7. Acceptance Checklist
- Static frames are 2560×1080, no Chinese typos
- Dynamic sample duration verified by ffprobe (5.000 / 30.000)
- Frame extraction confirms subtitle presence, no face covering, no Chinese
- Comparison video + keyframe table + explanation md all present
- Style names / filenames unified (
S4_30s.mp4,对比_S4S6_30s.mp4)