Video QA – la puerta de publicación
Un video no está listo cuando se renderiza; está listo cuando se ha inspeccionado, VISTO en una hoja de contacto y normalizado. Este skill funciona con cualquier archivo, independientemente de cómo se haya creado.
1. Inspeccionar los hechos (nunca asumas)
scripts/probe.sh video.mp4
Compara cada valor contra lo solicitado (línea de tiempo, brief, especificaciones de la plataforma):
| Verificación | Esperado |
|---|---|
| duración | duración solicitada ± 0.1 s |
| FPS / resolución | FPS / W×H solicitados |
| codec / pix_fmt | h264 / yuv420p (yuvj420p = variante de rango completo, normalmente válido) |
| flujo de audio | presente si y solo si el video debe tener sonido |
| sonoridad integrada | −14 ± 2 LUFS (las plataformas sociales normalizan cerca de −14) |
Cualquier discrepancia es un error en el render, no una cuestión de gusto. Corrige el origen, vuelve a renderizar.
2. Sonoridad: medir → normalizar (solo audio, en segundos)
# medir
ffmpeg -hide_banner -i video.mp4 -af ebur128 -f null - 2>&1 | awk '/Integrated loudness/{getline; print}'
# normalizar a −14 LUFS (flujo de video copiado, sin recodificar)
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 normalices «de oído» con un filtro de volumen: los LUFS son la unidad que realmente usan las plataformas.
3. Míralo: hoja de contacto + tiras
scripts/contact_sheet.sh video.mp4 contact.png 2 8x # 1 mosaico / 0.5 s, 8 columnas
# 12 fotogramas consecutivos alrededor de un momento delicado (transición en T):
ffmpeg -y -ss <T-0.2> -i video.mp4 -frames:v 12 -vf "scale=320:-1,tile=6x2" strip_T.png
Lee la hoja como un fotograma de película: ¿el ritmo es visible? ¿los cortes coinciden con la rejilla del compás? ¿alguna escena está vacía o abarrotada? Las hojas de contacto ocultan la calidad del movimiento: mira SIEMPRE el video completo al menos una vez antes de dar el visto bueno.
4. Pasada crítica (el constructor no es el juez)
Revisa el RENDER – no la fuente, no las intenciones – puntuando cada aspecto sobre 10:
- Gancho – ¿el fotograma más impactante está en los primeros 2 segundos?
- Legibilidad – ¿el texto tiene el tamaño mínimo, está dentro de las zonas seguras, sin superposiciones/cortes, y se mantiene el tiempo suficiente?
- Animación – ¿sin easing lineal, entradas con múltiples propiedades, escalonamiento, salidas más rápidas que las entradas?
- Sincronía – ¿los eventos caen en la rejilla del compás/palabra?
- Consistencia de estilo – ¿una familia de paletas, un sistema tipográfico, transiciones unificadas?
- Sonido – ¿VO claro, música atenuada, sonoridad objetivo, sin clipping?
Protocolo: anota los 3 peores defectos CON marcas de tiempo → corrige exactamente esos → vuelve a renderizar → repuntúa. De 3 a 5 rondas hasta obtener ≥8/10 en todo es normal. Ejecuta la crítica en un contexto nuevo (o subagente): el autor del código es el peor revisor del código.
5. Determinismo (para videos generados/repetibles)
# dos huellas digitales de la misma entrada deben coincidir byte por byte
ffmpeg -i video.mp4 -map 0:v -f framemd5 - | sha1sum
Misma canalización, misma entrada → hash diferente significa tiempo oculto del reloj de pared, aleatoriedad sin semilla o estado acumulado: corrige el generador, no «vuelvas a intentarlo».
6. Lista de verificación de entrega
video.mp4 H.264, yuv420p, +faststart, −14 LUFS
poster.png/jpg el fotograma de gancho
contact.png la tira de fotogramas a 2 FPS
fuentes lo que sea que genere el video (editable > final)
Indica al usuario exactamente qué archivo debe editar para cambiar una cosa, y el comando para volver a renderizar.
Regla de la evidencia
Cuando un revisor (humano o modelo de visión) afirme un defecto geométrico («el texto está cortado», «los elementos se superponen»), confírmalo con una medición (inspección en el reproductor, muestra de píxeles o las propias métricas del código generador) antes de «arreglar» un no-error. Los revisores alucinan márgenes con mucha más frecuencia de la que los renders cortan texto.