Etalonaje
Script: scripts/grade.py IN OUT --look NOMBRE [--strength 0.8] [--lut archivo.cube] [--compare cuadrícula.png]
Lista los looks con --list. Aplica un look como una cadena de filtros de ffmpeg; --compare renderiza imágenes fijas de antes/después de varios looks para que tú (y el usuario) puedan elegir visualmente.
1. Orden de operaciones (siempre)
- Transformación de entrada: rotación/HDR/log → Rec.709 (Transformación de espacio de color en Resolve, LUT o tonemap en ffmpeg). Nunca etalonar metraje log directamente a ojo.
- Corrección (hacerlo neutro y consistente): balance de blancos → exposición → contraste → saturación. Objetivo: blancos blancos, negros negros, piel natural, cada toma emparejada.
- Look / etalonaje creativo: cambios de tono, split toning, curvas, LUT a intensidad reducida.
- Acabado: viñeta, grano, halación, enfoque al final.
Etalonar por segmento antes de concatenar para codificar una sola vez. Mismo look para cada clip en una secuencia a menos que un cambio sea un latido narrativo (p. ej., cálido tranquilo A → caótico frío B).
2. Modelo mental: ASC CDL
Por canal: out = (in × slope + offset) ^ power, luego saturación.
- slope → realces/ganancia, offset → sombras/levantamiento, power → tonos medios/gamma.
- Realces cálidos: subir R slope, bajar ligeramente B slope. Sombras teal: subir offset de B y G, bajar R.
- Equivalentes en ffmpeg:
colorbalance(sombras/medios/realces por RGB),colorlevels,curves,eq(contraste/brillo/saturación/gamma),colortemperature,lut3d,colorchannelmixer.
3. Looks (puntos de partida: juzgar sobre fotogramas, luego ajustar)
| Look | Sensación | Movimientos clave |
|---|---|---|
neutral-punch | limpio, listo para redes | pequeña curva S, +8% sat, sin cambio de tono |
teal-orange | blockbuster, viajes | sombras teal, realces cálidos, proteger piel (el naranja es el tono de la piel) |
warm-golden | nostálgico, comida, estilo de vida | WB +300-600 K, sombras cálidas levantadas, contraste suave |
cool-moody | tecnología, noche, drama | WB más frío, medios desaturados, negros profundos pero no aplastados |
film-kodak | estilo 2383/Portra | realces redondeados, ligeras sombras verde-cian, medios cálidos, grano 4-8% |
bleach-bypass | crudo, guerra, deporte | alto contraste, -40% saturación, realces plateados |
pastel-matte | estético, minimalista, moda | negros levantados (mate), menor contraste, -15% sat, realces rosa/durazno |
day-for-night | falsa noche a partir de metraje de día | -1.5 a -2 pasos, tinte azul, sat 0.3-0.5, aplastar cielo, mantener luces prácticas cálidas |
vintage-faded | video casero, 90s | negros desvanecidos, realces amarillo-verde, ruido de croma, suavidad |
bw-contrast | atemporal, documental | mezcla de luminancia (R pesado para piel), curva S fuerte, grano |
cyberpunk-neon | ciudad nocturna, videojuegos | división magenta-cian, alta saturación en realces, bloom en luces |
Referencia día por noche: el "LMT Day for Night" de DaVinci Resolve funciona en ACES AP1 lineal como power 0.5 → slope (0.3, 0.5, 0.8) → power 2.2 → saturation 0.3. Para usarlo en metraje Rec.709, convertir Rec.709 → lineal AP1, aplicar, convertir de vuelta y hornearlo en un .cube de 33 puntos. Levantar un poco las fuentes muy oscuras antes del LUT.
4. LUTs
- Aplicar con
lut3d=archivo.cube:interp=tetrahedral. Usar a intensidad reducida mezclando:split[a][b];[b]lut3d=x.cube[g];[a][g]blend=all_expr='A*(1-0.7)+B*0.7'. - Los LUTs técnicos (log→709) son exactos, usar al 100%. Los LUTs creativos son condimento, normalmente 40-80%.
- Nunca leer un archivo
.cubeen el contexto (decenas de miles de números). Mirar su efecto en un fotograma. - Generar LUTs personalizados en Python: construir una cuadrícula de 33³, aplicar la función de color con numpy, escribir
LUT_3D_SIZE 33+ filas (R más rápida).
5. Tonos de piel
- La piel se encuentra en la línea de tono de piel (~123° en un vectorscopio, línea I) independientemente de la etnia; solo cambian la luminancia y la saturación.
- Al aplicar looks teal/fríos, aislar la piel (HSL clave tono 0-50°, saturación media) y mantenerla, o la cara se vuelve gris/verde.
- Revisar cada plano de rostro en el etalonaje a tamaño completo.
6. Emparejamiento de tomas
- Emparejar exposición primero (forma de onda/luma promedio), luego WB (objeto neutro o blanco), luego saturación.
- Emparejamiento numérico rápido: comparar la media y la desviación estándar por canal de una región neutra entre tomas; ajustar slope/offset hasta que estén dentro de ~2-3%.
- Cámaras mixtas (móvil + cámara de acción + DSLR): convertir todas a Rec.709 primero, luego emparejar con la cámara principal.
7. Toques finales
- Grano:
noise=alls=6:allf=t(temporal). Añadir después de escalar al tamaño final. Reels 4K: el grano sobrevive mejor a la compresión con valores ligeramente más fuertes. - Viñeta:
vignette=PI/5sutil. Evitar en contenido con texto cerca de los bordes. - Halación / bloom: desenfocar una copia solo de realces (umbral, gblur 20-40), teñir rojo-naranja, superponer al 15-30%.
- Enfoque:
unsharp=5:5:0.6una vez, al final, al tamaño final. - HDR a SDR: consultar el mapeo de tonos de
ffmpeg-pipeline.
8. En DaVinci Resolve
Árbol de nodos base: CST entrada → WB/exposición → contraste/sat → secundario (piel) → look/LUT → CST salida → grano/viñeta. Usar Transformación de Espacio de Color con entrada = log de la cámara (p. ej. Apple Log) y salida = Rec.709 Gamma 2.4. Copiar etalonajes con imágenes fijas o Grupos de Color (pre/post-clip). Consultar davinci-resolve.
9. Verificar
Imágenes fijas de antes/después de 3+ tomas (la más brillante, la más oscura, un rostro) lado a lado. Verificar: sin realces recortados en la piel, negros no aplastados donde el detalle importa, superposiciones de texto aún legibles, look consistente entre cortes.