Communitygithub.com

legenda-simples

Legenda "simples" para vídeos verticais 9x16 no Premiere Pro — frases curtas (3–4 palavras, até 5 em trecho rápido), uma linha, branca com sombra suave, Montserrat Bold, maiúscula só no início da frase, SEM animação de entrada (aparece inteira e some em corte seco), sincronizada com a fala e dentro da margem segura. Inclui o pipeline de edição dinâmica (corta pausas/respiros e alterna zoom). Estilo de cortes de podcast. USE quando o usuário pedir "legenda simples", "legenda de podcast", "legenda por frase", "o modelo simples" ou "edita esse vídeo com a legenda simples". Para o estilo grande/vermelho/palavra por palavra use a legenda-impacto.

O que é legenda-simples?

Esta skill automatiza a criação de legendas simples e limpas para vídeos verticais 9x16 no Adobe Premiere Pro. Ideal para podcasts e vídeos de bate-papo, ela gera frases curtas (3-4 palavras, até 5 em fala rápida) em texto branco Montserrat Bold, sem animação de entrada — as frases aparecem inteiras e somem em corte seco. A sincronização com a fala é precisa, e o texto fica dentro da margem segura. A skill funciona em duas etapas: primeiro, planeja as frases a partir da transcrição exportada do Premiere usando um script Python; depois, gera PNGs transparentes e scripts ExtendScript que são executados no Premiere para importar e posicionar as legendas na timeline. Opcionalmente, oferece um pipeline de edição dinâmica que remove pausas e hesitações e alterna zoom entre cortes. A skill é compatível com Premiere Pro (ExtendScript) e requer Python 3.9+ com Pillow. Ela é acionada por comandos como "legenda simples", "legenda de podcast" ou "edita esse vídeo com a legenda simples".

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/gbrand-lab/premiere-legendas-skills/tree/HEAD/skills/legenda-simples

Perguntar na sua IA favorita

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

Documentação

Legenda Simples — frases curtas, sem animação, no tempo da fala

Uma frase por vez, texto branco em negrito, minúscula com inicial maiúscula (como transcrito), sem fundo, sombra suave, no terço inferior, sem vermelho e sem animação de entrada. Ex.: "O problema é que" / "sem prática".

Pré-requisitos

  • Premiere Pro (testado no 2027/27.0; ExtendScript) e Python 3.9+ com pip install -r requirements.txt (Pillow).
  • Uma forma de executar ExtendScript no Premiere (MCP com execute_extendscript ou bridge CEP por arquivo) — veja docs/PREMIERE-BRIDGE.md na raiz do repositório.
  • Fonte Montserrat Bold instalada (grátis, Google Fonts). Se não for encontrada, defina CAPTION_FONT_DIR ou coloque o .ttf em fonts/ dentro da skill.
  • O modo padrão (PNG) não precisa de .mogrt. Só a alternativa .mogrt precisa de assets/Simple_Text_WbW.mogrt (veja assets/LEIA-ME.md).

Parâmetros (fonte da verdade: style.json e RULES em scripts/plan_phrases.py)

  • 9x16 (1080x1920). Montserrat Bold 66 px, branco, sombra suave (blur 6, dy 4, 55%). y_center 0,70.
  • Sem animação de entrada: cada frase é um PNG transparente 1080x1920 (make_stills.py) que aparece inteiro no 1º quadro e some em corte seco. O .mogrt palavra por palavra não serve: a entrada é embutida (só existem "Out Animation" e "Anim Speed" 50-500, não "In Animation"). Contrapartida do PNG: o texto não é editável no Premiere — para corrigir, edite blocks.json e gere de novo (segundos).
  • Frase de 3-4 palavras, por programação dinâmica: evita 1-2 palavras soltas, não termina em "o/de/que...", prefere cortar em vírgula ou pausa; vírgula só corta com ao menos 3 palavras. Em fala rápida (frase atravessada em < 0,9 s) junta até 5 palavras, sem atravessar fim de frase (. ? !).
  • Margem segura: nada fora do title safe do Premiere (80% x 80%); largura útil 78% (842 px em 1080), bloco dentro de 10%-90% da altura. O texto encolhe até min_scale e, se não couber, quebra em 2 linhas; tamanho arredondado para BAIXO. Conferir com check_margins.py (deve dar fora da margem: 0).
  • Entrega: editar direto na sequência indicada (sem cópia), a menos que o usuário peça cópia.

Tempo na tela = tempo da fala (modo sync, padrão)

  • A frase nasce no início da 1ª palavra falada (atraso zero) e morre no fim da última + tail 0,3 s, estendida até min_dur 0,8 s só se houver silêncio depois (nunca invade a próxima frase). Frase que ficaria < 0,5 s cola na anterior somente se couber em 5 palavras e a anterior não fechou uma frase.
  • Nota de projeto: existe também o modo schedule_mode: "lag" (tempo de leitura: cada frase fica ao menos ~0,9 s e, se a fala for mais rápida, a seguinte entra depois, até 0,9 s). Ele descola a legenda da voz (início e fim deixam de coincidir e a duração varia sem relação com o que é falado), por isso o padrão é sync. Use lag só se o usuário pedir leitura mais lenta (--config com {"schedule_mode":"lag"}).
  • Limite honesto: fala muito densa (~3,6 palavras/s, picos de 6/s) faz algumas frases ficarem curtas (0,36-0,8 s). É a fala, não a legenda.

Opção A — só legenda numa sequência já editada

  1. Confirmar o projeto/sequência com o usuário e deixá-la ativa.
  2. Transcrição: JSON exportado do Premiere (Texto > Transcrição > ... > Exportar; fica em Documentos "<sequência>.json").
  3. PYTHONIOENCODING=utf-8 python -I <skill>/scripts/plan_phrases.py <transcricao.json> <pasta>/blocks.json; mostre a lista e as palavras [conferir].
  4. python -I <skill>/scripts/make_stills.py <pasta>/blocks.json <pasta>/png --track 1 (gera PNGs + JSX; use uma pasta NOVA a cada geração — o Premiere trava os PNGs já importados) e python -I <skill>/scripts/check_margins.py <pasta>/png/stills_clips.json.
  5. No Premiere, com a sequência ativa: rodar stills_import.jsx (importa os PNGs num bin) e em seguida stills_01.jsx... um por vez (ok=20/20). Os tempos já saem na grade de quadros (--fps, padrão 30).

Opção B — edição dinâmica completa (cortes + zoom + legenda)

  1. Importar o vídeo no projeto e ter a transcrição do Premiere.
  2. python -I <skill>/scripts/plan_edit.py <transcricao.json> <pasta>: tira pausas/respiros > 0,3 s e as hesitações (texto vazio), faz sub-cortes de ~3 s em pontuação, alterna zoom 100%/116% e escreve clips.json + blocks.json já no tempo cortado. Ajustes no topo do script (GAP, ZOOM_ALT, SUB_MIN/MAX).
  3. python -I <skill>/scripts/build_cut_script.py <pasta>/clips.json <pasta> --item <nome do arquivo no projeto> --name "<nome> editado 9x16" -> montar.jsx; rode no Premiere (a sequência original não é tocada).
  4. Legendas: passos 4 e 5 da Opção A com o blocks.json desta pasta.
  5. Salvar o projeto e entregar listando: cortes, zoom, palavras duvidosas e o que não foi visto.

Alternativa .mogrt (texto editável, COM entrada palavra por palavra)

python -I <skill>/scripts/make_graphics_script.py <pasta>/blocks.json <pasta>/lote.js --track 1 (usa assets/Simple_Text_WbW.mogrt; Anim Speed em style.json) e rodar os lotes lote_NN.js. Use só se o usuário aceitar a animação.

Dicas de Premiere (descobertas na prática)

  • importFiles precisa de caminho absoluto (new File(...).fsName); createNewSequenceFromClips herda 1080x1920 de um vídeo vertical.
  • Render: app.encoder.encodeSequence(...) + startBatch() pode não entrar na fila do Media Encoder. O que funcionou: seq.exportAsMediaDirect(saida, preset, app.encoder.ENCODE_ENTIRE) (renderiza dentro do Premiere, ~5 min para 90 s). Preset: <pasta do Premiere>/MediaIO/systempresets/.../H264 Match Source - High bitrate.epr (procure com glob; fica dentro da instalação). O preset "MooV" gera áudio PCM em .mov/.mp4; se for postar, re-empacote com ffmpeg -c:v copy -c:a aac.
  • Exportar frame (exportFramePNG via QE) pode falhar; os PNGs da legenda dispensam isso: o que se vê no PNG é o que vai pro vídeo.

Ajustes rápidos

QueroMexer em
Fonte/tamanho/posição/sombrastyle.json (font_path, mogrt_font, mogrt_size, y_center, shadow_*)
Mais tempo na telamin_dur, tail em RULES (no sync só estende para o silêncio)
3 palavras em vez de 4{"max_words": 3} via --config
Mais/menos cortes e zoomGAP, ZOOM_ALT, SUB_MIN/SUB_MAX em plan_edit.py

Limites conhecidos

  • PNG não é texto editável (corrigir = editar blocks.json e regerar).
  • A transcrição do Premiere pode errar; revisar o blocks.json antes de aplicar.
  • A fonte de referência parece Proxima Nova Bold (mais estreita); usa-se Montserrat Bold (livre).

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Habilidades Relacionadas