Trasformazioni complesse: LUT e split screen

A Gianandrea S., Claudio S. e Mirco S.
S. Reto

Attenzione: NON abbiamo visto le trasformazioni complesse nell’ambito del workshop!

Visualizzare la rappresentazione dei colori R′G′B′ (RGR)

# L'opzione
#   -filter_complex
# permette di concatenare vari ordini, da applicare individualmente a una parte
# soltanto dei dati trasmessi in entrata.
#
# In questo esempio, mediante il filtro "split", si copia quattro volte la
# stessa entrata in quattro settori.
#
# Si possono anche inviare parametri relativi al filtro "pad":
#   iw  larghezza dell'immagine d'entrata (= input width)
#   ih  altezza dell'immagine d'entrata (= input height)
#   w   larghezza dell'immagine che sta usando (= width)
#   h   altezza dell'immagine che sta usando (= height)
#
# Il filtro "lutrgb" accetta valori RGB.
#
# Il filtro "overlay" permette di sovrapporre elementi.

ffmpeg \
    -f lavfi \
    -i testsrc \
    -t 12 \
    -filter_complex \
        "split=4[a][b][c][d]; \
        [a]pad=iw*4:ih[w]; \
        [b]lutrgb=g=0:b=0[x]; \
        [c]lutrgb=r=0:b=0[y]; \
        [d]lutrgb=r=0:g=0[z]; \
        [w][x]overlay=w:0[wx]; \
        [wx][y]overlay=w*2:0[wxy]; \
        [wxy][z]overlay=w*3:0" \
    RGB.mov

Visualizzare la rappresentazione dei colori Y′CBCR (YUV)

# Il filtro "lutyuv" accetta valori YUV.

ffmpeg \
    -f lavfi \
    -i testsrc \
    -t 12 \
    -filter_complex \
        "split=4[a][b][c][d]; \
        [a]pad=iw*4:ih[w]; \
        [b]lutyuv=u=128:v=128[x]; \
        [c]lutyuv=y=0:v=128[y]; \
        [d]lutyuv=y=0:u=128[z]; \
        [w][x]overlay=w:0[wx]; \
        [wx][y]overlay=w*2:0[wxy]; \
        [wxy][z]overlay=w*3:0" \
    YUV.mov

Esercizi

  • Visualizzare un’immagine e la sua decomposizione nei canali RGB oppure YUV usando la disposizione a quadrato 2 x 2 invece che la disposizione in fila 4 x 1.
  • Visualizzare la separazione dei colori RGB con le tre componenti in bianco e nero.

Intermezzo: Generare un file di lavoro supplementare

# Tanto per cambiare, qui ho usato
#   -preset veryfast

ffmpeg \
    -i mandelbrot.mov \
    -c:v libx264 \
    -preset veryfast \
    -qp 50 \
    -pix_fmt yuv420p \
    -an \
    mandelbrot_50.mov

Visualizzare la differenza tra due file («delta file»)

# Il filtro "format" impone il formato. Qui "yuva444p" che significa 4:4:4 YUV
# planar con canale alpha.
#
# Il filtro "lut" accetta sia valori RGB sia valori YUV.
#
# Parametri (tra vari altri):
#   c0  fissa la prima componente, cioè R rispettivamente Y
#   c1  fissa la seconda component, cioè G rispettivamente U
#   c2  fissa la terza componente, cioè B rispettivamente V
#   c3  fissa la quarta componente, cioè il canale alpha
#
# In questo esempio ci sono, ovviamente, in entrata due file differenti.

ffmpeg \
    -i mandelbrot.mov \
    -i mandelbrot_50.mov \
    -filter_complex \
        "[1]format=yuva444p, \
            lut=c3=128, \
            negate[1_con_canale_alpha]; \
        [0][1_con_canale_alpha]overlay" \
    delta.mov

Usare lo split screen per confrontare due file

# Anche in questo esempio ci sono, ovviamente, in entrata due file differenti.

ffmpeg \
    -i mandelbrot.mov \
    -i mandelbrot_50.mov \
    -filter_complex \
        "[0]crop=iw/2:ih:0:0[prov]; \
        [1]crop=iw/2:ih:iw/2:0[destra]; \
        [prov]pad=iw*2:ih*1[sinistra]; \
        [sinistra][destra]overlay=w" \
    split.mov

Esercizi

  • Effettuare lo split screen orizzontalmente.
  • Visualizzare uno split screen i cui i due settori siano divisi da una sottile linea nera.
  • Effettuare lo split screen diagonalmente. [Mi sembra essere un esercizio più complesso. Perlomeno la mia attuale soluzione è decisamente complessa.]

Visualizzare la crominanza ridotta di 4:2:0 Y′CBCR

ffmpeg \
    -f lavfi \
    -i mandelbrot \
    -t 60 \
    -filter_complex \
        "split=3[1][2][3]; \
        [1]pad=iw*3/2:ih, \
            lutyuv=u=128:v=128[sinistra]; \
        [2]pad=iw:ih*2, \
            lutyuv=y=0:v=128, \
            scale=iw/2:ih/2[alto]; \
        [3]lutyuv=y=0:u=128, \
            scale=iw/2:ih/2[basso]; \
        [alto][basso]overlay=0:h[destra]; \
        [sinistra][destra]overlay=w*2:0" \
    YUV420.mov

Esercizio

  • Visualizzare la crominanza ridotta di 4:1:1 Y′CBCR.

2015-01-01