Communitygithub.com

muyunxue/dance-mmd-subtitle-kit

Komplettlösung zur Erstellung von Untertiteln für MMD-Tanzvideos in diesem Arbeitsbereich (字幕/ Projekt) – Quelle analysieren, Segment auswählen, LRC-Cues zuordnen, Stil wählen, ASS erstellen, brennen, prüfen und ausliefern. Dieses Skill laden, wenn eine Untertitelaufgabe (statischer Entwurf/5s-Demo/30s-Demo/ganzes Video/transparente Überlagerung) gestartet oder fortgesetzt wird, wenn ein Rendering „erfolgreich“ war, aber das Video keinen Text enthält, oder wenn die Pfade, Schriftartenliste, Cue-Tabelle und Abnahmekriterien dieses Projekts benötigt werden.

Was ist dance-mmd-subtitle-kit?

Dieses Skill ist eine vollständige End-to-End-Pipeline für die Erstellung von Untertiteln für MMD-Tanzvideos. Es führt durch sieben Schritte: Quellmaterialanalyse mit ffprobe, Segmentauswahl, LRC-zu-ASS-Zeitachsenanpassung, Stilauswahl aus sechs vordefinierten Designs (S1–S6), ASS-Generierung mit Python, ffmpeg-Rendering und strenge Qualitätskontrolle durch Einzelbildprüfung. Es unterstützt verschiedene Aufgabentypen wie statische Einzelbilder, 5-Sekunden-, 30-Sekunden- und Vollvideoclips sowie transparente Überlagerungen. Das Skill ist speziell auf die Projektstruktur unter `D:\yingyong2\论项目\字幕\` zugeschnitten und enthält vorgefertigte Python-Skripte, eine Schriftartenliste und eine detaillierte Abnahmeprüfliste. Es ermöglicht die parallele Bearbeitung mehrerer Stile durch Unteragenten und stellt sicher, dass jeder Untertitel korrekt eingebrannt wird – eine häufige Fehlerquelle, bei der ein Rendering als erfolgreich gemeldet wird, der Text aber fehlt, wird durch automatische Frame-Extraktion behoben. Das Skill ist für Claude Code oder ähnliche KI-Agenten konzipiert, die in der Windows-Eingabeaufforderung arbeiten.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/muyunxue/dance-mmd-subtitle-kit/tree/HEAD/skills/mmd-subtitle-pipeline

In Ihrer bevorzugten KI fragen

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

Dokumentation

MMD-Tanzvideo-Untertitel: End-to-End-Workflow

0. Ein-Satz-Prinzip

Nach dem Schreiben/Rendern muss ein Einzelbild zur Überprüfung extrahiert werden: ffprobe-Dauer übereinstimmend ≠ Untertitel tatsächlich sichtbar. Fehler im ASS-Zeitstempel oder Style-Farbformat führen zu „Rendering erfolgreich, aber kein Text“. Dieses Projekt hat mehrfach die Erfahrung gemacht, dass etwas „korrigiert“ wurde, aber nicht eingebrannt wurde. Die Abnahme erfolgt daher immer anhand von extrahierten Einzelbildern.

1. Assets und Pfade (dieser Arbeitsbereich)

ElementPfad
UntertitelprojektD:\yingyong2\论项目\字幕\
LRC-Text字幕\[by维尔日记].txt – KISS OF LIFE《Who is she (Japanese Ver.)》, 36 Zeilen
Altes MMD-Video字幕\0001-4956 - 副本.mkv (2560×1080 / 30fps; Datei unvollständig, angegeben 165s, tatsächlich nur ~137s dekodierbar)
Neues MMD-VideoD:\mmd.mp4\0002-4956.mkv (2560×1080 / 30fps / 165.166s, vollständig)
Schriftarten字幕\build\fonts\ (Anton, ArchivoBlack, BebasNeue, Bungee, Monoton, PermanentMarker, RubikGlitch, Silkscreen, PirataOne, UnifrakturCook) + System Georgia / Microsoft YaHei
Generierungsskripte字幕\build\*.py
Videoausgabe字幕\输出\<Aufgabenname>\ (ein Ordner pro Aufgabe, Auslieferungsname mit lesbarem chinesischen Namen)
ffmpegC:\Users\35530\AppData\Local\Microsoft\WinGet\Packages\Gyan.FFmpeg_Microsoft.Winget.Source_8wekyb3d8bbwe\ffmpeg-9.0-full_build\bin\ffmpeg.exe
pythonC:\Users\35530\.dsh\dsh-runtimes\dsh-primary-runtime\dependencies\python\python.exe (PIL 12.3 / numpy 2.3, kein cv2)

2. Sieben-Schritte-Hauptablauf

① Quellmaterial analysieren   ffprobe Auflösung/Bildrate/Dauer/Farbraum; Dekodierungstest zur Erkennung abgeschnittener Dateien
② Segment auswählen           Liedabschnitt vs. Tanzbewegung; Demo 5s / 30s / gesamtes Video
③ Text zuordnen               LRC absolute Zeit → Segmentstart subtrahieren = ASS relative Zeit
④ Stil festlegen              Referenzen S1–S6 (siehe style-frames-compare); zuerst statische Einzelbilder, dann dynamisch
⑤ ASS schreiben               Python-Generierung; Format-Hard-Regeln aus ass-render-playbook befolgen
⑥ Rendern                     ffmpeg einbrennen (oder transparente Überlagerung); zuerst 5–10s zur Validierung, dann gesamter Abschnitt
⑦ Abnahme                     Einzelbild extrahieren (mindestens 1 Frame pro Textzeile) + Keyframe-Tabelle erstellen; Komposition prüfen, kein Chinesisch, Gesicht nicht verdecken, Ausblenden am Ende

① Quellmaterial analysieren

$ff='...\ffmpeg.exe'; $fp='...\ffprobe.exe'
& $fp -v error -select_streams v:0 -show_entries stream=width,height,r_frame_rate,nb_frames,pix_fmt,color_space -show_entries format=duration -of default=nw=1 $v
& $ff -v error -i $v -map 0:v:0 -c copy -f null NUL   # Meldung "File ended prematurely" = abgeschnitten
  • Alle Materialien in diesem Projekt sind 2560×1080 / 30fps / h264 yuv420p / bt709, ultrabreit 64:27.
  • 165s Video ≈ 4956 Frames; 30s Video = 900 Frames.

② Segment auswählen

  • LRC erster Refrain: 36.892 / 40.366 / 44.003 / 47.577 / 51.179 / 54.698 / 58.309 / 61.926, bis ~66s Ende.
  • 5s Vergleichs-Demo häufig 0:58.2–1:03.2; 30s-Demo häufig 0:36.5–1:06.5; gesamtes Video 0–154.6s (alte Datei nur bis 137s).
  • Zuschneiden: -ss 36.5 -t 30 -i src -vf "eq=brightness=-0.05:contrast=1.04:saturation=1.02" -c:v libx264 -crf 16 -pix_fmt yuv420p (Leichte Abdunklung für Kontrast bei weißen/cremefarbenen Buchstaben; vollständige Farbkorrektur siehe subject-color-grade)

③ Text zuordnen

LRC ist absolute Zeit; ASS verwendet relative Zeit zum Segmentstart. Beispiel: Segment beginnt bei 36.5s, dann 36.892 → 0.392s. Ein Cue pro Zeile; innerhalb der Zeile Aufteilung in mehrere Events pro Wort (siehe unten). Das End-Event sollte 0.14–0.4s vorher enden, um ein Überlappen der Zeilen zu vermeiden.

④ Stil festlegen

  • Zuerst style-frames-compare-Skill lesen, je nach gewünschter Stimmung S1–S6 auswählen, zuerst statische Einzelbilder zur Ansicht erstellen.
  • Wichtige Einschränkung: Wenn der Benutzer explizit „kein Chinesisch" sagt, nur den ursprünglichen englischen/japanischen Text des Liedes behalten; Person in der Mitte, große Buchstaben in der linken/rechten Sicherheitszone und den oberen/unteren Ecken.
  • Bereits vorhandene, wiederverwendbare Generatoren: styles_anim.py (S2/S4/S6 5s-Animation), flare_wide.py (Spektakel), neon_wide.py (Neon), avoid_side2.py (vollständige Vermeidung), kpop_styles.py (statischer Entwurf), art_frames.py (künstlerischer statischer Entwurf).

⑤ ASS schreiben

  • Mit Python generieren (stabiler als manuelles Schreiben): Ass-Klasse definieren + Hilfsfunktionen word()/rect(), am Ende write().
  • Harte Regeln, Vorlagen, Fallstricke siehe ass-render-playbook (Zeitformat H:MM:SS.cc, Style-Farbwerte ohne & am Ende, fontsdir relativer Pfad usw.).

⑥ Rendern

  • Arbeitsverzeichnis = Ausgabeverzeichnis; ASS mit ASCII-Dateiname; Schriftartenverzeichnis relativ:
cd "字幕\输出\S4S6_30s"
& $ff -v error -y -i _base_30s.mp4 -vf "ass=_s4.ass:fontsdir=fonts" `
  -c:v libx264 -preset medium -crf 16 -pix_fmt yuv420p -movflags +faststart S4_30s.mp4
  • Transparente Überlagerung (für Nachbearbeitung): -f lavfi -i "[email protected]:s=2560x1080:r=30,format=rgba" -vf "ass=x.ass:alpha=1" + VP9 yuva420p (Details siehe ass-render-playbook).

⑦ Abnahmeprüfliste

  • ffprobe-Dauer stimmt mit Design überein (5.000 / 30.000 / 154.6)
  • Einzelbild extrahiert: mindestens 1 Frame pro Textzeile, sicherstellen, dass der Text tatsächlich erscheint, Position korrekt, keine Zeichensalat
  • Benutzer wünscht kein Chinesisch → 2–3 Frames extrahieren, um nur Englisch/Japanisch zu bestätigen
  • Gesicht/Körper der Person nicht verdeckt (besonders bei Nahaufnahmen prüfen)
  • Letzte Zeile vor Ende ausblenden (z. B. vor 29.86s), keine Restbuchstaben
  • 关键帧.jpg erstellen (2×2 oder 2×3, jede Zelle 1280×540, mit Beschriftung) für Benutzeransicht
  • Dateiname lesbar + Erklärungs-MD zusammen ausliefern

3. Aufgabentyp → Auslieferungsgegenstand

AufgabeAuslieferung
Statisches EinzelbildkonzeptN 2560×1080 jpg + 总览.jpg + Erklärungs-MD
5s-Demo1–3 5s mp4 + Vergleichsvideo + Keyframe-Tabelle
30s-Demo1–2 30s mp4 (900 Frames) + Vergleichsversion + Keyframe-Tabelle + Erklärungs-MD
Paarweise Auslieferung (häufig)Pro Stil 2 Videos: X_mitHintergrund_30s.mp4 (H.264 eingebrannt) + X_nurUntertitel_transparent_30s.webm (VP9 alpha); N Stile × 2 Videos, plus nurUntertitel_transparent_Vorschau.jpg (Schachbrett-Kompositionsvorschau)
Gesamtes VideoUntertitel ASS + eingebranntes mp4 / transparentes webm + Erklärung
FarbkorrekturFarbkorrigiertes mp4 + Vergleichsframes + Parametererklärung / LUT

Transparente Version rendern (gleiches ASS wie Version mit Hintergrund, Frame-für-Frame identisch):

& $ff -v error -y -f lavfi -i "[email protected]:s=2560x1080:r=30,format=rgba" `
  -vf "ass=_s4.ass:alpha=1:fontsdir=fonts" -t 30 -c:v libvpx-vp9 -pix_fmt yuva420p `
  -b:v 0 -crf 30 -row-mt 1 -auto-alt-ref 0 -metadata:s:v:0 alpha_mode=1 OUT.webm

Alpha prüfen: ffmpeg -c:v libvpx-vp9 -ss 12.4 -i OUT.webm -frames:v 1 -pix_fmt rgba f.png, PIL prüft alpha min=0 / max=255, Abdeckung>0; Frame-Extraktion muss explizit -c:v libvpx-vp9 verwenden, sonst geht Alpha verloren und wird zu 255.

4. Parallelverarbeitung (Unteragenten-Vereinbarung)

Standardvorgehen, wenn der Benutzer „Unteragenten separat erledigen lassen" sagt:

  1. Hauptagent bereitet gemeinsames Basisvideo (zugeschnitten, einheitlich abgedunkelt) und fonts/-Kopie, Cue-Tabelle (relative Zeit) vor;
  2. Jeder Stil ein Unteragent, mit festen Vorgaben im Prompt: Eingabepfad, Ausgabedateiname (S4_30s.mp4 usw.), ASS-Hard-Regeln, Zeitachsentabelle, Abnahmeanforderungen;
  3. Jeder Unteragent schreibt nur seine eigene Präfix-Datei, überschreibt keine anderen;
  4. Hauptagent sammelt alles ein, erstellt Vergleichsvideo/Keyframe-Tabelle/Erklärung und führt die einheitliche Abnahme-Frame-Extraktion durch. Erfahrungswert: Ein einzelner 30s-Stil (2560×1080, 8 Zeilen, ca. 40–60 Dialoge) dauert vom Design bis zum fertigen Video etwa 10–20 Minuten; zwei parallele Unteragenten ≈ Zeit des langsamsten.

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

muyunxue/dance-mmd-subtitle-kit

Hard rules, templates, ffmpeg commands and failure diagnosis for authoring ASS/SSA subtitles and burning them with libass on this machine. Load this before writing any ASS file, when a burn "succeeds" but no text appears, when text is misplaced/too big, when \p1 drawings are offset, or when you need the transparent-overlay export recipe. Contains the exact pitfalls hit in this project (timestamp format, style colour trailing ampersand, fontsdir, drawing anchor, chained \t, Permanent Marker sizing).

muyunxue/dance-mmd-subtitle-kit

Character-avoiding subtitle layout for the MMD dance videos — measure the dancer's per-frame bounding box, compute a per-cue union, place text in safe side/top columns, and verify zero overlap on every frame. Load this when asked 字幕不要挡住人物/完全不挡/避让, or when text overlaps wings/body and you need a verified-free layout with measured overlap counts.

muyunxue/dance-mmd-subtitle-kit

Design and deliver subtitle style mockups and animated comparison samples for the MMD/K-pop dance videos — S1–S6 style catalogue (Y2K chrome, minimal kinetic, glitch, mix&match editorial, graphic emphasis, hand-marker), PIL/numpy effect recipes, font list, contact-sheet/comparison video conventions, and the parallel-subagent workflow used for S4 vs S6. Load this when asked 出几个静态帧方案/参考女团PV字幕/做个小样/对比几个风格, or when choosing a visual direction before building a full-length subtitle track.

muyunxue/dance-mmd-subtitle-kit

Subject-aware colour grading for the MMD dance videos in this workspace — make the dancer stand out (background dim/cool/desat, subject lift/warm/sharpen/bloom) using either a soft stage-light ellipse or a hard character matte, with ffmpeg recipes, measured parameter sets and known failure modes (cast-shadow matte contamination, banding, truncated sources). Load this when asked to 调色/突出人物/压背景/统一色调, or when a graded clip shows weird bright blobs around the dancer.

Verwandte Skills