Communitygithub.com

HedgehogsGX/chinese-subtitles-skill

EN→简体中文 Untertitel übersetzen und einbrennen (Claude-Skill). Glossarsammlungen für Apex/Warframe/osu!/Minecraft/SC2/CS2; einzeilige weiße Hardsubs mit Kontur. Funktioniert auch für Talks/Vlogs.

Was ist chinese-subtitles-skill?

Dieses Skill (für Claude Code/Agenten) automatisiert die Erstellung von hart codierten chinesischen Untertiteln (vereinfacht) für englische Videodateien. Es wandelt eine bestehende MP4-Datei in eine Version mit eingebrannten Untertiteln um und erzeugt eine passende SRT-Datei. Die Besonderheit liegt in der hohen Anpassbarkeit an die jeweilige Spiel-Community: Das Skill enthält gebündelte Glossare für Apex Legends, Warframe, osu!, Minecraft-Speedruns, StarCraft 2 und CS2. Diese Glossare legen fest, welche englischen Fachbegriffe im Chinesischen erhalten bleiben und wie sie zu übersetzen sind. Der Workflow umfasst Schritte wie die Auswahl des passenden Glossars, Transkription (mit Reparatur von ASR-Fehlern bei Fachjargon), Übersetzung in ein JSON-Format, Erstellung der SRT mit spezifischen Stilregeln (einzeilig, kurze Zeilen, weiße Schrift mit harter Kontur, Schriftart Source Han Sans Bold) und schließlich das Einbrennen der Untertitel sowie der Kapitelkarten. Ein wichtiges Feature ist die Möglichkeit, einzelne Untertitel später durch Splice-Vorgänge zu korrigieren, ohne die gesamte Datei neu encodieren zu müssen. Das Skill wurde ursprünglich für ein 22-minütiges Apex-Bewegungsvideo entwickelt, ist aber themenneutral – lediglich Glossar und Untertitelposition müssen je nach Video angepasst werden.

Funktioniert mit✓Claude Code~Codex CLI~Cursor
npx skills add HedgehogsGX/chinese-subtitles-skill

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Video Chinesische Untertitel — Übersetzen und einbrennen

Nimmt ein englisches Video, das bereits auf der Festplatte existiert, und erzeugt eine Version mit hart codierten vereinfachten chinesischen Untertiteln sowie eine passende SRT.

Das Herunterladen ist bewusst nicht Teil des Umfangs. Gehen Sie davon aus, dass die Quell-MP4 bereits vorhanden ist.

Die Pipeline ist themenneutral – sie wurde anhand eines 22-minütigen Apex-Bewegungsvideos entwickelt, aber nichts in den Skripten weiß oder kümmert sich darum, was das Filmmaterial ist. Was sich pro Video ändert, ist das Glossar und die Position des Untertitelbalkens.

Wie gute Ausgabe aussieht

Die Person, die dies verwendet, legt Wert auf ein bestimmtes, bereits festgelegtes Aussehen. Dies sind keine Standardeinstellungen, die jedes Mal neu überdacht werden müssen – sie wurden durch Iteration über echte Ausgabe ermittelt, und eine stillschweigende Änderung wird als Rückschritt behandelt:

  • Nur vereinfachtes Chinesisch. Niemals gemischt mit traditionellem Chinesisch. Vor der Auslieferung überprüfen.
  • Immer eine Zeile pro Untertitel. Zweizeilige Untertitel sind die häufigste Beschwerde. Wenn eine Zeile zu lang ist, teilen Sie sie in zwei aufeinanderfolgende Cues auf, anstatt sie umzubrechen. build_srt.py erzwingt dies.
  • Untertitel sind kurz. „Eine Zeile“ ist kein Freibrief für eine sehr breite Zeile. Zielen Sie auf maximal ~1100 px gerenderte Breite (etwa 57 % des Bildes bei 1080p).
  • Kein Hintergrundkasten. Weißer Text, harte dunkle Kontur, weicher dunkler Schatten.
  • 思源黑体 / Source Han Sans Bold (mitgeliefert unter assets/NotoSansSC-Bold.ttf). Aufrecht und fett, mit kräftigen lateinischen Zeichen – dieser Videostil ist voll von englischem Jargon inmitten chinesischer Sätze, und eine Display-Schriftart kommt damit schlecht zurecht.
  • Jargon, den die Community tatsächlich auf Englisch sagt, bleibt auf Englisch. Welche Begriffe das sind, ist eine themenspezifische Frage, und genau das beantworten die Glossare.
  • Eingebrannte Kapitelkarten erhalten eine chinesische Zeile darunter, nicht darüber.

Arbeitsablauf

1. Quelle untersuchen und ein Glossar auswählen

ffprobe -v error -show_entries format=duration -show_entries stream=codec_type,codec_name,width,height,r_frame_rate -of default=nw=1 source.mp4

Notieren Sie Dauer und Bildrate genau – jeder spätere Schritt hängt davon ab.

Dann ermitteln Sie, worum es in dem Video geht, und lesen Sie references/glossaries/README.md, das zum richtigen Glossar führt und angibt, welche Abschnitte davon zu lesen sind. Lesen Sie den Abschnitt 字幕使用原则 des passenden Glossars vollständig durch, bevor Sie übersetzen – er ist kurz und enthält die Konventionen für dieses Spiel.

Mitgeliefert: Apex Legends, Warframe, osu!, Minecraft 速通/MCSR, StarCraft 星际争霸, Counter-Strike 反恐精英, ARC Raiders.

Wenn es für dieses Video kein Glossar gibt, ist das der Normalfall. Übersetzen Sie anhand überprüfbarer offizieller vereinfachter Namen, führen Sie eine Liste der Begriffe, über die Sie entscheiden mussten, und übergeben Sie diese Liste am Ende. Wenn ein Begriff keinen offiziellen chinesischen Namen hat, verwenden Sie eine deskriptive Übersetzung und weisen Sie darauf hin, dass sie nicht offiziell ist – präsentieren Sie eine Vermutung nicht als endgültig. Erfinden Sie niemals einen Namen für etwas, das bereits einen hat.

2. Ein englisches Transkript mit Zeitangaben beschaffen

Wenn das Video von YouTube stammt, sind die automatischen Untertitel eine brauchbare Grundlage: yt-dlp --write-auto-subs --sub-langs 'en.*' --skip-download. Es handelt sich um fortlaufende Untertitel mit Zeitangaben auf Wortebene, daher deduplizieren Sie sie zu Satzsegmenten.

Automatische Untertitel verunstalten Jargon stark, und Sie müssen ihn beim Übersetzen reparieren. ASR transkribiert phonetisch anhand eines allgemeinen englischen Modells, daher kommt jeder Bereichsbegriff, der kein gebräuchliches Wort ist, als plausibles falsches Wort zurück. Reale Beispiele aus Apex-Bewegungsmaterial: 'forward rez/raft/raz' → RAS, 'Neor strafe' → Neo strafe, 'pedo strafe' → Pito strafe, 'mantel boost' → mantle boost, 'alerts' → lurches, 'my VO was so high' → my velo (velocity), 'I couldn't attach out of that' → couldn't tap-strafe out of that. Erwarten Sie die gleiche Art von Schaden in jedem jargonreichen Video – das Glossar ist es, das Sie in die Lage versetzt, es zu erkennen.

Wo Sprache wirklich nicht wiederherstellbar ist – Musik-Einlagen, überlappendes Schreien – lassen Sie zh für dieses Segment leer, sodass es weggelassen wird, und teilen Sie dem Benutzer mit, welche Zeitstempel Sie weggelassen haben. Eine plausible Zeile zu erfinden ist schlimmer als keine Zeile.

3. In ein Segments-JSON übersetzen

[{'i': 1, 'start': 0.24, 'end': 4.90,
  'en': 'Seeing movement players pull off tricks like these is super cool and all, but',
  'zh': '看身法玩家秀出这种操作确实很酷,但真正的问题是'}]

Behalten Sie en bei – es ist nicht dekorativ. build_srt.py verwendet es, um eine Satzfortsetzung von einer eigenständigen Äußerung zu unterscheiden, wenn entschieden wird, ob zwei Cues zusammengeführt werden dürfen – das verhindert Zusammenschreibungen wie 算了好 oder 是,长官你好啊.

4. Die SRT erstellen

python scripts/build_srt.py segments.json sub.srt --font assets/NotoSansSC-Bold.ttf

Es gibt einen Bericht aus. Behandeln Sie Nicht-Null-Werte bei overlaps, multiline, latin_cjk_runons oder term_split_across_cues als Fehler, die vor der Codierung zu beheben sind. Ein paar under_0.35s-Cues sind in Ordnung, wenn es sich um 1–3 Zeichen lange Einwürfe handelt – überprüfen Sie sie, gehen Sie nicht davon aus, dass sie richtig sind.

5. Eingebrannte Kapitelkarten finden und übersetzen

python scripts/find_chapters.py source.mp4

Ersteller brennen Kapitelkarten oft direkt in das Video ein, anstatt YouTube-Kapitel zu verwenden, daher zeigen die Metadaten keine an. Dieses Skript meldet Kandidatenfenster; extrahieren Sie einen Frame aus jedem und lesen Sie den tatsächlichen Kartentext, bevor Sie die Übersetzung schreiben. Ausgabe chapters.json: [{'start': 42, 'end': 46, 'zh': '第 1 章:定义 lurch 组合'}].

6. Auf Stellen prüfen, an denen Untertitel mit Bildschirmtext kollidieren würden

Outro-Karten sind der übliche Übeltäter – Untertitel an der normalen Position landen auf den Social-Media-Links des Erstellers. Extrahieren Sie einen Frame, finden Sie die Lücke und deklarieren Sie sie:

[{'from': 1334.0, 'to': 100000, 'bottom': 820}]

Der Standard-Untertitelbalken sitzt oberhalb eines typischen FPS-HUDs. Ein anderes Spiel oder nicht spielbezogenes Material kann dort eigene Elemente platzieren – eine MOBA- Minimap, die Bewertungslinie eines Rhythmusspiels, das Lower Third eines Vortrags. Extrahieren Sie einen Frame und schauen Sie nach, bevor Sie die Standardeinstellung akzeptieren.

7. Overlay erstellen und codieren

python scripts/build_overlay.py sub.srt ov --font assets/NotoSansSC-Bold.ttf \
    --duration 1354.351 --chapters chapters.json --avoid avoid.json
python scripts/burn_in.py source.mp4 ov/concat.txt out.mp4

Überprüfen Sie, ob der gemeldete Drift des Overlays einige Millisekunden beträgt, nicht Hunderte.

Bevor Sie sich auf eine ~20-minütige Codierung einlassen, setzen Sie ein Overlay-PNG in PIL auf einen echten Frame und betrachten Sie es. Es kostet Sekunden und fängt Positions- und Schriftfehler, die sonst erst 20 Minuten später auftauchen würden.

8. Überprüfen

python scripts/verify.py out.mp4 --expect-frames <frames> \
    --contact-sheet sheet.jpg --at 75 300 660 945 1340

Betrachten Sie das Kontaktblatt. Bestätigen Sie: Einzelzeilen, lesbar über hellen Frames, Kapitelzeilen unter ihren Karten, nichts kollidiert mit HUD oder Outro-Text.

9. Spätere Korrekturen – Spleißen, nicht neu codieren

Wenn der Benutzer bittet, ein paar Zeilen zu ändern (was passieren wird), bauen Sie die SRT neu, vergleichen Sie sie per Diff mit der vorherigen, um zu finden, welche Cues sich verschoben haben, dann:

python scripts/splice.py out.mp4 source.mp4 sub.srt out_fixed.mp4 \
    --font assets/NotoSansSC-Bold.ttf --change-from 310 --change-to 316 \
    --duration 1354.351 --chapters chapters.json --avoid avoid.json
python scripts/verify.py out_fixed.mp4 --expect-frames <frames> --seams 310 316

15 Sekunden statt 20 Minuten. Die Bildanzahl muss identisch sein.

Liefergegenstände

Neben out.mp4 übergeben Sie die SRT (Dialog plus Kapitelzeilen, zusammengeführt und neu nummeriert), damit die Untertitel später bearbeitet werden können, ohne die Arbeit zu wiederholen. Bieten Sie auch einen chinesischen Titel und eine Beschreibung an – wenn das Video ein Repost ist, weisen Sie darauf hin, dass die originale Ich-Perspektive die Autorschaft impliziert und dass Musikattributionsblöcke in ihrem ursprünglichen Englisch bleiben sollten, weil die Lizenz genau diese Form verlangt.

Wenn Sie Begriffe festlegen mussten, die nicht in einem Glossar enthalten waren, listen Sie diese auf. Ein einmal festgelegter und aufgeschriebener Begriff ist mehr wert als dieselbe Entscheidung, die beim nächsten Mal anders getroffen wird; references/glossaries/README.md erklärt, wie man aus einer solchen Liste eine Glossardatei erstellt.

Referenzmaterial

  • references/glossaries/README.md – welches Glossar zu lesen ist, welche Abschnitte davon und was zu tun ist, wenn das Video keines hat. Beginnen Sie hier.
  • references/glossaries/*.md – die Glossare selbst. Groß. Lesen Sie den Grundsatzabschnitt und die relevanten Abschnitte; greppen Sie nach einzelnen Begriffen.
  • references/pipeline.md – technische Hinweise und die spezifischen Fallstricke in dieser Pipeline. Lesen Sie es, bevor Sie etwas debuggen, das wie ein Zeit-, Spleiß- oder Rendering-Problem aussieht; die meisten wurden bereits einmal diagnostiziert.

Verwandte Skills