Ya mencionamos a
MVDegrain2 en
este hilo, pero vamos a hacer un resúmen aquí.
MVDegrain2 es parte de
MVTools. Es un poderoso filtro temporal para sacar ruido (
denoise) y creo que los ejemplos a continuación apenas comienzan a mostrar su potencial. Por ahora el parámetro más importante es
thSAD. Mientras más grande, más ruido saca.
La combinación más impresionante es un mix de filtros
para 'reparar' artefactos de compresión en DVDs de mala calidad. Algunos ejemplos hechos por Lux DeLux. Ojo, que este filtrado en particular es
MUY lento:
Antes:
Después:
Script:
Código: Seleccionar todo
source = last
backward_vec2 = source.MVAnalyse(isb = true, delta = 2, pel = 2, overlap=4, sharp=2, idx = 1, truemotion=true)
backward_vec1 = source.MVAnalyse(isb = true, delta = 1, pel = 2, overlap=4, sharp=2, idx = 1, truemotion=true)
forward_vec1 = source.MVAnalyse(isb = false, delta = 1, pel = 2, overlap=4, sharp=2, idx = 1, truemotion=true)
forward_vec2 = source.MVAnalyse(isb = false, delta = 2, pel = 2, overlap=4, sharp=2, idx = 1, truemotion=true)
mask = mvmask(kind=1, vectors=forward_vec1).UtoY().LanczosResize(576,432) #debe coincidir exactamente con el reescalado hecho después del crop
smooth = source.degrainmedian(mode=3).fft3dfilter(bw=16, bh=16, bt=3, sigma=3, plane=0)
source2 = maskedmerge(source, smooth, mask)
source3 = source2.MVDegrain2(backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=400,idx=1)
source3.gradfun2db(1.5)
--
Como ejemplo de de filtrado
rápido y
suave basado en MVDegrain2:
Código: Seleccionar todo
backward_vec2 = MVAnalyse(isb=true, truemotion=true, chroma=true, delta=2, pel=2, blksize=16, sharp=1, idx=1)
backward_vec1 = MVAnalyse(isb=true, truemotion=true, chroma=true, delta=1, pel=2, blksize=16, sharp=1, idx=1)
forward_vec1 = MVAnalyse(isb=false, truemotion=true, chroma=true, delta=1, pel=2, blksize=16, sharp=1, idx=1)
forward_vec2 = MVAnalyse(isb=false, truemotion=true, chroma=true, delta=2, pel=2, blksize=16, sharp=1, idx=1)
MVDegrain2(backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=100, idx=2)
Creo que
hank_quinlan ha utilizado esto o algo muy similar en sus últimos ripeos.
--
Y a partir de un hilo sobre MVDegrain2, DegrainMedian y FFT3DFilter en doom9, me enteré de un punto que tiene mucha lógica. En esta cadena que incluye MVDegrain2 hay siempre un MVAnalyse que hace el análisis de vectores de movimiento. Este análisis lo utiliza después MVDegrain2 para sacar el ruido de donde corresponda. Pero... justamente el ruido ya existente puede afectar adversamente al análisis de MVAnalyse. La solución es entregarle al MVAnalyse una versión con poco ruido para que pueda trabajar de forma más exacta.
Tengo toda una categoría de películas de características MUY similares. Las películas de acción/artes marcial de Hong Kong de principios de los 80s. Todas son muy difíciles de comprimir, tienen mucha acción, tienen mucho grano en algunas escenas (bastante grueso), tienen rayones y defectos varios y no tienen muchos detalles.
En estas películas de alrededor de 100~120mins con Xvid a un tamaño de 1/3DVD (aprox. 2CDs) la compresibilidad, incluso después de un filtrado 'normal' ronda alrededor del 50~56%. Incluso utilizando algo de MVDegrain2.
Pero entregando a MVAnalyse un clip con menos ruido, la efectividad aumenta vertiginosamente. Con este script (ver abajo) la compresibilidad saltó al 76%.
Comparativa de capturas. Arriba=original, abajo=filtrado:
El script:
Código: Seleccionar todo
crop( 6, 12, 0, -10)
Spline36Resize(688,368)
source=last
denoised=DegrainMedian(mode=3)
backward_vec2 = MVAnalyse(denoised,isb=true, truemotion=true, chroma=true, delta=2, pel=2, blksize=8, overlap=4, sharp=1, idx=1)
backward_vec1 = MVAnalyse(denoised,isb=true, truemotion=true, chroma=true, delta=1, pel=2, blksize=8, overlap=4, sharp=1, idx=1)
forward_vec1 = MVAnalyse(denoised,isb=false, truemotion=true, chroma=true, delta=1, pel=2, blksize=8, overlap=4, sharp=1, idx=1)
forward_vec2 = MVAnalyse(denoised,isb=false, truemotion=true, chroma=true, delta=2, pel=2, blksize=8, overlap=4, sharp=1, idx=1)
MVDegrain2(source,backward_vec1,forward_vec1,backward_vec2,forward_vec2,thSAD=250, idx=2)
FFT3DFilter(sigma=2.7,bt=4,plane=3) #sacar ruido solo en chroma