Communitygithub.com

HedgehogsGX/chinese-subtitles-skill

Tradução de legendas EN→ZH-CN + queima em vídeo. Pacotes de glossário para Apex/Warframe/osu!/Minecraft/SC2/CS2; legendas brancas com contorno em uma linha. Funciona também para palestras e vlogs.

O que é chinese-subtitles-skill?

Esta skill do Claude permite traduzir e queimar legendas em chinês simplificado diretamente em vídeos MP4 existentes, gerando também um arquivo SRT correspondente. O pipeline é agnóstico ao conteúdo do vídeo, mas inclui glossários especializados para jogos como Apex Legends, Warframe, osu!, Minecraft, StarCraft II e CS2, garantindo que jargões e termos técnicos sejam tratados corretamente (mantendo termos em inglês que a comunidade usa, por exemplo). A saída é padronizada: legendas de uma linha, sem caixa de fundo, texto branco com contorno preto e sombra suave, usando a fonte Source Han Sans Bold. O fluxo de trabalho cobre desde a extração da transcrição em inglês (via YouTube ou manual), tradução para um JSON de segmentos, construção do SRT com validação automática de sobreposições e linhas longas, detecção de cards de capítulo queimados no vídeo, prevenção de colisão com elementos da tela, codificação final e verificação com contato-sheet. Para correções posteriores, o script de splice permite recodificar apenas os trechos alterados em segundos, em vez de recodificar o vídeo inteiro. A skill também orienta a entrega de título e descrição chineses, e a manutenção de um registro de termos não cobertos pelo glossário para expansão futura.

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

Perguntar na sua IA favorita

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

Documentação

Legendas em Chinês para Vídeos — traduzir e queimar

Recebe um vídeo em inglês já existente no disco e produz uma versão com legendas hardcoded em chinês simplificado, além de um arquivo SRT correspondente.

O download está deliberadamente fora do escopo. Presuma que o MP4 de origem já está disponível.

O pipeline é independente do assunto — foi construído com base em um vídeo de 22 minutos sobre movimentação no Apex, mas nada nos scripts sabe ou se importa com o conteúdo do vídeo. O que varia por vídeo é o glossário e a posição da faixa de legendas.

Como é uma boa saída

A pessoa que usa esta skill se preocupa com uma aparência específica, já definida. Não se trata de padrões a serem reconsiderados a cada vez — eles foram alcançados iterando sobre resultados reais, e alterá-los silenciosamente será tratado como uma regressão:

  • Apenas chinês simplificado. Nunca misturado com tradicional. Verifique antes de entregar.
  • Uma linha por legenda, sempre. Legendas de duas linhas são a reclamação mais comum. Se uma linha for muito longa, divida-a em duas inserções sequenciais, em vez de quebrar. build_srt.py impõe isso.
  • Legendas são curtas. "Uma linha" não é licença para uma linha muito larga. Aponte para no máximo ~1100px de largura renderizada (cerca de 57% do quadro em 1080p).
  • Sem caixa de fundo. Texto branco, contorno preto forte, sombra preta suave.
  • 思源黑体 / Source Han Sans Bold (incluído em assets/NotoSansSC-Bold.ttf). Reta e pesada, com glifos latinos fortes — este estilo de vídeo está repleto de jargões em inglês inseridos em frases chinesas, e uma fonte decorativa lida mal com isso.
  • Jargão que a comunidade realmente diz em inglês permanece em inglês. Quais termos são esses é uma questão por assunto, e é isso que os glossários respondem.
  • Cards de capítulo queimados recebem uma linha em chinês abaixo, não acima.

Fluxo de trabalho

1. Analisar a origem e escolher um glossário

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

Anote a duração e o fps exatamente — cada etapa posterior depende deles.

Em seguida, descubra sobre o que é o vídeo e leia references/glossaries/README.md, que direciona para o arquivo correto e informa quais seções ler. Leia a seção 字幕使用原则 do glossário correspondente por completo antes de traduzir — é curta e é onde as convenções para aquele jogo estão armazenadas.

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

Se não houver glossário para este vídeo, esse é o caso normal. Traduza com base em nomes oficiais verificáveis em chinês simplificado, mantenha uma lista dos termos que você precisou decidir e entregue essa lista ao final. Se um termo não tiver nome oficial em chinês, use uma tradução descritiva e indique que não é oficial — não apresente um palpite como definitivo. Nunca invente um nome para algo que já tem um nome.

2. Obter uma transcrição em inglês com marcações de tempo

Se o vídeo veio do YouTube, suas legendas automáticas são uma base utilizável: yt-dlp --write-auto-subs --sub-langs "en.*" --skip-download. São legendas contínuas com marcações de tempo a nível de palavra, então deduplique-as em segmentos de frase.

Legendas automáticas distorcem jargões gravemente e você precisa corrigi-los durante a tradução. O ASR transcreve foneticamente com base em um modelo de inglês geral, então todo termo de domínio que não é uma palavra comum volta como uma palavra plausível, mas incorreta. Exemplos reais de um vídeo de movimentação no Apex: "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". Espere o mesmo tipo de dano em qualquer vídeo denso em jargão — o glossário é o que permite reconhecê-lo.

Onde a fala for genuinamente irrecuperável — trechos de música, gritos sobrepostos — deixe zh vazio para aquele segmento para que seja descartado e informe ao usuário quais timestamps foram descartados. Inventar uma linha plausível é pior do que nenhuma linha.

3. Traduzir para um JSON de segmentos

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

Mantenha en — não é decorativo. build_srt.py o usa para distinguir uma continuação de frase de uma fala separada ao decidir se duas inserções podem ser mescladas, o que evita junções incorretas como 算了好 ou 是,长官你好啊.

4. Construir o SRT

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

Ele imprime um relatório. Trate valores não zero em overlaps, multiline, latin_cjk_runons ou term_split_across_cues como bugs a corrigir antes da codificação. Algumas inserções com under_0.35s são aceitáveis quando são interjeições de 1 a 3 caracteres — verifique, mas não presuma.

5. Encontrar e traduzir cards de capítulo queimados

python scripts/find_chapters.py source.mp4

Os criadores frequentemente queimam cards de capítulo no vídeo em vez de usar capítulos do YouTube, então os metadados não mostram nenhum. Este script relata janelas candidatas; extraia um quadro de cada uma e leia o texto real do card antes de escrever a tradução. Gere chapters.json: [{"start":42,"end":46,"zh":"第 1 章:定义 lurch 组合"}].

6. Verificar locais onde legendas colidiriam com texto na tela

Os cards de encerramento são o infrator mais comum — legendas na posição normal caem sobre as redes sociais do criador. Extraia um quadro, encontre a lacuna e declare-a:

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

A faixa de legendas padrão fica acima de um HUD típico de FPS. Um jogo diferente, ou filmagem não relacionada a jogos, pode colocar seus próprios elementos ali — um minimapa de MOBA, a linha de julgamento de um jogo rítmico, um terço inferior de uma palestra. Extraia um quadro e observe antes de aceitar o padrão.

7. Construir a sobreposição e codificar

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

Verifique se o desvio reportado da sobreposição é de alguns milissegundos, não centenas.

Antes de se comprometer com uma codificação de ~20 minutos, componha um PNG de sobreposição sobre um quadro real no PIL e observe-o. Isso custa segundos e detecta erros de posição e fonte que, de outra forma, só apareceriam 20 minutos depois.

8. Verificar

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

Observe a folha. Confirme: linhas únicas, legíveis sobre quadros claros, linhas de capítulo sob seus cards, nada colidindo com HUD ou texto de encerramento.

9. Correções posteriores — emende, não recodifique

Quando o usuário pedir para alterar algumas linhas (o que acontecerá), reconstrua o SRT, compare-o com o anterior para encontrar quais inserções mudaram, então:

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 segundos em vez de 20 minutos. A contagem de quadros deve sair idêntica.

Entregáveis

Junto com out.mp4, entregue o SRT (diálogo mais linhas de capítulo, mescladas e renumeradas) para que as legendas possam ser editadas posteriormente sem refazer o trabalho. Ofereça também um título e uma descrição em chinês — se o vídeo for uma republicação, levante que a descrição original em primeira pessoa implica autoria, e que os blocos de atribuição musical devem permanecer em seu inglês original porque a licença exige essa forma exata.

Se você precisou definir termos que não estavam em um glossário, liste-os. Um termo decidido uma vez e registrado vale mais do que a mesma decisão tomada de forma diferente na próxima vez; references/glossaries/README.md informa como transformar uma lista como essa em um arquivo de glossário.

Material de referência

  • references/glossaries/README.md — qual glossário ler, quais seções dele e o que fazer quando o vídeo não tem nenhum. Comece por aqui.
  • references/glossaries/*.md — os próprios glossários. Grandes. Leia a seção de princípios e as seções relevantes; use grep para termos individuais.
  • references/pipeline.md — notas técnicas e as armadilhas específicas deste pipeline. Leia antes de depurar qualquer coisa que pareça um problema de sincronismo, emenda ou renderização; a maioria já foi diagnosticada uma vez.

Habilidades Relacionadas