Communitygithub.com

CatsMansion/mv-jp-lyrics-subtitle

Legendas de letras de música em japonês para vídeos musicais, com quebra de linhas em limites de bunsetsu, sincronização precisa dos tempos de entrada de cada frase (medidos por áudio, não estimados), escrita kanji-kana-majiri e verificação de cobertura tipográfica.

O que é mv-jp-lyrics-subtitle?

Esta skill resolve os quatro problemas mais comuns em legendas de letras de música japonesa para MV: divisão temporal uniforme (ignorando a duração real das sílabas), quebra de linhas no meio de palavras (separando partículas de seus núcleos), uso de hiragana completo (que soa infantil para leitores japoneses) e sincronização imprecisa dos tempos de entrada (que antecipa ou atrasa a aparição das frases). Ela oferece um conjunto de regras rígidas baseadas em bunsetsu (unidades de respiração da fala), um algoritmo de extração de tempos reais de início das sílabas usando pyin + energy gating com correção para falsos positivos no final de frases, e um verificador de cobertura que garante que cada caractere da linha também aparece na tipografia de fundo. A skill suporta plataformas como Claude Code, Cursor e Codex, e é indicada para tarefas que envolvam letras de música japonesa na tela, karaokê, legendas com timing de frase, subtitling, tipografia de letras, ou quando o espectador japonês achar que 'as legendas estão erradas'. Ela inclui dois scripts principais: um extrator de tempos de início medidos (com a correção de falso positivo no final da frase) e um verificador de cobertura, garantindo que as legendas sejam culturalmente e tecnicamente precisas para o público japonês.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add CatsMansion/mv-jp-lyrics-subtitle

Perguntar na sua IA favorita

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

Documentação

Legendas de Letras de Música Japonesa: Segmentação, Sincronização, Notação e Tipografia

0. O que esta skill resolve

Os quatro erros mais comuns em legendas de letras de música japonesa, todos com a aparência de "ok, mas um japonês nota imediatamente":

  1. Divisão uniforme do tempo — uma frase de 5,7 segundos com 16 sílabas, 0,36 segundos por sílaba. Na realidade, a duração cantada varia em até 3 vezes.
  2. Quebra no meio de uma palavra — 君 / を見るたび. Partículas não podem iniciar uma linha.
  3. Hiragana completo — letras escritas exclusivamente em hiragana para TTS/modelos generativos, que para leitores japoneses parecem livros infantis.
  4. Tempo de entrada ancorado em "pontos de mudança de altura" — confunde a nota de final de frase com o início da próxima, adiantando a frase inteira em meio segundo.

1. Oito Regras Rígidas

#RegraContraexemplo
R1Ponto de quebra apenas em limites de bunsetsu. Substantivo + partícula, verbo + auxiliar não podem ser separados✗ 君/を見るたび ✗ 見/てるのに
R2Tempo de entrada de cada segmento = início real cantado da primeira sílaba do segmento. ⛔ Proibido dividir uniformemente✗ (end-start)/n × k
R3Máximo de 3 segmentos de saída por frase, preferencialmente 2✗ 君を/見る/たび
R4Sem pontuação; espaços entre segmentos com espaço de largura total  ✗ 君を、見るたび
R5Regras de quebra de linha (JIS X 4051): kana pequeno ゃゅょっ, vogal longa ー, sokuon, colchetes de fechamento não podem iniciar linha✗ Linha começando com っ
R6Máximo de 16 caracteres por linha (padrão Netflix para legendas japonesas)—
R7O texto não desaparece após a saída (acumulação), senão o espectador perde contexto✗ Apagar o primeiro segmento ao mostrar o segundo
R8A tipografia de fundo grande deve conter todos os caracteres da frase, verificação caractere por caractere missing deve estar vazio✗ Fundo apenas com a segunda metade da frase

Por que R1 é bunsetsu e não "palavra": O japonês não tem espaços; a quebra automática de linha ocorre apenas no limite da caixa. O leitor respira por bunsetsu — 君を/見るたび são duas respirações. Método de verificação: leia o segmento em voz alta; se parecer uma única inspiração, está correto.


2. Tempo de Entrada Medido (Essencial, Não Estime)

2.1 Pré-requisito

É necessária a faixa de voz separada (Demucs / htdemucs vocals.wav). A faixa mixada contém bateria e baixo, cujos picos de energia são golpes de bateria.

python scripts/measure_lyric_onsets.py --vocal vocals.wav --lines lines.json --out timing.json

lines.json tem a seguinte aparência (kana para contagem de sílabas para determinar posição esperada, disp é a notação de tela):

[{"id": 9, "start": 42.26, "end": 48.00,
  "kana": ["きみを", "みるたび", "しんぞうがとまるの"],
  "disp": ["君を", "見るたび", "心臓が止まるの"]}]

2.2 Algoritmo (Três Etapas; Faltar Uma Etapa Causa Erro)

  1. Extrair F0: librosa.pyin(fmin=150, fmax=900, hop_length=128), em seguida aplicar filtro de mediana em F0 para remover vibrato.
  2. Extrair limites candidatos: Saltos de altura ≥0,8 semitons ∪ librosa.onset.onset_detect(delta=0.30, wait=3).
  3. ⛔ Filtro de limite (etapa mais crítica): O ponto candidato deve satisfazer SIMULTANEAMENTE:
    • Energia nos 40ms seguintes não inferior a 55% da energia dos 40ms anteriores (não é uma queda abrupta)
    • Proporção de quadros com F0 não NaN nos 180ms seguintes ≥60% (ainda há alguém cantando)

Em seguida: para cada bunsetsu, calcula a posição relativa esperada como "sílabas acumuladas / total de sílabas" e a ancora no limite válido mais próximo.

2.3 Por que a Etapa 3 Não Pode Ser Omitida (Exemplo Prático)

Para "君を見るたび 心臓が止まるの", o び termina com uma entonação descendente em 44,87s (F2# → final), silêncio de 0,33s antes de しんぞう começar em 45,24s.

  • Apenas etapa 2 → limite capturado em 44,81 (entonação descendente de び), adiantando "心臓が止まるの" em 0,43s.
  • Apenas etapa 3, primeira condição (relação de energia 40ms) → ainda errado. A energia em 44,81 ainda não caiu; a janela de 40ms é muito curta.
  • Adicionando "ainda há voz nos 180ms seguintes" → 45,17s, diferença de 0,07s em relação à verificação manual. ✅

⇒ "Ainda há alguém cantando depois" é mais eficaz para distinguir troca de palavra de final de frase do que "a energia neste momento é alta".

2.4 Quando Esta Regra Também Falha

  • Frases em inglês: sem plataforma de altura, pyin não detecta limites silábicos. Apenas divisão proporcional ao tempo, com anotação clara "estimado".
  • Melismas (uma sílaba para várias notas): número de plataformas de altura > número de sílabas; a ancoragem será tendenciosa. Requer audição manual.
  • Frases com erro de ancoragem >0,45s: marcar todas como UNSURE e passar para revisão manual, não tratar como precisas.

2.5 ⛔⛔ Primeiro Valide a "Janela de Tempo" de Cada Frase, Depois Fale de Segmentação Interna

Esta é uma armadilha mais upstream do que §2.3 e a mais facilmente ignorada.

A maioria dos arquivos de linha do tempo de letras (lyrics.ts / SRT / LRC) tem start/end cortados linearmente por número de linhas ou estimados manualmente, não ouvidos frase por frase. Ao usar esses arquivos para legendas, a segmentação interna pode ser precisa, mas a frase inteira está deslocada.

Sintoma: A legenda está 1–4 segundos adiantada ou atrasada em relação à voz e deriva cada vez mais conforme avança (porque é uma extensão linear). O usuário não percebe no refrão (a janela do refrão geralmente está correta), mas percebe a falta de sincronia nos primeiros versos.

Correção: Reancorar cada frase usando intervalos de respiração.

Na faixa de voz separada, há silêncio entre as frases. Este é o limite mais forte, sem necessidade de modelo:

rms = librosa.feature.rms(y=vocal, frame_length=1024, hop_length=128)[0]
e = rms / rms.max()
quiet = e < 0.055                      # Limiar relativo, suficiente na prática
# Sequência contínua de quiet >= 0.16s registrada como intervalo de respiração

Em seguida: O segmento sonoro entre dois intervalos adjacentes é uma frase musical.

Exemplo prático (mesma música):

Intervalo 0,00-12,12 (introdução sem canto)
Som 12,12-13,73  ← ドアのとこで
Intervalo 13,73-14,67
Som 14,67-16,59  ← 立ち止まってる
Intervalo 16,59-17,07
Som 17,07-17,98  ← 本当は

Enquanto a tabela de letras escreve "Frase 1 12,00–15,75" "Frase 3 a partir de 19,50" — a Frase 3 realmente começa em 23,63s, 4,1s adiantada.

⭐ Critério: Compare o número de segmentos sonoros detectados com o número de bunsetsu nesta seção da letra.

  • Quantidade igual ⇒ este cantor respira em cada bunsetsu, correspondência 1:1, precisão de milissegundos, sem adivinhação.
  • Quantidade menor ⇒ há melisma, use o método de altura de §2.2 para encontrar limites internos da frase.
  • Quantidade maior ⇒ limite muito frouxo, aumente 0.055 ou estenda 0.16.

⛔ Não use "contagem de picos de energia" para substituir a detecção de respiração: um vibrato em uma nota longa pode produzir vários picos. Na prática, uma frase de 16 sílabas foi contada como 33 picos de energia, completamente inútil.

⛔ Também não use "normalização por mediana móvel + limiar raso" para encontrar respirações fracas: em versos podem aparecer 23 intervalos falsos (valor real 19), indistinguíveis de ruído. Melhor ancorar apenas as frases com silêncio duro e marcar claramente as restantes como "remapeado/estimado".


3. Notação: Kanji-Kana-Majiri

Tabelas de letras (especialmente letras geradas por IA) são frequentemente escritas em hiragana completo. Na tela, devem ser convertidas para notação kanji comum.

Hiragana completo (rascunho da letra)Notação de tela
きみをみるたび君を見るたび
ほんとは / きみのほう本当は / 君のほう
なかに中に
においだけで匂いだけで
いちばんとおい一番遠い
こわれちゃいそう / ちかづくと壊れちゃいそう / 近づくと
たちどまってる立ち止まってる
わたしのあかし私の証

⛔ Não exagerar na kanjização: すきだよって não deve ser escrito como 好きだよって… na verdade, deve ser escrito (好き). Mas advérbios/partículas finais coloquiais como なっちゃう, ずるいよね, なんてかな mantêm-se em hiragana — kanjizar tudo fica artificial. Critério: Esta palavra geralmente é escrita em kanji em romances/letras de música japonesas? Em caso de dúvida, mantenha em hiragana.


4. Parâmetros de Tipografia (Com Fontes, Não Invente)

Os valores abaixo vêm da engenharia reversa quantitativa de quatro MV comerciais de anime (1280×720 base convertida para 1080p):

ItemValor em 1080p
Altura da letra principal97~108px
Letra pequena de narração53px
Frase de destaque no refrão124px
Letra de fundo gigante270~670px
Linha de base inferiory ≈ 950~1004
Largura máxima por linha≤1747px (≤91% da largura do quadro)

⭐ Descoberta mais importante: MV comerciais geralmente têm letras principais "sem fundo", texto branco + contorno escuro de 2~3px. Apenas em frases de destaque usam faixa branca de largura total + texto preto. Adicionar um fundo arredondado a cada frase é a principal fonte de amadorismo.

Não mude o esquema de cores no meio da música: um vídeo tem apenas um matiz principal; o refrão apenas aumenta a saturação, não muda o matiz.

4.1 Múltiplas Colunas Verticais = Segmentação Visualizada

Na horizontal, use espaço de largura total como separador; visualmente, parece "sem segmentação". Na vertical, organize cada bunsetsu em uma coluna, da direita para a esquerda; a segmentação torna-se a própria tipografia:

君を | 見るたび | 息が止まるの
Coluna direita    Coluna central    Coluna esquerda

As posições das colunas são fixas pelo número do bunsetsu (o k-ésimo segmento está sempre na k-ésima coluna); quando um novo segmento aparece, as colunas existentes não se movem — caso contrário, todo o bloco de texto saltaria horizontalmente a cada saída.

4.2 Limite Físico da Escrita Vertical (Calcule Antes de Definir o Tamanho)

Uma linha de n caracteres, espaçamento de linha 1,46: altura necessária = n × tamanho da fonte × 1,46. Altura disponível 940px em 1080p ⇒ tamanho máximo da fonte = 940 / (n × 1,46).

  • 8 caracteres (心臓が止まるの) → 79px, abaixo do mínimo de 97px
  • 6 caracteres → 107px ✅

⇒ Frases longas com mais de 7 caracteres não cabem no intervalo de tamanho da fonte principal na vertical; devem ser alteradas para horizontal em duas linhas. Calcule primeiro, não espere até o final da composição.


5. Autoverificação (Imprimir Sempre; Não Fazer Resulta em Erro de Entrega)

python scripts/check_lyric_coverage.py --timing timing.json --disp disp.json

A saída deve satisfazer SIMULTANEAMENTE:

COVER line='君を見るたび' missing=[] OK=True
ORDER sub_a='君を' sub_b='見るたび' concat_equals_full=True

Se missing não estiver vazio ⇒ esta versão não pode ser entregue. ORDER verifica se a concatenação é igual à frase completa (evita caracteres faltantes/duplicados).


6. Uma Coisa a Fazer Antes de Começar

Primeiro, faça um grep nas especificações de legenda nos documentos do projeto. Os tamanhos de fonte, paletas de cores, presença ou ausência de fundo já decididos para este projeto geralmente estão em 02_文档/ ou docs/ em algum arquivo de análise/decisão:

grep -rn -E "字幕|字体|排版|几何|字高|描边|底板" docs/ 02_文档/ | head -40

⛔ Não decida por conta própria "acho que fica melhor assim" — isso certamente entrará em conflito com as especificações já decididas, e o custo de retrabalho é a re-renderização de todo o vídeo. A seção 4 desta skill foi forçada por esta lição.


7. Registro de Medição Prática (Para Calibrar Expectativas)

Uma música japonesa a 163,994 BPM, primeira frase do refrão:

Sílabaきみをみるたび
Início (s)42,3142,7643,0943,4143,6143,9844,18
AlturaB3E4F#4G#4F#4F4F#4

7 sílabas ↔ 7 plataformas de altura correspondentes ⇒ este refrão é uma nota por sílaba. Em uma música com muitos melismas, o número de plataformas será menor que o número de sílabas; a ancoragem deve ser marcada como UNSURE.


8. ⛔ BPM Não é uma Grade (Deriva Medida na Prática)

O campo bpm de uma música só pode ser usado como etiqueta, não para calcular pontos de corte. Na prática: uma faixa de 128,28 → 132,39 BPM (468ms → 453ms por batida), uma grade fixa no compasso 30 já está uma batida inteira atrasada.

  • Use beats[] (já ancorados a onsets) + bars[].start para obter tempo real
  • beats para pontos de impacto (corte de cena, flash, texto); beats_smooth para movimento contínuo (velocidade da câmera, loop)
  • ⛔ Nunca escreva t0 + n * 60 / bpm
  • Número do compasso ≠ índice do array: quando há um pickup, bars[].index difere da posição; procure pelo índice

9. ⛔ Timestamps de Palavras do ASR São Prematuros, Não Podem Ser Usados como Tempo de Entrada

Erro medido na prática: 0,04–2,0 segundos, mediana 0,62 segundos; pior após notas longas. ⇒ Use ASR apenas para obter início aproximado de cada frase (±1s); para entrada precisa, use alinhamento forçado (MMS CTC / torchaudio). Critério: erro de início de frase ≤0,15s para ser considerado preciso.

10. ⛔ Lista de Alucinações do Whisper (Apagar se Aparecer)

Em silêncio, respiração, vocalizações, pode gerar:

  • 「ご視聴ありがとうございました」(já cobriu 0,6–103 segundos)
  • 「チャンネル登録…」
  • 「作詞・作曲・編曲 初音ミク」
  • Palavras curtas repetidas, ラララ…

⇒ Regra: Use a letra oficial como referência; apenas na ausência de letra oficial use a transcrição, e compare frase por frase com o texto oficial (diferenças não detectam "frase inteira faltando"). ⇒ VAD deve estar desligado (Silero confunde vogais cantadas); a faixa de voz separada > qualquer aprimoramento DSP.

11. Marcação LRC (Mini-linguagem de Animação de Letras)

MarcaçãoFunção
FraseA/FraseBForça quebra de linha; as duas metades tornam-se beats diferentes
*palavra*Destaque: maior + componente de impacto + cor de destaque
! no final da linhaLinha de destaque (tratamento mais forte, pode incluir flash/tremedeira) — 1–2 linhas por seção do refrão
[間奏]Linha instrumental: impede que a linha anterior ocupe espaço sem desaparecer

⛔ Não Repetir Compensação de Antecedência: Os motores de legenda geralmente já têm embutido "0,2s antes da voz"; se seu eixo de tempo já subtraiu 0,2s, adicionar novamente resultará em 0,4s de antecedência.

12. Compasso de Parada no Final do Refrão

Os compassos no final do refrão onde a banda sai e fica quase a cappella são o lugar mais importante de todo o vídeo para colocar a imagem principal, não o momento de sair. Não trate como "aqui não tem bateria, então coloque qualquer coisa".


13. ⭐ Comparação Prática de Cinco Ferramentas de Alinhamento Forçado para Letras Japonesas

Fonte: benchmark de terceiros (20 segmentos, incluindo chinês/inglês/japonês); a tabela abaixo mostra a coluna japonês.

FerramentaErro de início (mediana)Erro de fim (mediana)CoberturaVeredito
MMS_FA (torchaudio)0,08 s0,11 s8/8✅ Única que atende
whisper-timestamped—0,16 s8/8⚠️ Segunda opção
WhisperX—1,67 s (p90 2,81)8/8❌ Cobre tudo, mas bordas instáveis
NeMo NFA——0/8❌ Sem pré-treinamento CTC em japonês
aeneas2,70 s3,66 s8/8❌ Falhou

⛔ aeneas não é adequado para canto: Sua própria documentação afirma "Áudio é assumido como fala: não adequado para legendas de música". Na prática, erro de 2,7–3,7s em japonês, pior do que divisão uniforme.

⇒ Para erro ≤0,15s, apenas MMS_FA. Os demais não atendem.

⚠️⚠️ Mas a licença do MMS_FA é CC-BY-NC (não comercial). Se formos comercializar no Steam, precisamos de outro acordo de licenciamento, ou usar apenas para alinhamento interno, sem distribuir pesos de modelo com o produto. Esta questão deve ser verificada antes da comercialização.

⚠️ MMS_FA depende de uroman para romanização de línguas não latinas; em texto misto kanji-kana, o p90 pode chegar a 2,53s ⇒ deve ser verificado frase por frase.

14. Os Dois Valores de Antecedência Não São a Mesma Coisa

ValorPropósitoFonte
0,15–0,25 sPara que o espectador possa ler (antecedência de leitura)Padrão do motor de legenda "texto 0,2s antes da voz"
0,03–0,05 sPara que o espectador possa acompanhar o canto (sensação de alinhamento de karaokê)Prática de outro vídeo de letras

⇒ A escolha depende se este vídeo é "para ler" ou "para cantar junto". Fazemos "para ler" ⇒ use 0,15–0,2s. ⛔ Não somar ambos.


15. Regras Práticas de Composição Vertical (Não é "Apenas Colocar o Texto na Vertical")

RegraPrática
PontuaçãoOcupa uma célula, escrita no canto superior direito da célula (horizontal é canto inferior esquerdo)
Kana pequeno (っ ゃ ゅ ょ)Ocupa uma célula, escrito no canto superior direito dentro da célula
Yōon (きゃ)Considerado dois kanas, cada um ocupa uma célula
Sinal de vogal longa 「ー」Ocupa uma célula
Início de parágrafoRecuo de uma célula
⛔ Regra de quebraPontuação não pode aparecer no início de uma linha
Pontuação no final da linhaSe a pontuação no final da frase cair no final da linha sem célula, escreva fora da célula ou na mesma célula do último caractere
NúmerosNa vertical, use numerais kanji; na horizontal, use algarismos arábicos (1–2 por célula)

⇒ Nossa composição vertical atual é "cada caractere empilhado em uma linha" sem tratar a posição da pontuação, o deslocamento do kana pequeno, o recuo do início do parágrafo. Adicionar esses três itens fará com que um leitor japonês pense imediatamente "está correto".


16. Critério de Velocidade de Leitura: 4 cps é Padrão de Legendas de Transmissão, Não de Letras (Inclui Medição Deste Projeto)

⚠️ Distribuição de confiabilidade: Nível B (Diretrizes de estilo JA do AVTpro (certificação de legendas japonesas), especificações públicas de duas empresas de legendas, três fontes com consistência cruzada); "Como usar a letra" é minha inferência, Nível D — já anotado claramente, não usar como evidência.

16.1 Números Duros de Três Fontes (Parte Mutuamente Consistente)

ItemAVTpro JA (Padrão de certificação)GoLocaliseDMPJAdotado
Velocidade máxima de leitura4,0 cps12 caracteres/s (≈limite superior diferente)~4 caracteres/s4,0–5,0 cps
Caracteres por linha (horizontal)15 caracteres16 caracteres13–16 caracteres≤15
Caracteres por linha (vertical)11 caracteres——≤11
Número de linhas na tela2222
Exibição mínima20 quadros (0,8s @25fps)1s1,5s≥0,8s
Exibição máxima6s (letras podem ser 7s)7s—6s (letras 7s)
Tratamento de pontuação。→ espaço de largura total; 、→ espaço de meia largura——Igual AVTpro
Fonteゴシック—Gothic prioritário (legibilidade)ゴシック

⭐ Duas confirmações de nossas decisões existentes:

  1. "⛔ Sem pontuação" está correto — a prática oficial do AVTpro é substituir pontuação por espaços (。→largura total, 、→meia largura). Nós simplesmente omitimos a pontuação, efeito equivalente e mais limpo ⇒ R7 não precisa ser alterada.
  2. "ゴシック体" está correto — usamos Yu Gothic Bold, que é ゴシック, direção correta (mas licenciamento de fonte problemático, veja §17).

16.2 ⛔ Mas 4 cps Não Pode Ser Aplicado Diretamente a Letras (Minha Inferência, Nível D)

A razão de existência de 4 cps: diálogos incompreensíveis exigem releitura; a legenda é o único canal de informação. Enquanto as letras são cantadas simultaneamente — o espectador vê a palavra no mesmo segundo em que a ouve, sem precisar "ler e depois entender".

⇒ As legendas de letras não devem ser projetadas para "ler", mas para "cantar junto". (O próprio AVTpro permite uma exceção para letras: o tempo máximo de exibição é estendido de 6s para 7s, indicando que a indústria reconhece as letras como uma categoria diferente.)

⚠️ Mas isso não significa "a letra pode ser excessivamente rápida". Acima de ~6 cps, até "cantar junto" se torna impossível, porque o olho não consegue encontrar o caractere atual. ⇒ Critério prático: pico cps ≤5,0 aceitável, 5,0–6,0 precisa de melhoria, >6,0 deve alterar a tipografia (quebra de linha / duas linhas simultâneas / encurtar bunsetsu).

16.3 Medição Prática Deste Projeto (lyric_timing_v2.json, 22 linhas / 52 bunsetsu)

CritérioResultado
Por linha inteira (v7 atual WHOLE_LINE)22 linhas: 5 linhas >4,0 cps, pior L5 = 5,30 cps (16 caracteres / 3,02s)
Por bunsetsu (se revertido para aparecimento por bunsetsu)52: 11 >4,0 cps (21%), pior L3「ポケットのなかに」6,90 cps
Caracteres por coluna verticalMáximo 16 caracteres → duas colunas de 8 caracteres cada, não excede 11, OK

⇒ Conclusão em dois níveis, não misturar:

  • Pelo critério estrito de 4,0 cps: 5 linhas reprovadas, mas pelo critério de letras de §16.2 (≤5,0) apenas L5 com 5,30 precisa ser tratada.
  • ⛔ Se revertido para aparecimento por bunsetsu, 21% dos bunsetsu excederão 5–7 cps ⇒ Esta é a base quantitativa para a decisão de saída em linha inteira (originalmente mudamos para WHOLE_LINE apenas com base na intuição de que "bunsetsu individual induziria verificação de sincronia", agora temos números).

16.4 ⭐ Defeito Real Encontrado de Passagem: Linha do Tempo de L3–L7 é Calculada por Divisão Igual

SintomaL3–L7 cinco linhas consecutivas com duração exatamente 3,02s, e início/fim perfeitamente alinhados (23,63→38,72 = 15,09s ÷ 5)
Causa raizA detecção de intervalo de respiração nesta seção (legato, sem respiração entre as notas) não encontra gap, REMAP degrada para divisão igual, e não emite aviso
Contraprova práticaVarrendo 4 limiares × 2 durações mínimas em 22–44s, o silêncio real tem apenas 7 locais (22,63 / 23,01 / 24,24 / 25,60 / 28,29 / 31,43 / 41,55), nenhum em 26,65 / 29,67 / 32,69 / 35,70 / 38,72 ⇒ esses cinco limites não foram medidos
Por que é difícil de detectarO campo source escreve apenas REMAP, sem distinguir entre "remapeamento com base" e "divisão igual como fallback"
Correção (não feita, parte do programa)①Dividir REMAP em REMAP_ANCHORED / EQUAL_DIVIDE, este último deve imprimir um aviso ②Ao usar divisão igual como fallback, emitir simultaneamente cps; se ultrapassar 5,0, marcar diretamente como vermelho ③Para seções legato, usar continuidade de altura pyin para determinar limites, não silêncio

⛔ Este é outro exemplo de "critérios parecem todos verdes, mas são falsos": missing=[] apenas indica "cada linha tem tempo", não "o tempo foi medido".

17. ⛔ Licenciamento de Fonte: Atualmente Usamos Fontes do Sistema Windows, Comercialização com Risco (Nível B)

⚠️ Confiabilidade B (páginas de licenciamento oficial / FAQ originais de vários fabricantes de fontes, lidas uma a uma, não relatos de segunda mão)

17.1 Quatro Categorias de Licenciamento, Muito Diferentes

FonteLegendas em vídeoUso comercialObservações
SIL OFL 1.1 (Noto/Source Han, M PLUS, Zen Maru, Kosugi, Shippori, 侵食明朝…)✅✅ Sem atribuiçãoÚnica regra: ⛔ Não vender o arquivo de fonte separadamente; alterações devem usar a mesma licença
IPA Font License 1.0 (IPAex, こころ明朝…)✅ Claramente permite "conteúdo de imagem"✅⛔ Nomes derivados não podem conter "IPA"; redistribuição deve acompanhar a licença
ヒラギノ (integrada ao macOS)✅ Produto pode ser vendido/distribuído✅⛔ Mas proíbe explicitamente "criar dados em uma forma que funcione como fonte em conteúdo digital"; e vinculada ao macOS, usá-la no Windows = extrapolação
Bibliotecas comerciais como 日本書技研究所⚠️ Requer compraRequer licença comercialRótulo de imagem de vídeo: ¥22.000–55.000 dependendo do capital social
ことり文字ふぉんと Pro✅ (inclui monetização do YouTube)✅⚠️ Mas "Incorporação/fonte web" é proibida ⇒ Queimar no vídeo ≠ incorporar fonte, são itens diferentes em cláusulas diferentes

⭐ Distinção chave (a mais fácil de errar): "Queimar texto no quadro" e "incorporar o arquivo de fonte em um documento/página web" são dois atos diferentes, sujeitos a cláusulas diferentes. O primeiro produto são pixels, geralmente tratado como "material de saída"; o segundo é entregar o arquivo de fonte. ⛔ Não interprete a "proibição de incorporação" do ことり como "proibido fazer vídeos" — seu próprio FAQ afirma que "uso em vídeos" é explicitamente OK.

17.2 Nosso Estado Atual

ItemValor
Fonte atualC:\Windows\Fonts\YuGothB.ttc (Yu Gothic Bold, integrada ao Windows)
Direção do glifoゴシック ✅ (consistente com a recomendação de legibilidade de §16.1)
Status de licenciamento⚠️ Não verificado. Fontes integradas ao Windows vinculadas à licença do SO; queimar em produto comercial (DLC Steam) é área cinzenta, não explicitamente permitido

⇒ Sugestão: Trocar para fonte OFL (custo zero, claramente comercializável, sem atribuição). Candidatos por estilo:

CandidatoLicençaEstiloAdequação
Zen Maru GothicOFLArredondado, suave⭐ Mais próximo do nosso tom rosa/roxo/fofo
Shippori MinchoOFLMincho com emoção forteAdequado para versos líricos, mas com tensão com "fofo"
M PLUS 1pOFLGeométrico, modernoNeutro e seguro
Noto Sans JPOFLMais neutroFallback, sem erro

⚠️ Trocar fonte = alterar sensação visual, deve ser aprovado pelo Ronny após inspeção visual, ⛔ Não me é permitido trocar unilateralmente (é uma alteração na "camada visual", sujeita à regra de ferro do usuário de que ele deve ver).

Habilidades Relacionadas