Communitygithub.com

manwithshit/subtitle-focus

Revise, travar, destacar, queimar, revisar por quadros e entregar legendas SRT localmente | Pipeline de legendas verificável localmente

O que é subtitle-focus?

Subtitle Focus é uma skill de agente especializada em pipelines profissionais de legendas SRT. Ela executa um fluxo completo de revisão e entrega: desde a correção textual com travamento de fonte, passando pela seleção de palavras-chave semânticas em amarelo, até a renderização de um vídeo final com legendas queimadas e a geração de quadros de revisão. A skill é projetada para trabalhar exclusivamente com arquivos SRT exportados, recusando entradas de vídeo puro ou transcrições de MD sem timestamps. Ela opera em cinco portões de confirmação obrigatórios, garantindo que cada etapa seja aprovada pelo usuário antes de prosseguir. O principal benefício é a rastreabilidade completa: cada artefato (legenda travada, plano de destaque, estilo, quadros de revisão) é vinculado por hash e registrado em um manifesto de entrega, eliminando suposições e garantindo que qualquer alteração na fonte invalide e force a regeneração de todos os artefatos dependentes. A skill suporta plataformas que executam scripts Python localmente, como Claude Code ou Cursor, e seu funcionamento é baseado em um script Python principal que gerencia todas as operações, lendo referências de glossário e esquemas de validação. O agente deve sempre parar e aguardar a decisão do usuário em cada portão, nunca automatizando aprovações.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add manwithshit/subtitle-focus

Perguntar na sua IA favorita

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

Documentação

Subtitle Focus|Aprimoramento e Queima de Legendas

Transforme um SRT revisado e com timestamps em destaques semânticos amarelos, uma pequena amostra aprovada e uma queima de vídeo completo rastreável. Quando o usuário fornecer uma captura de tela de referência, calibre adicionalmente o estilo da legenda para aquele projeto. O agente decide o significado das palavras com base no contexto do SRT, glossários carregados, evidências do projeto e correções do usuário; o script incluso possui sinalizadores determinísticos, substituição exata, travamento de fonte, layout misto CJK/Latim, renderização, quadros de revisão e hashes. O SRT de origem e o vídeo são somente leitura.

Requer um SRT exportado. Uma entrada apenas de vídeo ou uma transcrição MD linha por linha simples não possui uma linha do tempo aceita nesta Skill. Pare e peça ao usuário para exportar um SRT; não chame Uso de Vídeo, 剪口播, Whisper local, ASR ou OCR.

Trabalhe em cinco portões. Pare em cada portão de confirmação.

Revisão e Travamento SRT → Confirmação de Destaques → Confirmação da Amostra → Quadros de Revisão do Vídeo Completo → Registro de Entrega

Portão 1 — Revisão e Travamento SRT

  1. Execute doctor antes do primeiro uso em uma máquina.
  2. Exija um SRT com timestamps. Rejeite entrada de MD/transcrição simples e solicitações de transcrição apenas de vídeo.
  3. Peça duas escolhas explícitas na inicialização do projeto: usar um glossário pessoal ou pular explicitamente; usar um glossário do projeto ou pular explicitamente. Não pergunte durante a instalação e não inicie a revisão formal até que ambas as escolhas sejam registradas pelas flags proofread.
  4. Execute proofread. O glossário base carrega automaticamente. Leia text-lock-schema.md para as escolhas explícitas, camadas, comportamento de privacidade e esquema. A política de revisão de fontes públicas está documentada em glossary-sources.md.
  5. Inspecione cada legenda usando vizinhos do SRT, proveniência do glossário carregado, vocabulário do projeto, nomes de produtos, arquivos do projeto e correções do usuário. Aplique regras de ortografia, capitalização, números, unidades, pronomes ou espaçamento somente quando uma regra real do usuário/projeto ou entrada de glossário enumerada existir. Não invente uma política de normalização geral.
  6. Elabore corrections.json. Correspondências de glossário são sugestões, nunca edições automáticas. Nunca reescreva silenciosamente.
  7. Execute correct; mostre a tabela de antes/depois por legenda ao usuário. A saída deve preservar quebras de linha não mencionadas e espaços repetidos no texto SRT.
  8. Após a aprovação explícita do texto, execute lock --confirmed.

PARE. Não planeje destaques a partir de um SRT não travado. Qualquer alteração de byte no SRT invalida seu travamento, plano de legenda, amostra e renderização completa. Regere-os.

Portão 2 — Destaque de Texto

  1. Execute plan --lock ... com --max-chars 16 a menos que o usuário peça o contrário.
  2. Elabore highlight.json usando highlight-schema.md.
  3. Execute apply e review. Ajuste as escolhas até que o relatório de cadência passe, então execute validate.
  4. Envie ao usuário o manuscrito completo da legenda em ordem cronológica, com cada destaque proposto marcado diretamente na frase usando negrito Markdown. Não envie primeiro uma lista separada de palavras-chave ou tabela de destaque. Peça ao usuário para confirmar as localizações em negrito ou nomear as frases que precisam de redirecionamento.

Seleção: apenas palavras ou frases completas com significado. Trate cada segmento de legenda renderizado como uma frase. Cada par adjacente deve conter pelo menos um segmento destacado, portanto uma sequência de frases não destacadas pode ter no máximo uma. Uma legenda cujo texto completo está entre parênteses chineses ou ASCII correspondentes é um aparte fora da tela/PiP: mantenha-a simples e trate-a como um limite de cadência. Parênteses inline dentro de uma frase normal não criam esta exceção. Um pedido explícito do usuário para manter uma legenda ou segmento específico simples substitui a cadência, especialmente para conteúdo PiP/fora da tela: registre-o como uma entrada plain_overrides com o id alvo e o motivo confirmado pelo usuário, mantenha simples e trate como um limite de cadência mesmo sem parênteses. Não invente esta exceção meramente porque o conteúdo parece secundário e não adicione um destaque de preenchimento próximo para compensar. Destacar cada frase é permitido quando melhora a continuidade. Uma frase curta semanticamente atômica pode ser destacada por completo; uma frase mais longa normalmente deve manter uma frase de significado principal, ou duas apenas para um paralelo ou contraste genuíno. Não divida uma palavra, nome de produto ou frase meramente para reduzir uma porcentagem. Não destaque palavras de preenchimento, transições ou de baixa informação apenas para satisfazer a cadência. A cobertura nunca bloqueia um plano. A revisão adiciona um aviso de densidade não bloqueante quando um segmento mais longo está principalmente destacado ou contém muitos intervalos de destaque, e o usuário decide a partir do manuscrito completo em negrito. Se a cadência não puder ser satisfeita com um destaque significativo ou uma exceção explícita do usuário, relate os ids de segmento conflitantes para revisão do usuário. Nunca reescreva o SRT travado durante o destaque.

PARE. Não renderize até que o usuário confirme o manuscrito completo em negrito.

Portão 3 — Amostra e Estilo com Imagem de Referência

  1. Copie default-style.json ou derive uma versão com style.
  2. Mantenha o center_y_ratio padrão em 0.82 quando não houver demonstração de referência.
  3. Quando o usuário fornecer uma captura de tela de referência, inspecione-a e execute style --reference-image ... com substituições explícitas como --center-y-ratio, --safe-width-ratio ou --font-size-max. A saída registra o SHA e as dimensões da imagem de referência. Veja style-calibration.md.
  4. Renderize um clipe de 10 a 15 segundos começando no primeiro destaque.
  5. Execute preview --video ... para destaques CJK, Latim e mistos, para que os stills usem as dimensões reais do vídeo alvo.
  6. Inspecione linha de base, sobreposição, corte, área segura de quadro de telefone, evitação de avatar e alinhamento com a demonstração de referência.
  7. Execute validate --video ... --style ... para medir cada legenda com as dimensões reais do vídeo e a fonte selecionada. O renderizador pode encolher uma legenda para font_size_min; uma legenda que ainda exceder a largura segura de pixels falha.

PARE. A renderização completa é proibida até que o usuário aceite a amostra. Mudanças de estilo criam style-vN.json; mudanças de texto retornam ao Portão 1.

Portão 4 — Vídeo Completo e Quadros de Revisão

  1. Execute render sem --start ou --duration.
  2. Execute validate --video ... contra o SRT travado e a duração final do vídeo.
  3. Execute frames contra o vídeo renderizado final com --already-burned, passando --corrections sempre que existirem correções. Deve incluir cada legenda corrigida, cada segmento destacado e quadros de entrada/meio/saída.
  4. Inspecione contact-sheet.jpg além de cada quadro em resolução total. Legendas corrigidas ausentes dos quadros de revisão são uma falha de entrega.

Portão 5 — Entrega Única

Execute deliver usando o vídeo final, SRT travado, plano de destaque, estilo, correções e diretório de revisão. O comando escreve um manifesto subtitle-focus-delivery com caminhos, hashes, metadados do vídeo, ids de legendas alteradas, ids de legendas revisadas, proveniência da demonstração de referência e arquivos de transferência.

Use --handoff-dir para copiar o SRT final e gerar uma transcrição. Adicione --copy-video apenas quando o usuário quiser o vídeo copiado. Adicione --publish-copy quando um documento de publicação finalizado já existir. Nunca invente cópia de publicação.

Veja delivery-schema.md.

Mapa de comandos

SCRIPT=skill/scripts/subtitle_focus.py

python3 "$SCRIPT" doctor
python3 "$SCRIPT" glossary-init --scope personal
python3 "$SCRIPT" proofread --srt /abs/in.srt --no-personal-glossary --no-project-glossary --output /abs/text-review.md
python3 "$SCRIPT" correct --srt /abs/in.srt --corrections /abs/corrections.json --output /abs/locked-text.srt --review /abs/corrections-review.md
python3 "$SCRIPT" lock --srt /abs/locked-text.srt --output /abs/srt-lock.json --confirmed
python3 "$SCRIPT" plan --srt /abs/locked-text.srt --lock /abs/srt-lock.json --output /abs/caption-plan.json
python3 "$SCRIPT" apply --plan /abs/caption-plan.json --highlights /abs/highlight.json --output /abs/caption-plan.highlighted.json
python3 "$SCRIPT" review --plan /abs/caption-plan.highlighted.json --output /abs/highlight-review.md
python3 "$SCRIPT" style --base skill/assets/default-style.json --reference-image /abs/demo.png --center-y-ratio 0.73 --output /abs/style-v1.json
python3 "$SCRIPT" validate --plan /abs/caption-plan.highlighted.json --video /abs/input.mp4 --style /abs/style-v1.json
python3 "$SCRIPT" preview --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --cue 2 --output /abs/cue-2.png
python3 "$SCRIPT" render --video /abs/input.mp4 --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --output /abs/edit/final-subtitled.mp4
python3 "$SCRIPT" frames --video /abs/edit/final-subtitled.mp4 --already-burned --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --output-dir /abs/edit/review-frames
python3 "$SCRIPT" deliver --video /abs/edit/final-subtitled.mp4 --srt /abs/locked-text.srt --plan /abs/caption-plan.highlighted.json --style /abs/style-v1.json --corrections /abs/corrections.json --review-dir /abs/edit/review-frames --output /abs/edit/delivery.json

Execute python3 scripts/subtitle_focus.py <comando> --help para todas as flags.

Contrato de desenho

Regras de números visuais e tipografia estão em visual-spec.md. Não adicione hacks de desenho do lado do agente. Mantenha uma linha de base compartilhada, amplie apenas execuções destacadas, mantenha frases mistas como C 组 juntas e desenhe strings como execuções completas.

Não faça

DesculpaRealidade
"O SRT mudou apenas uma palavra"Seu hash mudou. Retrave e regenere todos os artefatos derivados.
"Os destaques são óbvios"O Portão 2 é uma decisão do usuário. Espere.
"A altura padrão de 82% está sempre correta"Mantenha 82% apenas sem uma demonstração de referência; caso contrário, use uma substituição de estilo versionada.
"Alguns quadros aleatórios são suficientes"Cada legenda corrigida e segmento destacado deve aparecer nos quadros de revisão.
"O nome do arquivo final nos diz o que ele contém"Apenas o manifesto de entrega é autoritativo.
"O vídeo ou MD é suficiente para recuperar o timing"Esta Skill requer SRT exportado e não executa ASR/OCR.
"Uma correspondência de glossário está certamente correta"É uma sugestão com fonte. Mostre e espere a aprovação do texto.
"Nenhum arquivo de glossário significa que nenhuma decisão é necessária"O Portão 1 ainda requer escolhas explícitas de pular pessoal e do projeto.
"Regras gerais de tipografia são óbvias"Preserve o SRT. Adicione apenas regras solicitadas pelo usuário ou enumeradas.
"Aplainar linhas SRT é inofensivo"O plano de renderização pode derivar uma linha de exibição, mas o SRT travado deve preservar espaços em branco não mencionados.
"Quatro frases simples seguidas são aceitáveis"Cada par adjacente precisa de pelo menos um segmento destacado; a validação bloqueia execuções mais longas e simples.
"Um aparte entre parênteses precisa de um destaque forçado para satisfazer a cadência"Uma legenda totalmente entre parênteses permanece simples e separa execuções de cadência; parênteses inline permanecem parte de uma legenda normal.
"A cadência é mais rigorosa do que a escolha explícita de texto simples do usuário"A escolha confirmada do usuário vence. Registre a legenda ou segmento alvo em plain_overrides; nunca infira uma exceção em nome do usuário.
"Uma frase curta não pode ser destacada por completo"Pode ser totalmente destacada quando a frase inteira é um ponto significativo; a cobertura permanece informacional.
"Remover o limite de 30% significa que uma frase longa pode ficar toda amarela"Destaque longo e denso é mostrado como um aviso de revisão; mantenha uma frase principal por padrão e deixe o usuário decidir a partir do manuscrito completo.

Habilidades Relacionadas