Legenda Impacto
Modelo de legenda de alto impacto para Reels/Shorts/TikTok. Quando o usuário pedir para legendar um vídeo com este modelo, aplique-o conforme descrito abaixo, sem pedir os parâmetros novamente.
Pré-requisitos
- Premiere Pro (testado no 2027/27.0; usa ExtendScript) e Python 3.9+ com
pip install -r requirements.txt(Pillow). - Uma forma de executar ExtendScript no Premiere: um MCP do Premiere (
execute_extendscript) ou o bridge de arquivos CEP — vejadocs/PREMIERE-BRIDGE.mdna raiz do repositório. - Fontes: Impact (vem no Windows e no macOS) e, opcional, Anton. Se a fonte não for encontrada, defina
CAPTION_FONT_DIR. - Pacote de
.mogrtpalavra por palavra (*_WbW.mogrt) emassets/— não vem no repositório (vejaassets/LEIA-ME.md). São modelos Essential Graphics com os controles "Anim Speed"/"Out Animation" e um campo de texto.
Parâmetros (fonte da verdade: style.json e scripts/plan_blocks.py)
- Formato 9x16 (1080x1920). Texto em MAIÚSCULO, centralizado,
y_center0,54 (um pouco abaixo do meio). - Fonte Impact. Linha pequena 56 px (branca), linha grande 140 px, reta 76 px; encolhe para caber (min 60%).
- Bloco de 1 a 6 palavras, cortado por pontuação, pausa > 0,45 s ou duração > 3,3 s; nunca termina em palavra solta (o, de, que...).
- Tipos de bloco:
big_below(pequena em cima + grande embaixo, padrão),big_above(palavra forte grande em cima),single_big,single_smalle reta (1 linha, ou 2 se for longa, tamanho padrão, branca). Cada bloco vira reta com 40% de chance, no máximo 2 seguidos do mesmo tipo. - Vermelho
#F2381Cna linha grande quando tem número/dinheiro/palavra forte (listastrong), no máximo 2 vermelhos seguidos, força 1 se passaram 4 blocos sem. - Animação:
.mogrtpalavra por palavra, sorteada por bloco entre os que existirem emassets/, nunca repetindo a anterior; as duas linhas do mesmo bloco usam a mesma. Saída em corte seco (Out Animation desligada). Anim Speed 150 (200 se o bloco < 1 s). - Margem segura (regra fixa): nada de texto fora do title safe do Premiere (80% x 80% = 10% de margem em cada lado). Implementado em
make_graphics_script.py(layout_text+clamp_y;safe_margin_x/yesafe_tolerancenostyle.json): largura útil = 1 - 2*0,10 - 0,02 = 78% da largura (842 px em 1080). Linha que não cabe: 1) encolhe atémin_scale(60%); 2) se ainda não couber, quebra em 2 (até 3) linhas com corte equilibrado e encolhe só o necessário; o tamanho é arredondado para BAIXO, então a linha mais larga nunca passa da margem. O bloco inteiro também fica entre 10% e 90% da altura. - Entrega: editar direto na sequência que o usuário indicar (sem criar cópia), a menos que ele peça cópia.
Passo a passo
- Conferir o projeto: confirme com o usuário qual projeto/sequência está aberta e deixe a sequência alvo ativa (o ExtendScript trabalha na sequência ATIVA).
- Transcrição: o usuário exporta o JSON do Premiere (Texto > Transcrição > menu ... > Exportar; fica em Documentos, ".json").
- Plano:
PYTHONIOENCODING=utf-8 python -I <skill>/scripts/plan_blocks.py <transcricao.json> <pasta>/blocks.json. Mostre o resumo e as palavras[conferir](confiança < 0,75). Corrija erros noblocks.json(campossmall/big). - Trilhas: liste as trilhas de vídeo. V1 = vídeo. Use V2 (índice 1) para linhas pequenas, V3 (índice 2) para grandes/retas e uma trilha NOVA acima de tudo (índice = número atual de trilhas) para as vermelhas. Se houver clipes de legenda/título antigos cobrindo o quadro, desligue-os.
- Gerar lotes:
python -I <skill>/scripts/make_graphics_script.py blocks.json <pasta>/lote.js --tracks 1,2,<indiceVermelha> [--seed N]->lote_01.js...(8 clipes cada) elote_clips.json. - Conferir a margem ANTES de rodar:
python -I <skill>/scripts/check_margins.py <pasta>/lote_clips.json— tem que darfora da margem: 0(maior largura <= 78%). - Rodar cada lote no Premiere (ExtendScript, campo
script, IIFE com return, sóJSON.parse/stringify), um de cada vez, esperandook=8/8. Se o bridge oscilar, verifique a conexão antes de CADA lote. Nunca mande tudo junto (dezenas de clipes de uma vez travam o Premiere). - Vermelho: liste os clipes da trilha vermelha e aplique o efeito "Equilíbrio de cor (RGB)" (em inglês "RGB Color Balance") com Vermelho 242, Verde 56, Azul 28. Só uma vez por clipe — reaplicar duplica o efeito e escurece o vermelho (se rodar de novo, apague e recrie os clipes da trilha vermelha).
- Conferir: leia de volta texto/fonte/tamanho/posição dos clipes e rode
check_margins.pyde novo; exporte 3-4 quadros (um vermelho, um reto, um de 2 linhas) se o export de frame funcionar, senão peça ao usuário para olhar com as guias de margem ligadas. Salve o projeto. - Entregar: diga o que foi feito, as palavras duvidosas e que não viu em movimento.
Ajustes rápidos
| Quero | Mexer em |
|---|---|
| Tamanhos/fonte/posição | style.json (mogrt_size_small/big/plain, mogrt_font, y_center, gap) |
| Margem | safe_margin_x/y, safe_tolerance no style.json |
| Mais/menos legenda reta | --plain-prob (padrão 0,4) |
| Outra aleatoriedade | --seed |
| Mais/menos vermelho, blocos maiores/menores | RULES em plan_blocks.py ou --config regras.json |
| Corrigir texto | blocks.json e refazer os lotes |
Alternativa: vídeo transparente (só se o Premiere não aceitar .mogrt)
render_captions.py blocks.json out.mov --duration <s> --fps 30 gera ProRes 4444 com alfa (entrada "pop" de 5 quadros, vermelho nativo, não editável). Colocar na timeline como mídia importada. Render de 45 s leva ~5 min.
Limites conhecidos
- A animação roda no tempo do template, não no instante exato de cada palavra falada.
- Palavrão censurado ("P*RRA") não é automático (editar no
blocks.json). - Corte de frase pode ficar estranho; revisar a lista de blocos antes de rodar.
- A cor do
.mogrtnão é alterável por script (por isso o efeito de cor nos vermelhos).