O que captions faz?
Transcrição local no nível da palavra, estilização e gravação de legendas em formato curto.
Os scripts estão em scripts/:
| Script | Função |
|---|---|
transcribe.py | faster-whisper com word_timestamps=True para words.json (cache) |
make-captions.mjs | words.json para ASS (estilizado, destaque de palavra ativa) e SRT |
burn.mjs | grava ASS/SRT com libass (filtro ass / subtitles) |
snap-to-words.mjs | move pontos de corte para o intervalo mais próximo entre palavras |
Fluxo de trabalho
- Transcrever (uma vez por fonte; o resultado é cacheado):
A primeira execução baixa o modelo do Hugging Face. Se isso estiver bloqueado, o script termina com código 4 e uma mensagem JSONpip install faster-whisper # uma vez python3 scripts/transcribe.py --input clip.mp4 --out edit/clip.words.json --model small --language ptfixem vez de um traceback; ele nunca escreve uma transcrição falsa. Aponte--modelpara uma pasta de modelo CTranslate2 local para trabalhar offline. - Criar legendas:
O estilo vem do pacote de marca (bloconode scripts/make-captions.mjs --words edit/clip.words.json --out-ass edit/clip.ass --out-srt edit/clip.srtcaptions: tamanho, margem, contorno, destaque;colors.accenté a cor da palavra ativa). - Gravar como a última etapa visual:
Usenode scripts/burn.mjs --input edit/clip-hook.mp4 --subs edit/clip.ass --out edit/clip-captionado.mp4--fonts-dirquando a fonte da legenda for um arquivo em vez de uma fonte instalada. - Verificar com uma folha de prova
render-qc: legível, dentro da área segura, sem sobrepor a placa de gancho.
Regras
- Nunca corte dentro de uma palavra. Antes de dividir a fala, ajuste os cortes para intervalos entre palavras:
node scripts/snap-to-words.mjs --words edit/clip.words.json --markers edit/cuts.json --out edit/cuts.json - Legendas vão por último: após cortes, sobreposições e correção de cor. Se você cortar o clipe após
transcrever, passe
--offset -<segundos_cortados>paramake-captions.mjs. - 1 a 3 palavras por bloco para shorts (
maxWords,maxChars). Os blocos quebram em pontuação e pausas. - Mantenha as legendas fora dos ~15% inferiores (UI da plataforma) e longe da placa de gancho: ajuste
captions.marginV. - As transcrições são cacheadas: execute novamente com
--forceapenas se o áudio mudou. - Verifique palavras aleatórias em relação ao áudio; o whisper pode entender errado nomes e jargões. Corrija
words.jsonmanualmente se necessário.
Sem libass no ffmpeg
Se burn.mjs informar que não há filtro ass, a compilação do ffmpeg não tem libass. Instale uma
compilação completa (a maioria dos gerenciadores de pacotes fornece uma), ou carregue o SRT como uma
faixa de legenda separada em vez de gravá-lo.