QA de Vídeo — o portão de liberação
Um vídeo não está pronto quando é renderizado; está pronto quando foi inspecionado, VISTO em uma folha de contato e normalizado. Este skill funciona em qualquer arquivo, independentemente de como foi feito.
1. Inspecione os fatos (nunca confie em suposições)
scripts/probe.sh video.mp4
Compare cada valor com o que foi solicitado (linha do tempo, briefing, especificação da plataforma):
| Verificação | Esperado |
|---|---|
| duração | duração solicitada ± 0,1s |
| fps / resolução | fps / L×A solicitados |
| codec / pix_fmt | h264 / yuv420p (yuvj420p = variante full-range, geralmente ok) |
| fluxo de áudio | presente se e somente se o vídeo deve ter som |
| loudness integrada | −14 ± 2 LUFS (plataformas sociais normalizam perto de −14) |
Qualquer incompatibilidade é um bug na renderização, não uma questão de gosto. Corrija upstream, re-renderize.
2. Loudness: medir → normalizar (apenas áudio, segundos)
# medir
ffmpeg -hide_banner -i video.mp4 -af ebur128 -f null - 2>&1 | awk '/Integrated loudness/{getline; print}'
# normalizar para −14 LUFS (fluxo de vídeo copiado, sem re-codificação)
ffmpeg -i video.mp4 -c:v copy -af "loudnorm=I=-14:TP=-1.5:LRA=11" -c:a aac -b:a 192k video_norm.mp4 \
&& mv video_norm.mp4 video.mp4
Nunca normalize de ouvido com um filtro de volume — LUFS é a unidade que as plataformas realmente usam.
3. Veja: folha de contato + tiras
scripts/contact_sheet.sh video.mp4 contact.png 2 8x # 1 quadro / 0,5s, 8 colunas
# 12 quadros consecutivos em torno de um momento delicado (transição em T):
ffmpeg -y -ss <T-0.2> -i video.mp4 -frames:v 12 -vf "scale=320:-1,tile=6x2" strip_T.png
Leia a folha como um filme: o ritmo está visível? cortes na grade da batida? alguma cena vazia ou superlotada? Folhas de contato escondem a qualidade do movimento — sempre ASSISTA ao vídeo completo pelo menos uma vez antes de aprovar.
4. Passagem crítica (construtor ≠ juiz)
Revise a RENDERIZAÇÃO — não a fonte, não as intenções — pontuando cada /10:
- Gancho — o quadro mais marcante nos primeiros 2 segundos?
- Legibilidade — texto ≥ tamanho mínimo, dentro das zonas seguras, sem sobreposição/corte, tempo de exibição suficiente?
- Movimento — sem easing linear, entradas com múltiplas propriedades, escalonamento, saídas mais rápidas que entradas?
- Sincronia — eventos alinhados na grade de batida/palavra?
- Consistência de estilo — uma família de paleta, um sistema tipográfico, transições unificadas?
- Som — locução clara, música atenuada, loudness alvo, sem clippagem?
Protocolo: registre os 3 piores defeitos COM timestamps → corrija exatamente esses → re-renderize → re-pontue. 3–5 rodadas até ≥8/10 em todos os critérios é normal. Execute a crítica em um contexto novo (ou subagente): o autor do código é o pior revisor do código.
5. Determinismo (para vídeos gerados/repetíveis)
# duas impressões digitais da mesma entrada devem corresponder byte a byte
ffmpeg -i video.mp4 -map 0:v -f framemd5 - | sha1sum
Mesmo pipeline, mesma entrada → hash diferente significa tempo de parede oculto, aleatoriedade não semeada ou estado acumulado: corrija o gerador, não "tente de novo".
6. Lista de verificação de entrega
video.mp4 H.264, yuv420p, +faststart, −14 LUFS
poster.png/jpg o quadro do gancho
contact.png o filme a 2 fps
sources o que gera o vídeo (editável > final)
Diga ao usuário exatamente qual arquivo deve editar para mudar algo e o comando de re-renderização.
Regra da evidência
Quando um revisor (humano ou modelo de visão) alegar um defeito de geometria ("texto está cortado", "elementos se sobrepõem"), confirme com uma medição (inspeção no player, amostra de pixel ou as próprias métricas do código gerador) antes de "corrigir" um não-bug. Revisores alucinam margens com muito mais frequência do que renderizações cortam texto.