O que Legendas e Subtítulos faz?
A maioria dos vídeos sociais é assistida sem som. Legendas são parte da edição, não um extra.
1. Transcrever
# openai-whisper (pip install openai-whisper)
whisper audio.mp3 --model small --language en --output_format srt --output_dir captions/
# faster-whisper (pip install faster-whisper): mais rápido, menos memória, timestamps por palavra
python - <<'PY'
from faster_whisper import WhisperModel
model = WhisperModel("small", compute_type="int8")
segments, info = model.transcribe("audio.mp3", word_timestamps=True, vad_filter=True)
for s in segments:
for w in s.words:
print(f"{w.start:.2f}\t{w.end:.2f}\t{w.word}")
PY
Extraia áudio limpo primeiro para melhores resultados:
ffmpeg -i video.mp4 -vn -ac 1 -ar 16000 audio.wav
O tamanho do modelo troca precisão por velocidade: base < small < medium < large. Use small ou medium para inglês, large para sotaques difíceis ou outros idiomas.
Se o roteiro já existir (você gerou a narração a partir dele), não confie na redação da transcrição. Use o texto do roteiro e use o Whisper apenas para o timing (alinhamento forçado). Isso mantém nomes e números exatos.
2. Corrigir o texto
Revise nomes próprios, nomes de produtos, números. O Whisper frequentemente os interpreta errado. Pergunte ao usuário por um glossário quando o tópico for técnico.
3. Escrever arquivos de legenda
SRT:
1
00:00:00,000 --> 00:00:02,400
A maioria dos builds falha na sexta-feira.
2
00:00:02,400 --> 00:00:05,100
Aqui está o porquê.
Regras de legibilidade:
- Máximo 2 linhas, cerca de 42 caracteres por linha (cerca de 20 para vídeo vertical).
- Velocidade de leitura abaixo de 17 caracteres por segundo; duração mínima do cue de 1 segundo.
- Quebre em frases, não no meio da frase. Nunca divida um nome entre cues.
- Os cues não devem se sobrepor. Mantenha uma lacuna de 2 frames ou nenhuma.
4. Gravar (burn-in)
# Estilização suave via force_style (SRT)
ffmpeg -i in.mp4 -vf "subtitles=captions.srt:force_style='FontName=Arial,FontSize=22,PrimaryColour=&H00FFFFFF,OutlineColour=&H00000000,BorderStyle=1,Outline=2,Alignment=2,MarginV=60'" -c:a copy out/captioned.mp4
# ASS dá controle total (destaque de palavra tipo karaokê, posições, animação)
ffmpeg -i in.mp4 -vf "ass=captions.ass" -c:a copy out/captioned.mp4
Problema de caminho no Windows: em filtros, escape o dois-pontos da unidade e use barras normais (subtitles='C\:/work/captions.srt'), ou execute o FFmpeg da pasta que contém o arquivo e use um caminho relativo.
5. Estilo com destaque de palavra para formato curto
Gere um arquivo ASS com um evento por grupo de palavras (2 a 4 palavras) e use a tag de karaokê \k ou substituição de cor por palavra para que a palavra ativa mude de cor. Aparência típica: sem serifa em negrito, texto branco, contorno preto de 3 a 4 px, palavra ativa em uma cor de destaque da marca, posicionada no terço inferior médio, não no fundo (a IU da plataforma o cobre).
Cabeçalho ASS mínimo para começar:
[Script Info]
ScriptType: v4.00+
PlayResX: 1080
PlayResY: 1920
[V4+ Styles]
Format: Name,Fontname,Fontsize,PrimaryColour,SecondaryColour,OutlineColour,BackColour,Bold,Italic,Underline,StrikeOut,ScaleX,ScaleY,Spacing,Angle,BorderStyle,Outline,Shadow,Alignment,MarginL,MarginR,MarginV,Encoding
Style: Default,Arial,72,&H00FFFFFF,&H0000D7FF,&H00000000,&H64000000,-1,0,0,0,100,100,0,0,1,4,0,2,60,60,520,1
[Events]
Format: Layer,Start,End,Style,Name,MarginL,MarginR,MarginV,Effect,Text
Dialogue: 0,0:00:00.00,0:00:01.20,Default,,0,0,0,,{\k30}Most {\k40}builds {\k30}fail
Cores no ASS são &HAABBGGRR (ordem azul-verde-vermelho, alfa primeiro).
6. Entregar
- Versão com burn-in para plataformas sociais.
- Um arquivo
.srtou.vttseparado para YouTube, LinkedIn e players web (espectadores podem ativar/desativar e traduzir). - Faixa de legenda suave em MP4:
-i captions.srt -c copy -c:s mov_text.
Traduzir
Traduza o texto do cue, não o timing. Mantenha os limites de linha por idioma (alemão e finlandês são mais longos, então reajuste). Peça a um nativo para verificar quando o vídeo estiver público.