Grade de cor
Script: scripts/grade.py IN OUT --look NOME [--strength 0.8] [--lut arquivo.cube] [--compare grade.png]
Lista looks com --list. Aplica um look como uma cadeia de filtros ffmpeg; --compare renderiza imagens antes/depois de vários looks para que você (e o usuário) possa escolher visualmente.
1. Ordem das operações (sempre)
- Transformação de entrada: rotação/HDR/log → Rec.709 (Transformação de Espaço de Cor no Resolve, LUT ou tonemap no ffmpeg). Nunca grade log diretamente a olho.
- Correção (tornar neutro e consistente): balanço de branco → exposição → contraste → saturação. Objetivo: brancos brancos, pretos pretos, pele natural, cada plano correspondente.
- Look / grade criativa: deslocamentos de matiz, split toning, curvas, LUT em intensidade reduzida.
- Finalização: vinheta, granulação, halação, nitidez por último.
Grade por segmento antes da concatenação para codificar uma vez. Mesmo look para cada clipe em uma sequência, a menos que uma mudança seja uma mudança narrativa (ex.: calmo quente A → caótico frio B).
2. Modelo mental: ASC CDL
Por canal: saída = (entrada × slope + offset) ^ power, depois saturação.
- slope → realces/ganho, offset → sombras/lift, power → tons médios/gama.
- Realces quentes: aumentar R slope, diminuir B slope ligeiramente. Sombras teal: offset B e G para cima, R para baixo.
- Equivalentes ffmpeg:
colorbalance(sombras/tons médios/realces por RGB),colorlevels,curves,eq(contraste/brilho/saturação/gama),colortemperature,lut3d,colorchannelmixer.
3. Looks (pontos de partida — julgue nos frames, depois ajuste)
| Look | Sensação | Movimentos chave |
|---|---|---|
neutral-punch | limpo, pronto para redes sociais | pequeno S-curve, +8% sat, sem deslocamento de matiz |
teal-orange | blockbuster, viagem | sombras teal, realces quentes, proteger pele (laranja é o matiz da pele) |
warm-golden | nostálgico, comida, lifestyle | WB +300-600 K, sombras quentes levantadas, contraste suave |
cool-moody | tecnologia, noite, drama | WB mais frio, tons médios dessaturados, pretos profundos mas não esmagados |
film-kodak | estilo 2383/Portra | realces suavizados, sombras verde-ciano ligeiras, tons médios quentes, granulação 4-8% |
bleach-bypass | cru, guerra, esporte | alto contraste, -40% saturação, realces prateados |
pastel-matte | estético, minimalista, moda | pretos levantados (mate), contraste mais baixo, -15% sat, realces rosa/pêssego |
day-for-night | noite falsa a partir de filmagem diurna | -1.5 a -2 stops, tom azulado, sat 0.3-0.5, esmagar céu, manter luzes práticas quentes |
vintage-faded | vídeo caseiro, anos 90 | pretos desbotados, realzes amarelo-verde, ruído de croma, suavidade |
bw-contrast | atemporal, documentário | mix de luminância (R pesado para pele), S-curve forte, granulação |
cyberpunk-neon | cidade noturna, jogos | split magenta-ciano, alta saturação nos realces, bloom nas luzes |
Referência dia para noite: O "LMT Day for Night" do DaVinci Resolve funciona em ACES AP1 linear como power 0.5 → slope (0.3, 0.5, 0.8) → power 2.2 → saturation 0.3. Para usá-lo em filmagem Rec.709, converta Rec.709 → linear AP1, aplique, converta de volta e grave em um .cube de 33 pontos. Levante um pouco as fontes muito escuras antes do LUT.
4. LUTs
- Aplicar com
lut3d=arquivo.cube:interp=tetrahedral. Use em intensidade reduzida através de blend:split[a][b];[b]lut3d=x.cube[g];[a][g]blend=all_expr='A*(1-0.7)+B*0.7'. - LUTs técnicos (log→709) são exatos, use 100%. LUTs criativos são tempero, geralmente 40-80%.
- Nunca leia um arquivo
.cubeno contexto (dezenas de milhares de números). Veja seu efeito em um frame. - Gere LUTs personalizados em Python: construa uma grade 33³, aplique sua função de cor com numpy, escreva
LUT_3D_SIZE 33+ linhas (R mais rápido).
5. Tons de pele
- A pele fica na linha de tom de pele (~123° em um vectorscópio, linha I) independentemente da etnia; apenas luminância e saturação mudam.
- Ao aplicar looks teal/frios, isole a pele (HSL key matiz 0-50°, saturação média) e segure-a, ou o rosto ficará cinza/verde.
- Verifique cada plano de rosto na grade em tamanho real.
6. Correspondência de planos
- Combine exposição primeiro (forma de onda/luma média), depois WB (objeto neutro ou branco), depois saturação.
- Correspondência numérica rápida: compare a média e o desvio padrão por canal de uma região neutra entre os planos; ajuste slope/offset até ~2-3%.
- Câmeras mistas (telefone + action cam + DSLR): converta todas para Rec.709 primeiro, depois corresponda à câmera principal.
7. Toques finais
- Granulação:
noise=alls=6:allf=t(temporal). Adicione após redimensionar para o tamanho final. Reels 4K: a granulação sobrevive melhor à compressão com valores ligeiramente mais fortes. - Vinheta:
vignette=PI/5sutil. Evite em conteúdo com texto perto das bordas. - Halation / bloom: desfoque uma cópia apenas de realces (threshold, gblur 20-40), tingir de vermelho-laranja, screen a 15-30%.
- Nitidez:
unsharp=5:5:0.6uma vez, no final, no tamanho final. - HDR para SDR: veja o mapeamento de tom em
ffmpeg-pipeline.
8. No DaVinci Resolve
Árvore de nós base: CST in → WB/exposição → contraste/sat → secundário (pele) → look/LUT → CST out → granulação/vinheta. Use Transformação de Espaço de Cor com entrada = log da câmera (ex.: Apple Log) e saída = Rec.709 Gamma 2.4. Copie grades com stills ou Grupos de Cor (pré/pós-clipe). Veja davinci-resolve.
9. Verifique
Imagens antes/depois de 3+ planos (o mais claro, o mais escuro, um rosto) lado a lado. Verifique: sem realces estourados na pele, pretos não esmagados onde o detalhe importa, sobreposições de texto ainda legíveis, look consistente entre cortes.