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.pyerzwingt 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.