Communitygithub.com

muyunxue/dance-mmd-subtitle-kit

Receita completa para fazer legendas de vídeos de dança MMD neste workspace (projeto 字幕/) — sondar a fonte, escolher um segmento, mapear pistas LRC, escolher um estilo, construir ASS, renderizar, verificar e entregar. Carregue esta skill ao iniciar ou retomar qualquer tarefa de legenda (rascunho estático/amostra 5s/amostra 30s/peça completa/camada transparente), quando uma renderização "foi bem-sucedida" mas o vídeo não tem texto, ou quando você precisar dos caminhos do projeto, lista de fontes, ficha de pistas e critérios de aceitação.

O que é dance-mmd-subtitle-kit?

Esta skill é um fluxo de trabalho completo e end-to-end para criar legendas em vídeos de dança MMD, projetado especificamente para o workspace de legendas (字幕/) dentro do ambiente de desenvolvimento Claude Code. Ela fornece um pipeline estruturado em sete etapas: sondagem do material de origem, seleção de segmentos, mapeamento de letras LRC para linhas de tempo ASS, definição de estilo visual, geração de arquivos de legendas ASS, renderização do vídeo e verificação rigorosa com extração de quadros-chave. A skill é essencial porque evita o erro comum de "renderização bem-sucedida, mas sem legenda" — um problema recorrente no projeto — ao impor uma verificação visual obrigatória em cada etapa. Ela suporta múltiplos tipos de tarefas, desde rascunhos estáticos e amostras de 5s/30s até a peça completa do vídeo e camadas de legenda transparentes para pós-produção. A skill também gerencia caminhos de arquivos, fontes, regras rígidas de formatação ASS e um modo de execução paralela com subagentes para otimizar o tempo de renderização de múltiplos estilos.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Legendas de Vídeo de Dança MMD: Fluxo End-to-End

0. Princípio de uma Frase

Após escrever/renderizar, é obrigatório extrair um quadro e verificar: ffprobe duração correta ≠ legenda realmente apareceu; erro no timestamp ASS ou no formato de cor do Style pode levar a "renderização bem-sucedida, mas sem texto". Este projeto já teve várias lições de "pensei que estava corrigido, mas na verdade não foi embutido"; a aceitação sempre se baseia na extração de quadros.

1. Ativos e Caminhos (neste workspace)

ItemCaminho
Projeto de legendaD:\yingyong2\论项目\字幕\
Letra LRC字幕\[by维尔日记].txt — KISS OF LIFE《Who is she (Japanese Ver.)》,36 frases
Vídeo MMD antigo字幕\0001-4956 - 副本.mkv (2560×1080 / 30fps; arquivo incompleto, nominal 165s mas só decodifica ~137s)
Vídeo MMD novoD:\mmd.mp4\0002-4956.mkv (2560×1080 / 30fps / 165.166s, completo)
Fontes字幕\build\fonts\ (Anton, ArchivoBlack, BebasNeue, Bungee, Monoton, PermanentMarker, RubikGlitch, Silkscreen, PirataOne, UnifrakturCook) + sistema Georgia / Microsoft YaHei
Scripts de geração字幕\build\*.py
Saída de vídeos finais字幕\输出\<nome-da-tarefa>\ (uma pasta por tarefa, nome de entrega com nome legível em chinês)
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, sem cv2)

2. Fluxo Principal em Sete Etapas

① Sondar material     ffprobe resolução/fps/duração/cor; teste de decodificação para verificar se o arquivo é truncado
② Selecionar segmento      trecho da música vs movimento de dança; amostra 5s / 30s / peça completa
③ Mapear letras     Tempo absoluto LRC → subtrair início do segmento = tempo relativo ASS
④ Definir estilo      Referência S1–S6 (ver style-frames-compare); primeiro saída de quadros estáticos, depois dinâmicos
⑤ Escrever ASS     Gerado com Python; obedecer regras rígidas de formato do ass-render-playbook
⑥ Renderizar       ffmpeg embutir (ou camada transparente); primeiro saída de verificação 5–10s, depois segmento completo
⑦ Verificar       Extrair quadros (pelo menos 1 quadro por frase) + montar tabela de quadros-chave; verificar composição, sem chinês, sem obstrução facial, fade out final

① Sondar Material

$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   # "File ended prematurely" = truncado
  • Os materiais deste projeto são todos 2560×1080 / 30fps / h264 yuv420p / bt709, ultra-wide 64:27.
  • Vídeo de 165s ≈ 4956 quadros; vídeo de 30s = 900 quadros.

② Selecionar Segmento

  • Primeira parte do refrão LRC: 36.892 / 40.366 / 44.003 / 47.577 / 51.179 / 54.698 / 58.309 / 61.926, terminando ~66s.
  • Amostra de 5s comum: 0:58.2–1:03.2; amostra de 30s comum: 0:36.5–1:06.5; peça completa: 0–154.6s (arquivo antigo só vai até 137s).
  • Recorte: -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 (escurecimento leve para dar contraste a letras brancas/creme; correção de cor completa está em subject-color-grade)

③ Mapear Letras

LRC é tempo absoluto; ASS usa tempo relativo ao início do segmento. Exemplo: segmento começa em 36.5s, então 36.892 → 0.392s. Uma pista por frase; dentro da frase, dividir em múltiplos eventos por palavra (ver abaixo). Os eventos finais devem terminar 0.14–0.4s antes, para evitar sobreposição entre frases.

④ Definir Estilo

  • Primeiro, ler a skill style-frames-compare, escolher S1–S6 de acordo com o estilo desejado, gerar quadros estáticos para mostrar ao usuário.
  • Restrição importante: quando o usuário disser "sem chinês", manter apenas o inglês/japonês da letra original; pessoa no centro, letras grandes nas laterais e nos cantos superior/inferior.
  • Geradores reutilizáveis disponíveis: styles_anim.py (animação 5s S2/S4/S6), flare_wide.py (explosão), neon_wide.py (néon), avoid_side2.py (desvio completo), kpop_styles.py (rascunho estático), art_frames.py (rascunho estático de arte).

⑤ Escrever ASS

  • Usar Python para gerar (mais estável que manual): definir classe Ass + auxiliares word()/rect(), depois write().
  • Regras rígidas, modelos e armadilhas em ass-render-playbook (formato de tempo H:MM:SS.cc, valor de cor Style sem & final, fontsdir caminho relativo, etc.).

⑥ Renderizar

  • Diretório de trabalho = diretório de saída; ASS usar nome de arquivo ASCII; diretório de fontes relativo:
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
  • Camada transparente (para pós-produção): -f lavfi -i "[email protected]:s=2560x1080:r=30,format=rgba" -vf "ass=x.ass:alpha=1" + VP9 yuva420p (detalhes em ass-render-playbook).

⑦ Lista de Verificação

  • ffprobe duração corresponde ao design (5.000 / 30.000 / 154.6)
  • Extrair quadros: pelo menos 1 quadro por frase, confirmar que o texto realmente aparece, posição correta, sem caracteres ilegíveis
  • Usuário pediu sem chinês → extrair 2–3 quadros para confirmar apenas inglês/japonês
  • Rosto/corpo da pessoa não obstruído (especialmente em close-up ou zoom)
  • Última frase desaparece antes do final (ex: antes de 29.86s), sem texto residual
  • Montar quadro-chave.jpg (2×2 ou 2×3, cada célula 1280×540, com etiquetas) para facilitar visualização
  • Nome de arquivo legível + arquivo md de explicação entregues juntos

3. Tipos de Tarefa → Entregáveis

TarefaEntrega
Proposta de quadro estáticoN imagens 2560×1080 jpg + visao-geral.jpg + md de explicação
Amostra 5s1–3 vídeos 5s mp4 + vídeo de comparação + tabela de quadros-chave
Amostra 30s1–2 vídeos 30s mp4 (900 quadros) + versão de comparação + tabela de quadros-chave + md de explicação
Entrega em par (comum)Para cada estilo, 2 vídeos: X_com_fundo_30s.mp4 (H.264 embutido) + X_legenda_pura_transparente_30s.webm (VP9 alpha); N estilos × 2 vídeos, acompanhado de preview_transparente.jpg (preview de composição xadrez)
Peça completaLegenda ASS + mp4 embutido / webm transparente + explicação
Correção de cormp4 corrigido + quadros de comparação + parâmetros / LUT

Renderização transparente (mesmo ASS da versão com fundo, quadro a quadro consistente):

& $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

Verificar alpha: ffmpeg -c:v libvpx-vp9 -ss 12.4 -i OUT.webm -frames:v 1 -pix_fmt rgba f.png, PIL verificar alpha min=0 / max=255, cobertura>0; extração de quadros deve usar explicitamente -c:v libvpx-vp9, caso contrário perde alpha e fica tudo 255.

4. Paralelização (Acordo de Subagentes)

Fluxo padrão quando o usuário disser "subagentes separados":

  1. Agente principal prepara base compartilhada (recortada, escurecida uniformemente) e cópia de fonts/, ficha de pistas (tabela de tempos relativos);
  2. Cada estilo um subagente, prompt fixo: caminho de entrada, nome de arquivo de saída (S4_30s.mp4 etc.), regras rígidas ASS, tabela de linha do tempo, requisitos de verificação;
  3. Subagentes cada um escreve apenas seu próprio arquivo de prefixo, sem sobreposição;
  4. Agente principal coleta tudo, faz vídeo de comparação/tabela de quadros-chave/explicação e verifica extração de quadros. Prática: um estilo de 30s (2560×1080, 8 frases, cerca de 40–60 diálogos) leva de 10–20 minutos do design ao vídeo final; dois subagentes paralelos ≈ tempo do mais lento.

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.

Habilidades Relacionadas